diff --git a/README.md b/README.md index 05c1c075f0..885f91cb4e 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,12 @@ [![Build status](https://ci.appveyor.com/api/projects/status/kf3pwh2or5afsgl9/branch/master?svg=true)](https://ci.appveyor.com/project/sangshuduo/tdengine-2n8ge/branch/master) [![Coverage Status](https://coveralls.io/repos/github/taosdata/TDengine/badge.svg?branch=develop)](https://coveralls.io/github/taosdata/TDengine?branch=develop) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4201/badge)](https://bestpractices.coreinfrastructure.org/projects/4201) +
+[![Twitter Follow](https://img.shields.io/twitter/follow/tdenginedb?label=TDengine&style=social)](https://twitter.com/tdenginedb) +[![YouTube Channel](https://img.shields.io/badge/Subscribe_@tdengine--white?logo=youtube&style=social)](https://www.youtube.com/@tdengine) +[![Discord Community](https://img.shields.io/badge/Join_Discord--white?logo=discord&style=social)](https://discord.com/invite/VZdSuUg4pS) +[![LinkedIn](https://img.shields.io/badge/Follow_LinkedIn--white?logo=linkedin&style=social)](https://www.linkedin.com/company/tdengine) +[![StackOverflow](https://img.shields.io/badge/Ask_StackOverflow--white?logo=stackoverflow&style=social&logoColor=orange)](https://stackoverflow.com/questions/tagged/tdengine) English | [简体中文](README-CN.md) | [TDengine Cloud](https://cloud.tdengine.com) | [Learn more about TSDB](https://tdengine.com/tsdb/) diff --git a/include/common/tmsg.h b/include/common/tmsg.h index 7d096a408b..a82364f347 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -1282,8 +1282,8 @@ int32_t tSerializeSAlterVnodeReplicaReq(void* buf, int32_t bufLen, SAlterVnodeRe int32_t tDeserializeSAlterVnodeReplicaReq(void* buf, int32_t bufLen, SAlterVnodeReplicaReq* pReq); typedef struct { - int32_t vgId; - int8_t disable; + int32_t vgId; + int8_t disable; } SDisableVnodeWriteReq; int32_t tSerializeSDisableVnodeWriteReq(void* buf, int32_t bufLen, SDisableVnodeWriteReq* pReq); @@ -1783,6 +1783,7 @@ typedef struct { #define STREAM_FILL_HISTORY_ON 1 #define STREAM_FILL_HISTORY_OFF 0 #define STREAM_DEFAULT_FILL_HISTORY STREAM_FILL_HISTORY_OFF +#define STREAM_DEFAULT_IGNORE_UPDATE 0 #define STREAM_CREATE_STABLE_TRUE 1 #define STREAM_CREATE_STABLE_FALSE 0 @@ -1811,7 +1812,8 @@ typedef struct { // 3.0.2.3 int8_t createStb; uint64_t targetStbUid; - SArray* fillNullCols; // array of SColLocation + SArray* fillNullCols; // array of SColLocation + int8_t igUpdate; } SCMCreateStreamReq; typedef struct { diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index 07649690f7..ada3fd20e8 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -213,132 +213,132 @@ #define TK_IGNORE 195 #define TK_EXPIRED 196 #define TK_FILL_HISTORY 197 -#define TK_SUBTABLE 198 -#define TK_KILL 199 -#define TK_CONNECTION 200 -#define TK_TRANSACTION 201 -#define TK_BALANCE 202 -#define TK_VGROUP 203 -#define TK_MERGE 204 -#define TK_REDISTRIBUTE 205 -#define TK_SPLIT 206 -#define TK_DELETE 207 -#define TK_INSERT 208 -#define TK_NULL 209 -#define TK_NK_QUESTION 210 -#define TK_NK_ARROW 211 -#define TK_ROWTS 212 -#define TK_QSTART 213 -#define TK_QEND 214 -#define TK_QDURATION 215 -#define TK_WSTART 216 -#define TK_WEND 217 -#define TK_WDURATION 218 -#define TK_IROWTS 219 -#define TK_ISFILLED 220 -#define TK_CAST 221 -#define TK_NOW 222 -#define TK_TODAY 223 -#define TK_TIMEZONE 224 -#define TK_CLIENT_VERSION 225 -#define TK_SERVER_VERSION 226 -#define TK_SERVER_STATUS 227 -#define TK_CURRENT_USER 228 -#define TK_CASE 229 -#define TK_END 230 -#define TK_WHEN 231 -#define TK_THEN 232 -#define TK_ELSE 233 -#define TK_BETWEEN 234 -#define TK_IS 235 -#define TK_NK_LT 236 -#define TK_NK_GT 237 -#define TK_NK_LE 238 -#define TK_NK_GE 239 -#define TK_NK_NE 240 -#define TK_MATCH 241 -#define TK_NMATCH 242 -#define TK_CONTAINS 243 -#define TK_IN 244 -#define TK_JOIN 245 -#define TK_INNER 246 -#define TK_SELECT 247 -#define TK_DISTINCT 248 -#define TK_WHERE 249 -#define TK_PARTITION 250 -#define TK_BY 251 -#define TK_SESSION 252 -#define TK_STATE_WINDOW 253 -#define TK_EVENT_WINDOW 254 -#define TK_START 255 -#define TK_SLIDING 256 -#define TK_FILL 257 -#define TK_VALUE 258 -#define TK_VALUE_F 259 -#define TK_NONE 260 -#define TK_PREV 261 -#define TK_NULL_F 262 -#define TK_LINEAR 263 -#define TK_NEXT 264 -#define TK_HAVING 265 -#define TK_RANGE 266 -#define TK_EVERY 267 -#define TK_ORDER 268 -#define TK_SLIMIT 269 -#define TK_SOFFSET 270 -#define TK_LIMIT 271 -#define TK_OFFSET 272 -#define TK_ASC 273 -#define TK_NULLS 274 -#define TK_ABORT 275 -#define TK_AFTER 276 -#define TK_ATTACH 277 -#define TK_BEFORE 278 -#define TK_BEGIN 279 -#define TK_BITAND 280 -#define TK_BITNOT 281 -#define TK_BITOR 282 -#define TK_BLOCKS 283 -#define TK_CHANGE 284 -#define TK_COMMA 285 -#define TK_CONCAT 286 -#define TK_CONFLICT 287 -#define TK_COPY 288 -#define TK_DEFERRED 289 -#define TK_DELIMITERS 290 -#define TK_DETACH 291 -#define TK_DIVIDE 292 -#define TK_DOT 293 -#define TK_EACH 294 -#define TK_FAIL 295 -#define TK_FILE 296 -#define TK_FOR 297 -#define TK_GLOB 298 -#define TK_ID 299 -#define TK_IMMEDIATE 300 -#define TK_IMPORT 301 -#define TK_INITIALLY 302 -#define TK_INSTEAD 303 -#define TK_ISNULL 304 -#define TK_KEY 305 -#define TK_MODULES 306 -#define TK_NK_BITNOT 307 -#define TK_NK_SEMI 308 -#define TK_NOTNULL 309 -#define TK_OF 310 -#define TK_PLUS 311 -#define TK_PRIVILEGE 312 -#define TK_RAISE 313 -#define TK_REPLACE 314 -#define TK_RESTRICT 315 -#define TK_ROW 316 -#define TK_SEMI 317 -#define TK_STAR 318 -#define TK_STATEMENT 319 -#define TK_STRICT 320 -#define TK_STRING 321 -#define TK_TIMES 322 -#define TK_UPDATE 323 +#define TK_UPDATE 198 +#define TK_SUBTABLE 199 +#define TK_KILL 200 +#define TK_CONNECTION 201 +#define TK_TRANSACTION 202 +#define TK_BALANCE 203 +#define TK_VGROUP 204 +#define TK_MERGE 205 +#define TK_REDISTRIBUTE 206 +#define TK_SPLIT 207 +#define TK_DELETE 208 +#define TK_INSERT 209 +#define TK_NULL 210 +#define TK_NK_QUESTION 211 +#define TK_NK_ARROW 212 +#define TK_ROWTS 213 +#define TK_QSTART 214 +#define TK_QEND 215 +#define TK_QDURATION 216 +#define TK_WSTART 217 +#define TK_WEND 218 +#define TK_WDURATION 219 +#define TK_IROWTS 220 +#define TK_ISFILLED 221 +#define TK_CAST 222 +#define TK_NOW 223 +#define TK_TODAY 224 +#define TK_TIMEZONE 225 +#define TK_CLIENT_VERSION 226 +#define TK_SERVER_VERSION 227 +#define TK_SERVER_STATUS 228 +#define TK_CURRENT_USER 229 +#define TK_CASE 230 +#define TK_END 231 +#define TK_WHEN 232 +#define TK_THEN 233 +#define TK_ELSE 234 +#define TK_BETWEEN 235 +#define TK_IS 236 +#define TK_NK_LT 237 +#define TK_NK_GT 238 +#define TK_NK_LE 239 +#define TK_NK_GE 240 +#define TK_NK_NE 241 +#define TK_MATCH 242 +#define TK_NMATCH 243 +#define TK_CONTAINS 244 +#define TK_IN 245 +#define TK_JOIN 246 +#define TK_INNER 247 +#define TK_SELECT 248 +#define TK_DISTINCT 249 +#define TK_WHERE 250 +#define TK_PARTITION 251 +#define TK_BY 252 +#define TK_SESSION 253 +#define TK_STATE_WINDOW 254 +#define TK_EVENT_WINDOW 255 +#define TK_START 256 +#define TK_SLIDING 257 +#define TK_FILL 258 +#define TK_VALUE 259 +#define TK_VALUE_F 260 +#define TK_NONE 261 +#define TK_PREV 262 +#define TK_NULL_F 263 +#define TK_LINEAR 264 +#define TK_NEXT 265 +#define TK_HAVING 266 +#define TK_RANGE 267 +#define TK_EVERY 268 +#define TK_ORDER 269 +#define TK_SLIMIT 270 +#define TK_SOFFSET 271 +#define TK_LIMIT 272 +#define TK_OFFSET 273 +#define TK_ASC 274 +#define TK_NULLS 275 +#define TK_ABORT 276 +#define TK_AFTER 277 +#define TK_ATTACH 278 +#define TK_BEFORE 279 +#define TK_BEGIN 280 +#define TK_BITAND 281 +#define TK_BITNOT 282 +#define TK_BITOR 283 +#define TK_BLOCKS 284 +#define TK_CHANGE 285 +#define TK_COMMA 286 +#define TK_CONCAT 287 +#define TK_CONFLICT 288 +#define TK_COPY 289 +#define TK_DEFERRED 290 +#define TK_DELIMITERS 291 +#define TK_DETACH 292 +#define TK_DIVIDE 293 +#define TK_DOT 294 +#define TK_EACH 295 +#define TK_FAIL 296 +#define TK_FILE 297 +#define TK_FOR 298 +#define TK_GLOB 299 +#define TK_ID 300 +#define TK_IMMEDIATE 301 +#define TK_IMPORT 302 +#define TK_INITIALLY 303 +#define TK_INSTEAD 304 +#define TK_ISNULL 305 +#define TK_KEY 306 +#define TK_MODULES 307 +#define TK_NK_BITNOT 308 +#define TK_NK_SEMI 309 +#define TK_NOTNULL 310 +#define TK_OF 311 +#define TK_PLUS 312 +#define TK_PRIVILEGE 313 +#define TK_RAISE 314 +#define TK_REPLACE 315 +#define TK_RESTRICT 316 +#define TK_ROW 317 +#define TK_SEMI 318 +#define TK_STAR 319 +#define TK_STATEMENT 320 +#define TK_STRICT 321 +#define TK_STRING 322 +#define TK_TIMES 323 #define TK_VALUES 324 #define TK_VARIABLE 325 #define TK_VIEW 326 diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index 016a9e8281..164fbf018c 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -400,6 +400,7 @@ typedef struct SStreamOptions { SNode* pDeleteMark; int8_t fillHistory; int8_t ignoreExpired; + int8_t ignoreUpdate; } SStreamOptions; typedef struct SCreateStreamStmt { diff --git a/include/libs/nodes/plannodes.h b/include/libs/nodes/plannodes.h index 89ad7fc9ba..ad4b59714c 100644 --- a/include/libs/nodes/plannodes.h +++ b/include/libs/nodes/plannodes.h @@ -93,6 +93,7 @@ typedef struct SScanLogicNode { int64_t watermark; int64_t deleteMark; int8_t igExpired; + int8_t igCheckUpdate; SArray* pSmaIndexes; SNodeList* pGroupTags; bool groupSort; @@ -224,6 +225,7 @@ typedef struct SWindowLogicNode { int64_t watermark; int64_t deleteMark; int8_t igExpired; + int8_t igCheckUpdate; EWindowAlgorithm windowAlgo; EOrder inputTsOrder; EOrder outputTsOrder; @@ -364,6 +366,7 @@ typedef struct STableScanPhysiNode { int64_t watermark; int8_t igExpired; bool assignBlockUid; + int8_t igCheckUpdate; } STableScanPhysiNode; typedef STableScanPhysiNode STableSeqScanPhysiNode; diff --git a/include/libs/planner/planner.h b/include/libs/planner/planner.h index f7bd68393e..41c0e98084 100644 --- a/include/libs/planner/planner.h +++ b/include/libs/planner/planner.h @@ -36,6 +36,7 @@ typedef struct SPlanContext { int64_t watermark; int64_t deleteMark; int8_t igExpired; + int8_t igCheckUpdate; char* pMsg; int32_t msgLen; const char* pUser; diff --git a/include/libs/wal/wal.h b/include/libs/wal/wal.h index a0f421212a..1eed342f8c 100644 --- a/include/libs/wal/wal.h +++ b/include/libs/wal/wal.h @@ -191,6 +191,7 @@ int32_t walApplyVer(SWal *, int64_t ver); // read SWalReader *walOpenReader(SWal *, SWalFilterCond *pCond); void walCloseReader(SWalReader *pRead); +void walReadReset(SWalReader *pReader); int32_t walReadVer(SWalReader *pRead, int64_t ver); int32_t walReadSeekVer(SWalReader *pRead, int64_t ver); int32_t walNextValidMsg(SWalReader *pRead); diff --git a/include/os/osFile.h b/include/os/osFile.h index ae77e0f27a..0e93002706 100644 --- a/include/os/osFile.h +++ b/include/os/osFile.h @@ -110,6 +110,8 @@ bool taosValidFile(TdFilePtr pFile); int32_t taosGetErrorFile(TdFilePtr pFile); +int32_t taosCompressFile(char *srcFileName, char *destFileName); + #ifdef __cplusplus } #endif diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 53f25d3fe4..c75425425b 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -111,6 +111,7 @@ int32_t* taosGetErrno(); #define TSDB_CODE_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x012A) #define TSDB_CODE_NO_DISKSPACE TAOS_DEF_ERROR_CODE(0, 0x012B) #define TSDB_CODE_TIMEOUT_ERROR TAOS_DEF_ERROR_CODE(0, 0x012C) +#define TSDB_CODE_MSG_ENCODE_ERROR TAOS_DEF_ERROR_CODE(0, 0x012D) #define TSDB_CODE_APP_IS_STARTING TAOS_DEF_ERROR_CODE(0, 0x0130) // #define TSDB_CODE_APP_IS_STOPPING TAOS_DEF_ERROR_CODE(0, 0x0131) // diff --git a/source/client/CMakeLists.txt b/source/client/CMakeLists.txt index 0c445c7fbf..d0cfd38fb9 100644 --- a/source/client/CMakeLists.txt +++ b/source/client/CMakeLists.txt @@ -62,4 +62,4 @@ target_link_libraries( if(${BUILD_TEST}) ADD_SUBDIRECTORY(test) -endif(${BUILD_TEST}) \ No newline at end of file +endif(${BUILD_TEST}) diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index f290a83df0..70cdd291e4 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -25,6 +25,8 @@ #include "tref.h" #include "ttimer.h" +static tb_uid_t processSuid(tb_uid_t suid, char* db) { return suid + MurmurHash3_32(db, strlen(db)); } + static char* buildCreateTableJson(SSchemaWrapper* schemaRow, SSchemaWrapper* schemaTag, char* name, int64_t id, int8_t t) { char* string = NULL; @@ -690,7 +692,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { pReq.numOfColumns = req.schemaRow.nCols; pReq.numOfTags = req.schemaTag.nCols; pReq.commentLen = -1; - pReq.suid = req.suid; + pReq.suid = processSuid(req.suid, pRequest->pDb); pReq.source = TD_REQ_FROM_TAOX; pReq.igExists = true; @@ -762,7 +764,7 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) { // build drop stable pReq.igNotExists = true; pReq.source = TD_REQ_FROM_TAOX; - pReq.suid = req.suid; + pReq.suid = processSuid(req.suid, pRequest->pDb); STscObj* pTscObj = pRequest->pTscObj; SName tableName = {0}; @@ -880,6 +882,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { if (pCreateReq->type == TSDB_CHILD_TABLE) { STableMeta* pTableMeta = NULL; SName sName = {0}; + pCreateReq->ctb.suid = processSuid(pCreateReq->ctb.suid, pRequest->pDb); toName(pTscObj->acctId, pRequest->pDb, pCreateReq->ctb.stbName, &sName); code = catalogGetTableMeta(pCatalog, &conn, &sName, &pTableMeta); if (code != TSDB_CODE_SUCCESS) { @@ -1017,6 +1020,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { for (int32_t iReq = 0; iReq < req.nReqs; iReq++) { pDropReq = req.pReqs + iReq; pDropReq->igNotExists = true; + pDropReq->suid = processSuid(pDropReq->suid, pRequest->pDb); SVgroupInfo pInfo = {0}; SName pName = {0}; @@ -1506,11 +1510,11 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) { } SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.rsp.blockSchema, rspObj.resIter); - TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD)); - if(fields == NULL){ + TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD)); + if (fields == NULL) { goto end; } - for(int i = 0; i < pSW->nCols; i++){ + for (int i = 0; i < pSW->nCols; i++) { fields[i].type = pSW->pSchema[i].type; fields[i].bytes = pSW->pSchema[i].bytes; tstrncpy(fields[i].name, pSW->pSchema[i].name, tListLen(pSW->pSchema[i].name)); @@ -1621,7 +1625,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) void** dataTmp = taosArrayGet(rspObj.rsp.createTableReq, j); int32_t* lenTmp = taosArrayGet(rspObj.rsp.createTableLen, j); - SDecoder decoderTmp = {0}; + SDecoder decoderTmp = {0}; SVCreateTbReq pCreateReq = {0}; tDecoderInit(&decoderTmp, *dataTmp, *lenTmp); if (tDecodeSVCreateTbReq(&decoderTmp, &pCreateReq) < 0) { @@ -1644,9 +1648,9 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) tDecoderClear(&decoderTmp); } - if(pCreateReqDst){ + if (pCreateReqDst) { strcpy(pName.tname, pCreateReqDst->ctb.stbName); - }else{ + } else { strcpy(pName.tname, tbName); } code = catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta); @@ -1667,9 +1671,9 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) goto end; } - if(pCreateReqDst){ + if (pCreateReqDst) { pTableMeta->vgId = vg.vgId; - pTableMeta->uid = pCreateReqDst->uid; + pTableMeta->uid = pCreateReqDst->uid; } void* hData = taosHashGet(pVgHash, &vg.vgId, sizeof(vg.vgId)); if (hData == NULL) { @@ -1677,11 +1681,11 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) } SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.rsp.blockSchema, rspObj.resIter); - TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD)); - if(fields == NULL){ + TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD)); + if (fields == NULL) { goto end; } - for(int i = 0; i < pSW->nCols; i++){ + for (int i = 0; i < pSW->nCols; i++) { fields[i].type = pSW->pSchema[i].type; fields[i].bytes = pSW->pSchema[i].bytes; tstrncpy(fields[i].name, pSW->pSchema[i].name, tListLen(pSW->pSchema[i].name)); diff --git a/source/client/src/clientSml.c b/source/client/src/clientSml.c index db8cdccbf6..60002425f7 100644 --- a/source/client/src/clientSml.c +++ b/source/client/src/clientSml.c @@ -1017,11 +1017,11 @@ void smlDestroyTableInfo(SSmlHandle *info, SSmlTableInfo *tag) { taosHashCleanup(kvHash); } -// if (info->parseJsonByLib) { -// SSmlLineInfo *key = (SSmlLineInfo *)(tag->key); -// if (key != NULL) taosMemoryFree(key->tags); -// } -// taosMemoryFree(tag->key); + // if (info->parseJsonByLib) { + // SSmlLineInfo *key = (SSmlLineInfo *)(tag->key); + // if (key != NULL) taosMemoryFree(key->tags); + // } + // taosMemoryFree(tag->key); taosArrayDestroy(tag->cols); taosArrayDestroy(tag->tags); taosMemoryFree(tag); @@ -1082,8 +1082,7 @@ void smlDestroyInfo(SSmlHandle *info) { if (info->parseJsonByLib) { taosMemoryFree(info->lines[i].tags); } - if(info->lines[i].measureTagsLen != 0) - taosMemoryFree(info->lines[i].measureTag); + if (info->lines[i].measureTagsLen != 0) taosMemoryFree(info->lines[i].measureTag); } taosMemoryFree(info->lines); } @@ -1157,9 +1156,11 @@ static int32_t smlParseLineBottom(SSmlHandle *info) { if (info->protocol == TSDB_SML_LINE_PROTOCOL) { tinfo = *(SSmlTableInfo **)taosHashGet(info->childTables, elements->measure, elements->measureTagsLen); } else if (info->protocol == TSDB_SML_TELNET_PROTOCOL) { - tinfo = *(SSmlTableInfo **)taosHashGet(info->childTables, elements->measureTag, elements->measureLen + elements->tagsLen); + tinfo = *(SSmlTableInfo **)taosHashGet(info->childTables, elements->measureTag, + elements->measureLen + elements->tagsLen); } else { - tinfo = *(SSmlTableInfo **)taosHashGet(info->childTables, elements->measureTag, elements->measureLen + elements->tagsLen); + tinfo = *(SSmlTableInfo **)taosHashGet(info->childTables, elements->measureTag, + elements->measureLen + elements->tagsLen); } if (tinfo == NULL) { @@ -1247,9 +1248,9 @@ static int32_t smlInsertData(SSmlHandle *info) { (*pMeta)->tableMeta->vgId = vg.vgId; (*pMeta)->tableMeta->uid = tableData->uid; // one table merge data block together according uid - code = smlBindData(info->pQuery, info->dataFormat, tableData->tags, (*pMeta)->cols, tableData->cols, (*pMeta)->tableMeta, - tableData->childTableName, tableData->sTableName, tableData->sTableNameLen, info->ttl, - info->msgBuf.buf, info->msgBuf.len); + code = smlBindData(info->pQuery, info->dataFormat, tableData->tags, (*pMeta)->cols, tableData->cols, + (*pMeta)->tableMeta, tableData->childTableName, tableData->sTableName, tableData->sTableNameLen, + info->ttl, info->msgBuf.buf, info->msgBuf.len); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlBindData failed", info->id); return code; @@ -1371,7 +1372,7 @@ static int32_t smlParseLine(SSmlHandle *info, char *lines[], char *rawLine, char if (info->dataFormat) { SSmlLineInfo element = {0}; code = smlParseTelnetString(info, (char *)tmp, (char *)tmp + len, &element); - if(element.measureTagsLen != 0) taosMemoryFree(element.measureTag); + if (element.measureTagsLen != 0) taosMemoryFree(element.measureTag); } else { code = smlParseTelnetString(info, (char *)tmp, (char *)tmp + len, info->lines + i); } diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index f176ccf37f..2ceeeefa5f 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -5485,6 +5485,7 @@ int32_t tSerializeSCMCreateStreamReq(void *buf, int32_t bufLen, const SCMCreateS if (tEncodeI32(&encoder, pField->bytes) < 0) return -1; if (tEncodeCStr(&encoder, pField->name) < 0) return -1; } + if (tEncodeI8(&encoder, pReq->createStb) < 0) return -1; if (tEncodeU64(&encoder, pReq->targetStbUid) < 0) return -1; if (tEncodeI32(&encoder, taosArrayGetSize(pReq->fillNullCols)) < 0) return -1; @@ -5494,6 +5495,7 @@ int32_t tSerializeSCMCreateStreamReq(void *buf, int32_t bufLen, const SCMCreateS if (tEncodeI16(&encoder, pCol->colId) < 0) return -1; if (tEncodeI8(&encoder, pCol->type) < 0) return -1; } + if (tEncodeI8(&encoder, pReq->igUpdate) < 0) return -1; tEndEncode(&encoder); @@ -5577,6 +5579,8 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea } } + if (tDecodeI8(&decoder, &pReq->igUpdate) < 0) return -1; + tEndDecode(&decoder); tDecoderClear(&decoder); diff --git a/source/dnode/mnode/impl/inc/mndDef.h b/source/dnode/mnode/impl/inc/mndDef.h index 075122d85b..6ff1dc576e 100644 --- a/source/dnode/mnode/impl/inc/mndDef.h +++ b/source/dnode/mnode/impl/inc/mndDef.h @@ -650,6 +650,7 @@ typedef struct { int64_t checkpointFreq; // ms int64_t currentTick; // do not serialize int64_t deleteMark; + int8_t igCheckUpdate; } SStreamObj; int32_t tEncodeSStreamObj(SEncoder* pEncoder, const SStreamObj* pObj); diff --git a/source/dnode/mnode/impl/src/mndDef.c b/source/dnode/mnode/impl/src/mndDef.c index 8983d73c70..da2ad158e3 100644 --- a/source/dnode/mnode/impl/src/mndDef.c +++ b/source/dnode/mnode/impl/src/mndDef.c @@ -78,6 +78,7 @@ int32_t tEncodeSStreamObj(SEncoder *pEncoder, const SStreamObj *pObj) { // 3.0.20 if (tEncodeI64(pEncoder, pObj->checkpointFreq) < 0) return -1; + if (tEncodeI8(pEncoder, pObj->igCheckUpdate) < 0) return -1; tEndEncode(pEncoder); return pEncoder->pos; @@ -145,6 +146,7 @@ int32_t tDecodeSStreamObj(SDecoder *pDecoder, SStreamObj *pObj, int32_t sver) { // 3.0.20 if (sver >= 2) { if (tDecodeI64(pDecoder, &pObj->checkpointFreq) < 0) return -1; + if (tDecodeI8(pDecoder, &pObj->igCheckUpdate) < 0) return -1; } tEndDecode(pDecoder); return 0; @@ -493,7 +495,7 @@ int32_t tEncodeSubscribeObj(void **buf, const SMqSubscribeObj *pSub) { tlen += tEncodeSMqConsumerEp(buf, pConsumerEp); cnt++; } - if(cnt != sz) return -1; + if (cnt != sz) return -1; tlen += taosEncodeArray(buf, pSub->unassignedVgs, (FEncode)tEncodeSMqVgEp); tlen += taosEncodeString(buf, pSub->dbName); return tlen; diff --git a/source/dnode/mnode/impl/src/mndStream.c b/source/dnode/mnode/impl/src/mndStream.c index c192ea7efd..bf9168ac8f 100644 --- a/source/dnode/mnode/impl/src/mndStream.c +++ b/source/dnode/mnode/impl/src/mndStream.c @@ -297,6 +297,7 @@ static int32_t mndBuildStreamObjFromCreateReq(SMnode *pMnode, SStreamObj *pObj, pObj->triggerParam = pCreate->maxDelay; pObj->watermark = pCreate->watermark; pObj->fillHistory = pCreate->fillHistory; + pObj->igCheckUpdate = pCreate->igUpdate; memcpy(pObj->sourceDb, pCreate->sourceDB, TSDB_DB_FNAME_LEN); SDbObj *pSourceDb = mndAcquireDb(pMnode, pCreate->sourceDB); @@ -379,6 +380,7 @@ static int32_t mndBuildStreamObjFromCreateReq(SMnode *pMnode, SStreamObj *pObj, .triggerType = pObj->trigger == STREAM_TRIGGER_MAX_DELAY ? STREAM_TRIGGER_WINDOW_CLOSE : pObj->trigger, .watermark = pObj->watermark, .igExpired = pObj->igExpired, + .igCheckUpdate = pObj->igCheckUpdate, }; // using ast and param to build physical plan diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index 78e0643e10..335cfc32d5 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -1409,6 +1409,9 @@ static int metaUpdateTagIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry) { int32_t ret = 0; // get super table if (tdbTbGet(pMeta->pUidIdx, &pCtbEntry->ctbEntry.suid, sizeof(tb_uid_t), &pData, &nData) != 0) { + metaError("vgId:%d, failed to get stable suid for update. version:%" PRId64, TD_VID(pMeta->pVnode), + pCtbEntry->version); + terrno = TSDB_CODE_TDB_INVALID_TABLE_ID; ret = -1; goto end; } diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 6abdabe6fc..4466721fb9 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -1691,9 +1691,9 @@ static int32_t buildDataBlockFromBuf(STsdbReader* pReader, STableBlockScanInfo* double elapsedTime = (taosGetTimestampUs() - st) / 1000.0; tsdbDebug("%p build data block from cache completed, elapsed time:%.2f ms, numOfRows:%d, brange:%" PRId64 - " - %" PRId64 " %s", + " - %" PRId64 ", uid:%"PRIu64", %s", pReader, elapsedTime, pBlock->info.rows, pBlock->info.window.skey, pBlock->info.window.ekey, - pReader->idStr); + pBlockScanInfo->uid, pReader->idStr); pReader->cost.buildmemBlock += elapsedTime; return code; @@ -1719,8 +1719,10 @@ static bool tryCopyDistinctRowFromFileBlock(STsdbReader* pReader, SBlockData* pB return false; } -static bool nextRowFromLastBlocks(SLastBlockReader* pLastBlockReader, STableBlockScanInfo* pBlockScanInfo, +static bool nextRowFromLastBlocks(SLastBlockReader* pLastBlockReader, STableBlockScanInfo* pScanInfo, SVersionRange* pVerRange) { + int32_t step = ASCENDING_TRAVERSE(pLastBlockReader->order)? 1:-1; + while (1) { bool hasVal = tMergeTreeNext(&pLastBlockReader->mergeTree); if (!hasVal) { @@ -1729,8 +1731,15 @@ static bool nextRowFromLastBlocks(SLastBlockReader* pLastBlockReader, STableBloc TSDBROW row = tMergeTreeGetRow(&pLastBlockReader->mergeTree); TSDBKEY k = TSDBROW_KEY(&row); - if (!hasBeenDropped(pBlockScanInfo->delSkyline, &pBlockScanInfo->lastBlockDelIndex, &k, pLastBlockReader->order, - pVerRange)) { + if (hasBeenDropped(pScanInfo->delSkyline, &pScanInfo->lastBlockDelIndex, &k, pLastBlockReader->order, pVerRange)) { + pScanInfo->lastKey = k.ts; + } else { + // the qualifed ts may equal to k.ts, only a greater version one. + // here we need to fallback one step. + if (pScanInfo->lastKey == k.ts) { + pScanInfo->lastKey -= step; + } + return true; } } @@ -2398,6 +2407,7 @@ static bool initLastBlockReader(SLastBlockReader* pLBlockReader, STableBlockScan w.ekey = pScanInfo->lastKey + step; } + tsdbDebug("init last block reader, window:%"PRId64"-%"PRId64", uid:%"PRIu64", %s", w.skey, w.ekey, pScanInfo->uid, pReader->idStr); int32_t code = tMergeTreeOpen(&pLBlockReader->mergeTree, (pLBlockReader->order == TSDB_ORDER_DESC), pReader->pFileReader, pReader->suid, pScanInfo->uid, &w, &pLBlockReader->verRange, pLBlockReader->pInfo, false, pReader->idStr); @@ -2838,18 +2848,6 @@ static void extractOrderedTableUidList(SUidOrderCheckInfo* pOrderCheckInfo, SRea taosSort(pOrderCheckInfo->tableUidList, total, sizeof(uint64_t), uidComparFunc); } -// reset the last del file index -static void resetScanBlockLastBlockDelIndex(SReaderStatus* pStatus, int32_t order) { - void* p = taosHashIterate(pStatus->pTableMap, NULL); - while (p != NULL) { - STableBlockScanInfo* pScanInfo = *(STableBlockScanInfo**)p; - - // reset the last del file index - pScanInfo->lastBlockDelIndex = getInitialDelIndex(pScanInfo->delSkyline, order); - p = taosHashIterate(pStatus->pTableMap, p); - } -} - static int32_t initOrderCheckInfo(SUidOrderCheckInfo* pOrderCheckInfo, STsdbReader* pReader) { SReaderStatus* pStatus = &pReader->status; @@ -3043,6 +3041,7 @@ static int32_t doBuildDataBlock(STsdbReader* pReader) { SDataBlockInfo* pInfo = &pReader->pResBlock->info; pInfo->rows = pBlock->nRow; pInfo->id.uid = pScanInfo->uid; + pInfo->dataLoad = 0; pInfo->window = (STimeWindow){.skey = pBlock->minKey.ts, .ekey = pBlock->maxKey.ts}; setComposedBlockFlag(pReader, false); setBlockAllDumped(&pStatus->fBlockDumpInfo, pBlock->maxKey.ts, pReader->order); @@ -3173,7 +3172,6 @@ static int32_t buildBlockFromFiles(STsdbReader* pReader) { // this file does not have data files, let's start check the last block file if exists if (pBlockIter->numOfBlocks == 0) { - resetScanBlockLastBlockDelIndex(&pReader->status, pReader->order); goto _begin; } } @@ -3210,7 +3208,6 @@ static int32_t buildBlockFromFiles(STsdbReader* pReader) { tBlockDataReset(pBlockData); resetDataBlockIterator(pBlockIter, pReader->order); - resetScanBlockLastBlockDelIndex(&pReader->status, pReader->order); goto _begin; } else { code = initForFirstBlockInFile(pReader, pBlockIter); @@ -3222,7 +3219,6 @@ static int32_t buildBlockFromFiles(STsdbReader* pReader) { // this file does not have blocks, let's start check the last block file if (pBlockIter->numOfBlocks == 0) { - resetScanBlockLastBlockDelIndex(&pReader->status, pReader->order); goto _begin; } } diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index cc88f77232..71458acce2 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -426,7 +426,13 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { SVnode *pVnode = pWriter->pVnode; ASSERT(pHdr->size + sizeof(SSnapDataHdr) == nData); - ASSERT(pHdr->index == pWriter->index + 1); + + if (pHdr->index != pWriter->index + 1) { + vError("vgId:%d, unexpected vnode snapshot msg. index:%" PRId64 ", expected index:%" PRId64, TD_VID(pVnode), + pHdr->index, pWriter->index + 1); + return -1; + } + pWriter->index = pHdr->index; vDebug("vgId:%d, vnode snapshot write data, index:%" PRId64 " type:%d blockLen:%d", TD_VID(pVnode), pHdr->index, diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index d939f7ea77..549ce6ae79 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -479,6 +479,8 @@ typedef struct SStreamScanInfo { SSDataBlock* pRecoverRes; SSDataBlock* pCreateTbRes; + int8_t igCheckUpdate; + int8_t igExpired; } SStreamScanInfo; typedef struct { @@ -869,8 +871,8 @@ int32_t releaseOutputBuf(SStreamState* pState, SWinKey* pKey, SResultRow* pResul int32_t saveOutputBuf(SStreamState* pState, SWinKey* pKey, SResultRow* pResult, int32_t resSize); void getNextIntervalWindow(SInterval* pInterval, STimeWindow* tw, int32_t order); int32_t qAppendTaskStopInfo(SExecTaskInfo* pTaskInfo, SExchangeOpStopInfo* pInfo); -int32_t getForwardStepsInBlock(int32_t numOfRows, __block_search_fn_t searchFn, TSKEY ekey, int32_t pos, - int32_t order, int64_t* pData); +int32_t getForwardStepsInBlock(int32_t numOfRows, __block_search_fn_t searchFn, TSKEY ekey, int32_t pos, int32_t order, + int64_t* pData); void appendCreateTableRow(SStreamState* pState, SExprSupp* pTableSup, SExprSupp* pTagSup, int64_t groupId, SSDataBlock* pSrcBlock, int32_t rowId, SSDataBlock* pDestBlock); @@ -878,8 +880,8 @@ SSDataBlock* buildCreateTableBlock(SExprSupp* tbName, SExprSupp* tag); SExprInfo* createExpr(SNodeList* pNodeList, int32_t* numOfExprs); void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultRow* pRow, SqlFunctionCtx* pCtx, - SSDataBlock* pBlock, const int32_t* rowEntryOffset, SExecTaskInfo* pTaskInfo); -void doUpdateNumOfRows(SqlFunctionCtx* pCtx, SResultRow* pRow, int32_t numOfExprs, const int32_t* rowEntryOffset) ; + SSDataBlock* pBlock, const int32_t* rowEntryOffset, SExecTaskInfo* pTaskInfo); +void doUpdateNumOfRows(SqlFunctionCtx* pCtx, SResultRow* pRow, int32_t numOfExprs, const int32_t* rowEntryOffset); #ifdef __cplusplus } diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index a6f9a13407..1add82bdc4 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1830,28 +1830,30 @@ int32_t tableListAddTableInfo(STableListInfo* pTableList, uint64_t uid, uint64_t int32_t tableListGetGroupList(const STableListInfo* pTableList, int32_t ordinalGroupIndex, STableKeyInfo** pKeyInfo, int32_t* size) { - int32_t total = tableListGetOutputGroups(pTableList); - if (ordinalGroupIndex < 0 || ordinalGroupIndex >= total) { + int32_t totalGroups = tableListGetOutputGroups(pTableList); + int32_t numOfTables = tableListGetSize(pTableList); + + if (ordinalGroupIndex < 0 || ordinalGroupIndex >= totalGroups) { return TSDB_CODE_INVALID_PARA; } // here handle two special cases: // 1. only one group exists, and 2. one table exists for each group. - if (total == 1) { - *size = tableListGetSize(pTableList); + if (totalGroups == 1) { + *size = numOfTables; *pKeyInfo = (*size == 0) ? NULL : taosArrayGet(pTableList->pTableList, 0); return TSDB_CODE_SUCCESS; - } else if (total == tableListGetSize(pTableList)) { + } else if (totalGroups == numOfTables) { *size = 1; *pKeyInfo = taosArrayGet(pTableList->pTableList, ordinalGroupIndex); return TSDB_CODE_SUCCESS; } int32_t offset = pTableList->groupOffset[ordinalGroupIndex]; - if (ordinalGroupIndex < total - 1) { - *size = pTableList->groupOffset[offset + 1] - pTableList->groupOffset[offset]; + if (ordinalGroupIndex < totalGroups - 1) { + *size = pTableList->groupOffset[ordinalGroupIndex + 1] - offset; } else { - *size = total - pTableList->groupOffset[offset] - 1; + *size = numOfTables - offset; } *pKeyInfo = taosArrayGet(pTableList->pTableList, offset); diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index 1d7a996541..45f38a43e6 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -1153,7 +1153,7 @@ void initParDownStream(SOperatorInfo* downstream, SPartitionBySupporter* pParSup SStreamScanInfo* pScanInfo = downstream->info; pScanInfo->partitionSup = *pParSup; pScanInfo->pPartScalarSup = pExpr; - if (!pScanInfo->pUpdateInfo) { + if (!pScanInfo->igCheckUpdate && !pScanInfo->pUpdateInfo) { pScanInfo->pUpdateInfo = updateInfoInit(60000, TSDB_TIME_PRECISION_MILLI, 0); } } diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index e80fff005b..7d05b9c66d 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1433,7 +1433,12 @@ static void checkUpdateData(SStreamScanInfo* pInfo, bool invertible, SSDataBlock dumyInfo.cur.pageId = -1; bool isClosed = false; STimeWindow win = {.skey = INT64_MIN, .ekey = INT64_MAX}; - if (tableInserted && isOverdue(tsCol[rowId], &pInfo->twAggSup)) { + bool overDue = isOverdue(tsCol[rowId], &pInfo->twAggSup); + if (pInfo->igExpired && overDue) { + continue; + } + + if (tableInserted && overDue) { win = getActiveTimeWindow(NULL, &dumyInfo, tsCol[rowId], &pInfo->interval, TSDB_ORDER_ASC); isClosed = isCloseWindow(&win, &pInfo->twAggSup); } @@ -2367,6 +2372,9 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pInfo->pUpdateDataRes = createSpecialDataBlock(STREAM_CLEAR); pInfo->assignBlockUid = pTableScanNode->assignBlockUid; pInfo->partitionSup.needCalc = false; + pInfo->igCheckUpdate = pTableScanNode->igCheckUpdate; + pInfo->igExpired = pTableScanNode->igExpired; + pInfo->twAggSup.maxTs = INT64_MIN; setOperatorInfo(pOperator, "StreamScanOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo); diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index 2b78f265fb..7b226a0391 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -65,8 +65,8 @@ typedef struct SSysTableScanInfo { SSDataBlock* pRes; int64_t numOfBlocks; // extract basic running information. SLoadRemoteDataInfo loadInfo; - - int32_t tbnameSlotId; + SLimitInfo limitInfo; + int32_t tbnameSlotId; } SSysTableScanInfo; typedef struct { @@ -355,9 +355,11 @@ static int32_t optSysMergeRslt(SArray* mRslt, SArray* rslt); static SSDataBlock* sysTableScanFromMNode(SOperatorInfo* pOperator, SSysTableScanInfo* pInfo, const char* name, SExecTaskInfo* pTaskInfo); void extractTbnameSlotId(SSysTableScanInfo* pInfo, const SScanPhysiNode* pScanNode); -static SSDataBlock* sysTableScanFillTbName(SOperatorInfo* pOperator, const SSysTableScanInfo* pInfo, const char* name, - SSDataBlock* pBlock); -__optSysFilter optSysGetFilterFunc(int32_t ctype, bool* reverse) { + +static void sysTableScanFillTbName(SOperatorInfo* pOperator, const SSysTableScanInfo* pInfo, const char* name, + SSDataBlock* pBlock); + +__optSysFilter optSysGetFilterFunc(int32_t ctype, bool* reverse) { if (ctype == OP_TYPE_LOWER_EQUAL || ctype == OP_TYPE_LOWER_THAN) { *reverse = true; } @@ -731,7 +733,7 @@ void relocateAndFilterSysTagsScanResult(SSysTableScanInfo* pInfo, int32_t numOfR pInfo->pRes->info.rows = numOfRows; relocateColumnData(pInfo->pRes, pInfo->matchInfo.pList, dataBlock->pDataBlock, false); - doFilterResult(pInfo->pRes, pFilterInfo); + doFilter(pInfo->pRes, pFilterInfo, NULL); blockDataCleanup(dataBlock); } @@ -1210,7 +1212,7 @@ static SSDataBlock* sysTableBuildUserTablesByUids(SOperatorInfo* pOperator) { pInfo->pRes->info.rows = numOfRows; relocateColumnData(pInfo->pRes, pInfo->matchInfo.pList, p->pDataBlock, false); - doFilterResult(pInfo->pRes, pOperator->exprSupp.pFilterInfo); + doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); blockDataCleanup(p); numOfRows = 0; @@ -1226,7 +1228,7 @@ static SSDataBlock* sysTableBuildUserTablesByUids(SOperatorInfo* pOperator) { pInfo->pRes->info.rows = numOfRows; relocateColumnData(pInfo->pRes, pInfo->matchInfo.pList, p->pDataBlock, false); - doFilterResult(pInfo->pRes, pOperator->exprSupp.pFilterInfo); + doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); blockDataCleanup(p); numOfRows = 0; @@ -1387,7 +1389,7 @@ static SSDataBlock* sysTableBuildUserTables(SOperatorInfo* pOperator) { pInfo->pRes->info.rows = numOfRows; relocateColumnData(pInfo->pRes, pInfo->matchInfo.pList, p->pDataBlock, false); - doFilterResult(pInfo->pRes, pOperator->exprSupp.pFilterInfo); + doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); blockDataCleanup(p); numOfRows = 0; @@ -1403,7 +1405,7 @@ static SSDataBlock* sysTableBuildUserTables(SOperatorInfo* pOperator) { pInfo->pRes->info.rows = numOfRows; relocateColumnData(pInfo->pRes, pInfo->matchInfo.pList, p->pDataBlock, false); - doFilterResult(pInfo->pRes, pOperator->exprSupp.pFilterInfo); + doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); blockDataCleanup(p); numOfRows = 0; @@ -1434,7 +1436,7 @@ static SSDataBlock* sysTableScanUserTables(SOperatorInfo* pOperator) { // the retrieve is executed on the mnode, so return tables that belongs to the information schema database. if (pInfo->readHandle.mnd != NULL) { buildSysDbTableInfo(pInfo, pOperator->resultInfo.capacity); - doFilterResult(pInfo->pRes, pOperator->exprSupp.pFilterInfo); + doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); pInfo->loadInfo.totalRows += pInfo->pRes->info.rows; setOperatorCompleted(pOperator); @@ -1578,30 +1580,37 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator) { pBlock = sysTableScanFromMNode(pOperator, pInfo, name, pTaskInfo); } - return sysTableScanFillTbName(pOperator, pInfo, name, pBlock); -} - -static SSDataBlock* sysTableScanFillTbName(SOperatorInfo* pOperator, const SSysTableScanInfo* pInfo, const char* name, - SSDataBlock* pBlock) { + sysTableScanFillTbName(pOperator, pInfo, name, pBlock); if (pBlock != NULL) { - if (pInfo->tbnameSlotId != -1) { - SColumnInfoData* pColumnInfoData = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, pInfo->tbnameSlotId); - char varTbName[TSDB_TABLE_FNAME_LEN - 1 + VARSTR_HEADER_SIZE] = {0}; - memcpy(varDataVal(varTbName), name, strlen(name)); - varDataSetLen(varTbName, strlen(name)); - for (int i = 0; i < pBlock->info.rows; ++i) { - colDataAppend(pColumnInfoData, i, varTbName, NULL); - } - doFilterResult(pBlock, pOperator->exprSupp.pFilterInfo); + bool limitReached = applyLimitOffset(&pInfo->limitInfo, pBlock, pTaskInfo); + if (limitReached) { + setOperatorCompleted(pOperator); } - } - if (pBlock && pBlock->info.rows != 0) { - return pBlock; + + return pBlock->info.rows > 0 ? pBlock : NULL; } else { return NULL; } } +static void sysTableScanFillTbName(SOperatorInfo* pOperator, const SSysTableScanInfo* pInfo, const char* name, + SSDataBlock* pBlock) { + if (pBlock == NULL) { + return; + } + + if (pInfo->tbnameSlotId != -1) { + SColumnInfoData* pColumnInfoData = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, pInfo->tbnameSlotId); + char varTbName[TSDB_TABLE_FNAME_LEN - 1 + VARSTR_HEADER_SIZE] = {0}; + memcpy(varDataVal(varTbName), name, strlen(name)); + varDataSetLen(varTbName, strlen(name)); + + colDataAppendNItems(pColumnInfoData, 0, varTbName, pBlock->info.rows); + } + + doFilter(pBlock, pOperator->exprSupp.pFilterInfo, NULL); +} + static SSDataBlock* sysTableScanFromMNode(SOperatorInfo* pOperator, SSysTableScanInfo* pInfo, const char* name, SExecTaskInfo* pTaskInfo) { if (pOperator->status == OP_EXEC_DONE) { @@ -1665,7 +1674,7 @@ static SSDataBlock* sysTableScanFromMNode(SOperatorInfo* pOperator, SSysTableSca updateLoadRemoteInfo(&pInfo->loadInfo, pRsp->numOfRows, pRsp->compLen, startTs, pOperator); // todo log the filter info - doFilterResult(pInfo->pRes, pOperator->exprSupp.pFilterInfo); + doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); taosMemoryFree(pRsp); if (pInfo->pRes->info.rows > 0) { return pInfo->pRes; @@ -1700,13 +1709,13 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScan pInfo->sysInfo = pScanPhyNode->sysInfo; pInfo->showRewrite = pScanPhyNode->showRewrite; pInfo->pRes = createDataBlockFromDescNode(pDescNode); - pInfo->pCondition = pScanNode->node.pConditions; code = filterInitFromNode(pScanNode->node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); if (code != TSDB_CODE_SUCCESS) { goto _error; } + initLimitInfo(pScanPhyNode->scan.node.pLimit, pScanPhyNode->scan.node.pSlimit, &pInfo->limitInfo); initResultSizeInfo(&pOperator->resultInfo, 4096); blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); @@ -1801,15 +1810,6 @@ int32_t loadSysTableCallback(void* param, SDataBuf* pMsg, int32_t code) { return TSDB_CODE_SUCCESS; } -SSDataBlock* doFilterResult(SSDataBlock* pDataBlock, SFilterInfo* pFilterInfo) { - if (pFilterInfo == NULL) { - return pDataBlock->info.rows == 0 ? NULL : pDataBlock; - } - - doFilter(pDataBlock, pFilterInfo, NULL); - return pDataBlock->info.rows == 0 ? NULL : pDataBlock; -} - static int32_t sysChkFilter__Comm(SNode* pNode) { // impl SOperatorNode* pOper = (SOperatorNode*)pNode; diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 38108dcff6..1b9767f193 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -1692,7 +1692,7 @@ void initIntervalDownStream(SOperatorInfo* downstream, uint16_t type, SAggSuppor SStreamScanInfo* pScanInfo = downstream->info; pScanInfo->windowSup.parentType = type; pScanInfo->windowSup.pIntervalAggSup = pSup; - if (!pScanInfo->pUpdateInfo) { + if (!pScanInfo->igCheckUpdate && !pScanInfo->pUpdateInfo) { pScanInfo->pUpdateInfo = updateInfoInitP(pInterval, pTwSup->waterMark); } pScanInfo->interval = *pInterval; @@ -2869,7 +2869,7 @@ void initDownStream(SOperatorInfo* downstream, SStreamAggSupporter* pAggSup, uin } SStreamScanInfo* pScanInfo = downstream->info; pScanInfo->windowSup = (SWindowSupporter){.pStreamAggSup = pAggSup, .gap = pAggSup->gap, .parentType = type}; - if (!pScanInfo->pUpdateInfo) { + if (!pScanInfo->igCheckUpdate && !pScanInfo->pUpdateInfo) { pScanInfo->pUpdateInfo = updateInfoInit(60000, TSDB_TIME_PRECISION_MILLI, pTwSup->waterMark); } pScanInfo->twAggSup = *pTwSup; diff --git a/source/libs/nodes/src/nodesCloneFuncs.c b/source/libs/nodes/src/nodesCloneFuncs.c index 12041bd2ae..185f4428f2 100644 --- a/source/libs/nodes/src/nodesCloneFuncs.c +++ b/source/libs/nodes/src/nodesCloneFuncs.c @@ -387,6 +387,7 @@ static int32_t logicScanCopy(const SScanLogicNode* pSrc, SScanLogicNode* pDst) { COPY_SCALAR_FIELD(watermark); COPY_SCALAR_FIELD(deleteMark); COPY_SCALAR_FIELD(igExpired); + COPY_SCALAR_FIELD(igCheckUpdate); CLONE_NODE_LIST_FIELD(pGroupTags); COPY_SCALAR_FIELD(groupSort); CLONE_NODE_LIST_FIELD(pTags); @@ -476,6 +477,7 @@ static int32_t logicWindowCopy(const SWindowLogicNode* pSrc, SWindowLogicNode* p COPY_SCALAR_FIELD(watermark); COPY_SCALAR_FIELD(deleteMark); COPY_SCALAR_FIELD(igExpired); + COPY_SCALAR_FIELD(igCheckUpdate); COPY_SCALAR_FIELD(windowAlgo); COPY_SCALAR_FIELD(inputTsOrder); COPY_SCALAR_FIELD(outputTsOrder); diff --git a/source/libs/nodes/src/nodesCodeFuncs.c b/source/libs/nodes/src/nodesCodeFuncs.c index 4f197ea464..099cd0d3b3 100644 --- a/source/libs/nodes/src/nodesCodeFuncs.c +++ b/source/libs/nodes/src/nodesCodeFuncs.c @@ -1644,6 +1644,7 @@ static const char* jkTableScanPhysiPlanGroupSort = "GroupSort"; static const char* jkTableScanPhysiPlanTags = "Tags"; static const char* jkTableScanPhysiPlanSubtable = "Subtable"; static const char* jkTableScanPhysiPlanAssignBlockUid = "AssignBlockUid"; +static const char* jkTableScanPhysiPlanIgnoreUpdate = "IgnoreUpdate"; static int32_t physiTableScanNodeToJson(const void* pObj, SJson* pJson) { const STableScanPhysiNode* pNode = (const STableScanPhysiNode*)pObj; @@ -1709,6 +1710,9 @@ static int32_t physiTableScanNodeToJson(const void* pObj, SJson* pJson) { if (TSDB_CODE_SUCCESS == code) { code = tjsonAddBoolToObject(pJson, jkTableScanPhysiPlanAssignBlockUid, pNode->assignBlockUid); } + if (TSDB_CODE_SUCCESS == code) { + code = tjsonAddIntegerToObject(pJson, jkTableScanPhysiPlanIgnoreUpdate, pNode->igCheckUpdate); + } return code; } @@ -1777,6 +1781,9 @@ static int32_t jsonToPhysiTableScanNode(const SJson* pJson, void* pObj) { if (TSDB_CODE_SUCCESS == code) { code = tjsonGetBoolValue(pJson, jkTableScanPhysiPlanAssignBlockUid, &pNode->assignBlockUid); } + if (TSDB_CODE_SUCCESS == code) { + code = tjsonGetTinyIntValue(pJson, jkTableScanPhysiPlanIgnoreUpdate, &pNode->igCheckUpdate); + } return code; } diff --git a/source/libs/nodes/src/nodesMsgFuncs.c b/source/libs/nodes/src/nodesMsgFuncs.c index d671dea1ed..e94b2bba6c 100644 --- a/source/libs/nodes/src/nodesMsgFuncs.c +++ b/source/libs/nodes/src/nodesMsgFuncs.c @@ -2078,6 +2078,9 @@ static int32_t physiTableScanNodeInlineToMsg(const void* pObj, STlvEncoder* pEnc if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeValueBool(pEncoder, pNode->assignBlockUid); } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI8(pEncoder, pNode->igCheckUpdate); + } return code; } @@ -2154,6 +2157,9 @@ static int32_t msgToPhysiTableScanNodeInline(STlvDecoder* pDecoder, void* pObj) if (TSDB_CODE_SUCCESS == code) { code = tlvDecodeValueBool(pDecoder, &pNode->assignBlockUid); } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI8(pDecoder, &pNode->igCheckUpdate); + } return code; } diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index c87911c9bc..19992498a0 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -568,6 +568,7 @@ stream_options(A) ::= stream_options(B) TRIGGER MAX_DELAY duration_literal(C). stream_options(A) ::= stream_options(B) WATERMARK duration_literal(C). { ((SStreamOptions*)B)->pWatermark = releaseRawExprNode(pCxt, C); A = B; } stream_options(A) ::= stream_options(B) IGNORE EXPIRED NK_INTEGER(C). { ((SStreamOptions*)B)->ignoreExpired = taosStr2Int8(C.z, NULL, 10); A = B; } stream_options(A) ::= stream_options(B) FILL_HISTORY NK_INTEGER(C). { ((SStreamOptions*)B)->fillHistory = taosStr2Int8(C.z, NULL, 10); A = B; } +stream_options(A) ::= stream_options(B) IGNORE UPDATE NK_INTEGER(C). { ((SStreamOptions*)B)->ignoreUpdate = taosStr2Int8(C.z, NULL, 10); A = B; } subtable_opt(A) ::= . { A = NULL; } subtable_opt(A) ::= SUBTABLE NK_LP expression(B) NK_RP. { A = releaseRawExprNode(pCxt, B); } @@ -1106,4 +1107,4 @@ null_ordering_opt(A) ::= NULLS LAST. %fallback ABORT AFTER ATTACH BEFORE BEGIN BITAND BITNOT BITOR BLOCKS CHANGE COMMA CONCAT CONFLICT COPY DEFERRED DELIMITERS DETACH DIVIDE DOT EACH END FAIL FILE FOR GLOB ID IMMEDIATE IMPORT INITIALLY INSTEAD ISNULL KEY MODULES NK_BITNOT NK_SEMI NOTNULL OF PLUS PRIVILEGE RAISE REPLACE RESTRICT ROW SEMI STAR STATEMENT - STRICT STRING TIMES UPDATE VALUES VARIABLE VIEW WAL. + STRICT STRING TIMES VALUES VARIABLE VIEW WAL. diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index b3adcc817b..15a796e086 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1813,6 +1813,7 @@ SNode* createStreamOptions(SAstCreateContext* pCxt) { pOptions->triggerType = STREAM_TRIGGER_AT_ONCE; pOptions->fillHistory = STREAM_DEFAULT_FILL_HISTORY; pOptions->ignoreExpired = STREAM_DEFAULT_IGNORE_EXPIRED; + pOptions->ignoreUpdate = STREAM_DEFAULT_IGNORE_UPDATE; return (SNode*)pOptions; } diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c index 3e16b5c80f..678dcf34d3 100644 --- a/source/libs/parser/src/parTokenizer.c +++ b/source/libs/parser/src/parTokenizer.c @@ -236,6 +236,7 @@ static SKeyword keywordTable[] = { {"TTL", TK_TTL}, {"UNION", TK_UNION}, {"UNSIGNED", TK_UNSIGNED}, + {"UPDATE", TK_UPDATE}, {"USE", TK_USE}, {"USER", TK_USER}, {"USERS", TK_USERS}, diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 58857881d8..1347193d99 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -1576,7 +1576,8 @@ static int32_t translateBlockDistFunc(STranslateContext* pCtx, SFunctionNode* pF TSDB_CHILD_TABLE != ((SRealTableNode*)pTable)->pMeta->tableType && TSDB_NORMAL_TABLE != ((SRealTableNode*)pTable)->pMeta->tableType))) { return generateSyntaxErrMsgExt(&pCtx->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC, - "%s is only supported on super table, child table or normal table", pFunc->functionName); + "%s is only supported on super table, child table or normal table", + pFunc->functionName); } return TSDB_CODE_SUCCESS; } @@ -1604,6 +1605,7 @@ static int32_t translateMultiResFunc(STranslateContext* pCxt, SFunctionNode* pFu } if (tsKeepColumnName && 1 == LIST_LENGTH(pFunc->pParameterList) && !pFunc->node.asAlias) { strcpy(pFunc->node.userAlias, ((SExprNode*)nodesListGetNode(pFunc->pParameterList, 0))->userAlias); + strcpy(pFunc->node.aliasName, pFunc->node.userAlias); } return TSDB_CODE_SUCCESS; } @@ -2550,11 +2552,12 @@ static SNode* createMultiResFunc(SFunctionNode* pSrcFunc, SExprNode* pExpr) { int32_t len = 0; if (QUERY_NODE_COLUMN == nodeType(pExpr)) { SColumnNode* pCol = (SColumnNode*)pExpr; - len = snprintf(buf, sizeof(buf), "%s(%s.%s)", pSrcFunc->functionName, pCol->tableAlias, pCol->colName); - strncpy(pFunc->node.aliasName, buf, TMIN(len, sizeof(pFunc->node.aliasName) - 1)); if (tsKeepColumnName) { strcpy(pFunc->node.userAlias, pCol->colName); + strcpy(pFunc->node.aliasName, pCol->colName); } else { + len = snprintf(buf, sizeof(buf), "%s(%s.%s)", pSrcFunc->functionName, pCol->tableAlias, pCol->colName); + strncpy(pFunc->node.aliasName, buf, TMIN(len, sizeof(pFunc->node.aliasName) - 1)); len = snprintf(buf, sizeof(buf), "%s(%s)", pSrcFunc->functionName, pCol->colName); strncpy(pFunc->node.userAlias, buf, TMIN(len, sizeof(pFunc->node.userAlias) - 1)); } @@ -6183,6 +6186,7 @@ static int32_t buildCreateStreamReq(STranslateContext* pCxt, SCreateStreamStmt* columnDefNodeToField(pStmt->pTags, &pReq->pTags); pReq->numOfTags = LIST_LENGTH(pStmt->pTags); } + pReq->igUpdate = pStmt->pOptions->ignoreUpdate; } return code; diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index 1faf34a528..836d1c5de9 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -139,17 +139,17 @@ typedef union { #define ParseCTX_FETCH #define ParseCTX_STORE #define YYFALLBACK 1 -#define YYNSTATE 740 -#define YYNRULE 561 +#define YYNSTATE 741 +#define YYNRULE 562 #define YYNTOKEN 328 -#define YY_MAX_SHIFT 739 -#define YY_MIN_SHIFTREDUCE 1097 -#define YY_MAX_SHIFTREDUCE 1657 -#define YY_ERROR_ACTION 1658 -#define YY_ACCEPT_ACTION 1659 -#define YY_NO_ACTION 1660 -#define YY_MIN_REDUCE 1661 -#define YY_MAX_REDUCE 2221 +#define YY_MAX_SHIFT 740 +#define YY_MIN_SHIFTREDUCE 1099 +#define YY_MAX_SHIFTREDUCE 1660 +#define YY_ERROR_ACTION 1661 +#define YY_ACCEPT_ACTION 1662 +#define YY_NO_ACTION 1663 +#define YY_MIN_REDUCE 1664 +#define YY_MAX_REDUCE 2225 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -216,769 +216,753 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2835) +#define YY_ACTTAB_COUNT (2749) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 166, 380, 1673, 604, 479, 629, 480, 1697, 142, 161, - /* 10 */ 65, 2092, 45, 43, 1585, 1804, 356, 31, 1817, 132, - /* 20 */ 377, 1806, 1434, 38, 37, 1866, 518, 44, 42, 41, - /* 30 */ 40, 39, 2015, 1515, 140, 1432, 1815, 2033, 1149, 1589, - /* 40 */ 1148, 2019, 38, 37, 610, 1459, 44, 42, 41, 40, - /* 50 */ 39, 629, 2015, 220, 2136, 38, 37, 176, 1510, 44, - /* 60 */ 42, 41, 40, 39, 18, 187, 2011, 2017, 2051, 1150, - /* 70 */ 382, 1440, 1659, 1861, 1863, 604, 643, 639, 346, 1917, - /* 80 */ 2133, 2001, 1815, 645, 45, 43, 2011, 2017, 358, 567, - /* 90 */ 1459, 269, 377, 2192, 1434, 1934, 14, 639, 339, 181, - /* 100 */ 2129, 2130, 61, 138, 2134, 1515, 140, 1432, 2198, 182, - /* 110 */ 1932, 616, 2032, 2193, 593, 1459, 2068, 1460, 736, 323, - /* 120 */ 2034, 649, 2036, 2037, 644, 642, 639, 630, 2086, 61, - /* 130 */ 1510, 92, 628, 1517, 1518, 628, 18, 478, 390, 1544, - /* 140 */ 483, 1703, 389, 1440, 1624, 1257, 671, 670, 669, 1261, - /* 150 */ 668, 1263, 1264, 667, 1266, 664, 1459, 1272, 661, 1274, - /* 160 */ 1275, 658, 655, 1490, 1500, 1934, 604, 61, 14, 1516, - /* 170 */ 1519, 266, 2129, 603, 614, 133, 602, 368, 86, 2192, - /* 180 */ 1931, 616, 176, 567, 1435, 2051, 1433, 2192, 1491, 488, - /* 190 */ 736, 480, 1697, 586, 591, 182, 1545, 140, 497, 2193, - /* 200 */ 593, 1811, 2198, 182, 1918, 1517, 1518, 2193, 593, 1438, - /* 210 */ 1439, 48, 1489, 1492, 1493, 1494, 1495, 1496, 1497, 1498, - /* 220 */ 1499, 641, 637, 1508, 1509, 1511, 1512, 1513, 1514, 2, - /* 230 */ 1300, 1301, 61, 1491, 604, 1490, 1500, 1459, 585, 1546, - /* 240 */ 122, 1516, 1519, 121, 120, 119, 118, 117, 116, 115, - /* 250 */ 114, 113, 1149, 185, 1148, 350, 1435, 100, 1433, 35, - /* 260 */ 287, 606, 180, 2129, 2130, 140, 138, 2134, 34, 375, - /* 270 */ 1539, 1540, 1541, 1542, 1543, 1547, 1548, 1549, 1550, 1808, - /* 280 */ 185, 1438, 1439, 1150, 1489, 1492, 1493, 1494, 1495, 1496, - /* 290 */ 1497, 1498, 1499, 641, 637, 1508, 1509, 1511, 1512, 1513, - /* 300 */ 1514, 2, 615, 11, 45, 43, 44, 42, 41, 40, - /* 310 */ 39, 32, 377, 1971, 1434, 1662, 587, 351, 185, 349, - /* 320 */ 348, 1551, 520, 167, 629, 1515, 522, 1432, 1769, 2033, - /* 330 */ 183, 2129, 2130, 592, 138, 2134, 122, 2192, 54, 121, - /* 340 */ 120, 119, 118, 117, 116, 115, 114, 113, 521, 495, - /* 350 */ 1510, 1927, 591, 182, 2033, 1815, 18, 2193, 593, 237, - /* 360 */ 2051, 2020, 185, 1440, 278, 279, 1217, 2197, 646, 277, - /* 370 */ 2197, 2192, 2015, 2001, 2192, 645, 45, 43, 1520, 582, - /* 380 */ 1355, 1356, 1130, 185, 377, 2051, 1434, 2196, 14, 629, - /* 390 */ 2196, 2193, 2195, 646, 2193, 2194, 1613, 1515, 2001, 1432, - /* 400 */ 645, 152, 1219, 420, 2032, 106, 2011, 2017, 2068, 683, - /* 410 */ 736, 168, 2034, 649, 2036, 2037, 644, 639, 639, 141, - /* 420 */ 1815, 1132, 1510, 1135, 1136, 1517, 1518, 1807, 487, 2032, - /* 430 */ 1458, 483, 1703, 2068, 105, 1440, 169, 2034, 649, 2036, - /* 440 */ 2037, 644, 1661, 639, 102, 579, 578, 1611, 1612, 1614, - /* 450 */ 1615, 1616, 568, 2158, 53, 1490, 1500, 1730, 1460, 628, - /* 460 */ 46, 1516, 1519, 588, 583, 576, 131, 130, 129, 128, - /* 470 */ 127, 126, 125, 124, 123, 1525, 1435, 547, 1433, 38, - /* 480 */ 37, 1459, 736, 44, 42, 41, 40, 39, 594, 2213, - /* 490 */ 545, 1462, 543, 41, 40, 39, 675, 1517, 1518, 1859, - /* 500 */ 1994, 1438, 1439, 1792, 1489, 1492, 1493, 1494, 1495, 1496, - /* 510 */ 1497, 1498, 1499, 641, 637, 1508, 1509, 1511, 1512, 1513, - /* 520 */ 1514, 2, 2197, 533, 532, 531, 556, 1490, 1500, 164, - /* 530 */ 629, 137, 527, 1516, 1519, 48, 526, 485, 1818, 1461, - /* 540 */ 86, 525, 530, 481, 132, 567, 1868, 524, 1435, 2192, - /* 550 */ 1433, 523, 1868, 344, 136, 1684, 416, 11, 369, 355, - /* 560 */ 415, 1815, 1866, 1810, 2198, 182, 164, 1440, 1866, 2193, - /* 570 */ 593, 1372, 1373, 1438, 1439, 1817, 1489, 1492, 1493, 1494, - /* 580 */ 1495, 1496, 1497, 1498, 1499, 641, 637, 1508, 1509, 1511, - /* 590 */ 1512, 1513, 1514, 2, 45, 43, 460, 1434, 629, 2001, - /* 600 */ 679, 567, 377, 1859, 1434, 2192, 73, 1371, 1374, 422, - /* 610 */ 1432, 681, 421, 615, 629, 1515, 1647, 1432, 1461, 2033, - /* 620 */ 2198, 182, 61, 592, 1491, 2193, 593, 2192, 430, 1815, - /* 630 */ 154, 153, 678, 677, 676, 151, 246, 629, 629, 674, - /* 640 */ 1510, 1683, 591, 182, 2033, 1815, 1440, 2193, 593, 329, - /* 650 */ 2051, 445, 446, 1440, 198, 197, 81, 1868, 646, 409, - /* 660 */ 613, 49, 1927, 2001, 365, 645, 45, 43, 1815, 1815, - /* 670 */ 1868, 615, 1995, 1866, 377, 2051, 1434, 459, 46, 178, - /* 680 */ 411, 407, 629, 646, 268, 2001, 1867, 1515, 2001, 1432, - /* 690 */ 645, 695, 1855, 736, 2032, 538, 496, 11, 2068, 9, - /* 700 */ 736, 168, 2034, 649, 2036, 2037, 644, 1987, 639, 414, - /* 710 */ 548, 413, 1510, 1815, 235, 1517, 1518, 567, 624, 2032, - /* 720 */ 1927, 2192, 1800, 2068, 234, 1440, 317, 2034, 649, 2036, - /* 730 */ 2037, 644, 680, 639, 412, 1859, 2198, 182, 1682, 541, - /* 740 */ 629, 2193, 593, 2159, 535, 1490, 1500, 1802, 629, 233, - /* 750 */ 14, 1516, 1519, 194, 1812, 397, 533, 532, 531, 1435, - /* 760 */ 1868, 1433, 238, 268, 137, 527, 1435, 370, 1433, 526, - /* 770 */ 589, 1815, 736, 185, 525, 530, 1866, 89, 334, 1815, - /* 780 */ 524, 551, 2001, 549, 1438, 1439, 69, 1517, 1518, 68, - /* 790 */ 83, 1438, 1439, 82, 1489, 1492, 1493, 1494, 1495, 1496, - /* 800 */ 1497, 1498, 1499, 641, 637, 1508, 1509, 1511, 1512, 1513, - /* 810 */ 1514, 2, 185, 332, 1462, 1457, 2136, 1490, 1500, 1862, - /* 820 */ 1863, 1681, 453, 1516, 1519, 467, 38, 37, 466, 221, - /* 830 */ 44, 42, 41, 40, 39, 2136, 681, 1798, 1435, 1727, - /* 840 */ 1433, 1680, 2132, 436, 171, 468, 529, 528, 438, 673, - /* 850 */ 514, 510, 506, 502, 218, 154, 153, 678, 677, 676, - /* 860 */ 151, 2131, 27, 1438, 1439, 2001, 1489, 1492, 1493, 1494, - /* 870 */ 1495, 1496, 1497, 1498, 1499, 641, 637, 1508, 1509, 1511, - /* 880 */ 1512, 1513, 1514, 2, 1462, 2001, 33, 380, 707, 705, - /* 890 */ 347, 87, 38, 37, 216, 164, 44, 42, 41, 40, - /* 900 */ 39, 1793, 426, 52, 1817, 713, 712, 711, 710, 387, - /* 910 */ 566, 709, 708, 144, 703, 702, 701, 700, 699, 698, - /* 920 */ 697, 156, 693, 692, 691, 386, 385, 688, 687, 686, - /* 930 */ 685, 684, 464, 241, 2033, 458, 457, 456, 455, 452, - /* 940 */ 451, 450, 449, 448, 444, 443, 442, 441, 331, 433, - /* 950 */ 432, 431, 739, 428, 427, 345, 165, 301, 2019, 191, - /* 960 */ 1845, 307, 215, 209, 497, 2051, 294, 214, 1679, 2015, - /* 970 */ 493, 629, 631, 646, 2093, 305, 72, 554, 2001, 71, - /* 980 */ 645, 175, 1913, 1678, 383, 563, 207, 729, 725, 721, - /* 990 */ 717, 292, 164, 190, 629, 1898, 2196, 203, 475, 473, - /* 1000 */ 470, 1817, 1815, 2011, 2017, 359, 2033, 1677, 608, 2032, - /* 1010 */ 236, 8, 2001, 2068, 639, 1582, 110, 2034, 649, 2036, - /* 1020 */ 2037, 644, 567, 639, 629, 1815, 2192, 2001, 107, 245, - /* 1030 */ 2121, 285, 1868, 1791, 61, 2118, 596, 2051, 612, 381, - /* 1040 */ 629, 2198, 182, 629, 629, 607, 2193, 593, 1866, 629, - /* 1050 */ 2001, 2001, 645, 1676, 282, 1815, 629, 626, 627, 13, - /* 1060 */ 12, 38, 37, 288, 625, 44, 42, 41, 40, 39, - /* 1070 */ 384, 1815, 522, 108, 1815, 1815, 1410, 1411, 2033, 640, - /* 1080 */ 1815, 2032, 633, 1675, 2093, 2068, 599, 1815, 109, 2034, - /* 1090 */ 649, 2036, 2037, 644, 521, 639, 683, 2001, 562, 272, - /* 1100 */ 179, 1913, 2121, 1674, 271, 1672, 371, 2117, 1671, 2051, - /* 1110 */ 1670, 696, 192, 1785, 80, 79, 419, 646, 152, 189, - /* 1120 */ 184, 1399, 2001, 240, 645, 38, 37, 2001, 2147, 44, - /* 1130 */ 42, 41, 40, 39, 1135, 1136, 1669, 330, 2033, 1668, - /* 1140 */ 405, 244, 403, 399, 395, 392, 412, 440, 226, 2001, - /* 1150 */ 1601, 224, 2001, 2032, 2001, 1558, 439, 2068, 1667, 1666, - /* 1160 */ 109, 2034, 649, 2036, 2037, 644, 1665, 639, 1664, 2051, - /* 1170 */ 143, 1405, 149, 2092, 2121, 2141, 1578, 607, 371, 2117, - /* 1180 */ 2001, 90, 2001, 2001, 645, 185, 1913, 38, 37, 1790, - /* 1190 */ 152, 44, 42, 41, 40, 39, 423, 196, 2033, 51, - /* 1200 */ 636, 3, 2001, 2001, 146, 228, 134, 1770, 227, 424, - /* 1210 */ 2001, 230, 2001, 2032, 229, 63, 63, 2068, 1578, 2019, - /* 1220 */ 109, 2034, 649, 2036, 2037, 644, 250, 639, 232, 2051, - /* 1230 */ 2015, 231, 179, 1443, 2121, 1717, 1710, 646, 371, 2117, - /* 1240 */ 1656, 1657, 2001, 1408, 645, 1708, 2022, 2033, 38, 37, - /* 1250 */ 152, 47, 44, 42, 41, 40, 39, 534, 536, 1581, - /* 1260 */ 2148, 595, 597, 2161, 2011, 2017, 372, 539, 1610, 1609, - /* 1270 */ 275, 70, 150, 2032, 152, 639, 1442, 2068, 2051, 252, - /* 1280 */ 109, 2034, 649, 2036, 2037, 644, 646, 639, 13, 12, - /* 1290 */ 1704, 2001, 2212, 645, 2121, 2024, 63, 681, 371, 2117, - /* 1300 */ 263, 47, 47, 611, 1369, 580, 653, 2033, 219, 2155, - /* 1310 */ 150, 152, 135, 689, 600, 150, 154, 153, 678, 677, - /* 1320 */ 676, 151, 2032, 280, 621, 284, 2068, 1250, 690, 109, - /* 1330 */ 2034, 649, 2036, 2037, 644, 1198, 639, 1179, 2051, 731, - /* 1340 */ 257, 2212, 2052, 2121, 163, 1536, 646, 371, 2117, 1552, - /* 1350 */ 1196, 2001, 1698, 645, 1501, 300, 388, 1856, 2168, 1278, - /* 1360 */ 1922, 605, 2151, 1282, 1289, 1287, 2033, 265, 155, 262, - /* 1370 */ 1, 4, 396, 1180, 391, 343, 1392, 295, 195, 425, - /* 1380 */ 1462, 1923, 2032, 429, 1446, 462, 2068, 434, 1457, 109, - /* 1390 */ 2034, 649, 2036, 2037, 644, 447, 639, 2051, 1915, 454, - /* 1400 */ 461, 2212, 463, 2121, 469, 646, 471, 371, 2117, 472, - /* 1410 */ 2001, 200, 645, 477, 474, 476, 1654, 1463, 574, 486, - /* 1420 */ 1465, 1460, 489, 206, 490, 2033, 208, 1445, 1464, 1466, - /* 1430 */ 491, 492, 211, 494, 1152, 498, 213, 84, 1977, 517, - /* 1440 */ 85, 2032, 217, 515, 516, 2068, 519, 1805, 109, 2034, - /* 1450 */ 649, 2036, 2037, 644, 112, 639, 2051, 333, 553, 555, - /* 1460 */ 2212, 223, 2121, 1976, 646, 1801, 371, 2117, 88, 2001, - /* 1470 */ 225, 645, 157, 148, 158, 1803, 1799, 2186, 159, 558, - /* 1480 */ 160, 239, 374, 373, 242, 2033, 557, 564, 581, 2152, - /* 1490 */ 2167, 2143, 1448, 619, 2162, 571, 561, 7, 577, 296, - /* 1500 */ 2032, 2166, 360, 1515, 2068, 1441, 584, 109, 2034, 649, - /* 1510 */ 2036, 2037, 644, 1653, 639, 248, 2051, 2033, 590, 2212, - /* 1520 */ 251, 2121, 256, 572, 646, 371, 2117, 570, 1510, 2001, - /* 1530 */ 258, 645, 569, 361, 2215, 601, 2140, 1578, 598, 2191, - /* 1540 */ 261, 1440, 1461, 139, 609, 2033, 2137, 270, 2051, 172, - /* 1550 */ 364, 95, 1467, 1928, 297, 617, 646, 298, 618, 1942, - /* 1560 */ 2032, 2001, 1941, 645, 2068, 1940, 367, 109, 2034, 649, - /* 1570 */ 2036, 2037, 644, 259, 639, 260, 2051, 622, 299, 2096, - /* 1580 */ 623, 2121, 264, 1816, 646, 371, 2117, 97, 635, 2001, - /* 1590 */ 99, 645, 2032, 60, 101, 651, 2068, 1860, 2102, 109, - /* 1600 */ 2034, 649, 2036, 2037, 644, 1786, 639, 732, 291, 302, - /* 1610 */ 733, 2094, 735, 2121, 50, 335, 336, 371, 2117, 311, - /* 1620 */ 2032, 326, 304, 306, 2068, 1993, 2033, 109, 2034, 649, - /* 1630 */ 2036, 2037, 644, 325, 639, 1992, 315, 1991, 77, 632, - /* 1640 */ 1988, 2121, 393, 394, 1425, 371, 2117, 1426, 188, 398, - /* 1650 */ 1986, 400, 401, 402, 1449, 1985, 1444, 2051, 404, 1984, - /* 1660 */ 1983, 406, 1982, 408, 410, 646, 78, 1395, 1394, 1954, - /* 1670 */ 2001, 1953, 645, 1952, 417, 2033, 1951, 1950, 418, 1452, - /* 1680 */ 1454, 1346, 1906, 1905, 1903, 145, 1902, 1901, 1904, 1900, - /* 1690 */ 1899, 1897, 637, 1508, 1509, 1511, 1512, 1513, 1514, 1896, - /* 1700 */ 1895, 2032, 193, 435, 1894, 2068, 2051, 437, 110, 2034, - /* 1710 */ 649, 2036, 2037, 644, 646, 639, 1908, 1893, 1892, 2001, - /* 1720 */ 1891, 645, 2121, 1890, 2033, 1889, 2120, 2117, 1888, 1887, - /* 1730 */ 1886, 1885, 1884, 1883, 1882, 1881, 1880, 1879, 147, 1878, - /* 1740 */ 1877, 1876, 1907, 1875, 1874, 1873, 1348, 1872, 1871, 1870, - /* 1750 */ 2032, 465, 1869, 1733, 2068, 2051, 199, 110, 2034, 649, - /* 1760 */ 2036, 2037, 644, 646, 639, 1732, 201, 1731, 2001, 202, - /* 1770 */ 645, 2121, 1729, 2033, 1693, 634, 2117, 1138, 1137, 1692, - /* 1780 */ 204, 1225, 1967, 1961, 1949, 212, 1948, 1926, 1794, 75, - /* 1790 */ 1728, 1172, 2033, 1726, 1724, 177, 205, 499, 76, 647, - /* 1800 */ 210, 2021, 482, 2068, 2051, 484, 110, 2034, 649, 2036, - /* 1810 */ 2037, 644, 646, 639, 500, 501, 503, 2001, 504, 645, - /* 1820 */ 2121, 1722, 1720, 2051, 338, 2117, 508, 507, 366, 1707, - /* 1830 */ 505, 646, 511, 512, 509, 513, 2001, 1706, 645, 1689, - /* 1840 */ 1796, 2033, 1294, 1795, 1216, 1293, 1215, 1214, 2032, 1213, - /* 1850 */ 704, 1210, 2068, 1209, 706, 169, 2034, 649, 2036, 2037, - /* 1860 */ 644, 2033, 639, 1208, 1718, 62, 1207, 2032, 352, 1711, - /* 1870 */ 353, 2068, 2051, 1709, 324, 2034, 649, 2036, 2037, 644, - /* 1880 */ 643, 639, 354, 222, 537, 2001, 540, 645, 1688, 542, - /* 1890 */ 1687, 544, 2051, 1686, 546, 111, 1415, 376, 1414, 550, - /* 1900 */ 646, 1417, 1966, 1401, 26, 2001, 1960, 645, 2214, 66, - /* 1910 */ 1947, 559, 1945, 28, 162, 19, 2032, 16, 2033, 575, - /* 1920 */ 2068, 1626, 55, 323, 2034, 649, 2036, 2037, 644, 2197, - /* 1930 */ 639, 247, 2087, 560, 2033, 573, 2032, 64, 357, 249, - /* 1940 */ 2068, 5, 243, 324, 2034, 649, 2036, 2037, 644, 2051, - /* 1950 */ 639, 58, 2033, 59, 378, 1608, 1600, 646, 254, 30, - /* 1960 */ 255, 6, 2001, 170, 645, 2051, 253, 2022, 21, 267, - /* 1970 */ 29, 565, 91, 646, 1646, 1647, 1641, 1640, 2001, 362, - /* 1980 */ 645, 1645, 1644, 2051, 363, 173, 1946, 57, 1575, 1574, - /* 1990 */ 1944, 646, 1943, 2032, 1925, 93, 2001, 2068, 645, 94, - /* 2000 */ 324, 2034, 649, 2036, 2037, 644, 273, 639, 274, 552, - /* 2010 */ 1924, 2033, 22, 2068, 1606, 276, 319, 2034, 649, 2036, - /* 2020 */ 2037, 644, 56, 639, 281, 620, 67, 2032, 2033, 98, - /* 2030 */ 96, 2068, 283, 102, 308, 2034, 649, 2036, 2037, 644, - /* 2040 */ 286, 639, 2051, 12, 23, 2033, 1450, 10, 2071, 1527, - /* 2050 */ 646, 20, 17, 1537, 1505, 2001, 1526, 645, 638, 2051, - /* 2060 */ 1503, 36, 174, 1502, 15, 24, 186, 646, 1474, 1482, - /* 2070 */ 1279, 25, 2001, 652, 645, 379, 2051, 650, 654, 656, - /* 2080 */ 1276, 657, 1256, 659, 646, 1273, 2032, 662, 665, 2001, - /* 2090 */ 2068, 645, 660, 309, 2034, 649, 2036, 2037, 644, 1267, - /* 2100 */ 639, 663, 2033, 2032, 1265, 648, 289, 2068, 666, 1271, - /* 2110 */ 310, 2034, 649, 2036, 2037, 644, 672, 639, 1270, 103, - /* 2120 */ 2032, 1269, 104, 1268, 2068, 1288, 74, 316, 2034, 649, - /* 2130 */ 2036, 2037, 644, 2051, 639, 1284, 2033, 1170, 682, 1204, - /* 2140 */ 1203, 646, 1202, 1201, 1200, 1199, 2001, 1197, 645, 1195, - /* 2150 */ 1194, 1193, 1223, 1191, 694, 290, 1190, 1189, 1188, 1187, - /* 2160 */ 1186, 1185, 1220, 2033, 1218, 1182, 1181, 2051, 1178, 1177, - /* 2170 */ 1176, 1725, 1175, 714, 716, 646, 715, 2032, 1723, 718, - /* 2180 */ 2001, 2068, 645, 1721, 320, 2034, 649, 2036, 2037, 644, - /* 2190 */ 719, 639, 720, 2033, 2051, 722, 724, 1719, 723, 726, - /* 2200 */ 727, 728, 646, 1705, 730, 1127, 1685, 2001, 293, 645, - /* 2210 */ 734, 2032, 2033, 1436, 303, 2068, 737, 1660, 312, 2034, - /* 2220 */ 649, 2036, 2037, 644, 2051, 639, 1660, 738, 1660, 1660, - /* 2230 */ 1660, 1660, 646, 1660, 1660, 1660, 1660, 2001, 2032, 645, - /* 2240 */ 1660, 1660, 2068, 2051, 1660, 321, 2034, 649, 2036, 2037, - /* 2250 */ 644, 646, 639, 1660, 1660, 1660, 2001, 1660, 645, 1660, - /* 2260 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 2032, 1660, - /* 2270 */ 1660, 1660, 2068, 1660, 1660, 313, 2034, 649, 2036, 2037, - /* 2280 */ 644, 2033, 639, 1660, 1660, 1660, 1660, 2032, 1660, 1660, - /* 2290 */ 1660, 2068, 1660, 1660, 322, 2034, 649, 2036, 2037, 644, - /* 2300 */ 1660, 639, 1660, 1660, 1660, 2033, 1660, 1660, 1660, 1660, - /* 2310 */ 1660, 1660, 2051, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2320 */ 646, 1660, 1660, 1660, 1660, 2001, 1660, 645, 1660, 1660, - /* 2330 */ 2033, 1660, 1660, 1660, 1660, 1660, 2051, 1660, 1660, 1660, - /* 2340 */ 1660, 1660, 1660, 1660, 646, 1660, 1660, 1660, 1660, 2001, - /* 2350 */ 1660, 645, 1660, 1660, 1660, 1660, 2032, 1660, 1660, 1660, - /* 2360 */ 2068, 2051, 1660, 314, 2034, 649, 2036, 2037, 644, 646, - /* 2370 */ 639, 1660, 1660, 1660, 2001, 1660, 645, 1660, 1660, 1660, - /* 2380 */ 2032, 1660, 1660, 1660, 2068, 1660, 1660, 327, 2034, 649, - /* 2390 */ 2036, 2037, 644, 1660, 639, 1660, 1660, 1660, 1660, 2033, - /* 2400 */ 1660, 1660, 1660, 1660, 1660, 2032, 1660, 1660, 1660, 2068, - /* 2410 */ 1660, 1660, 328, 2034, 649, 2036, 2037, 644, 2033, 639, - /* 2420 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2430 */ 2051, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 646, 1660, - /* 2440 */ 1660, 1660, 1660, 2001, 1660, 645, 1660, 1660, 1660, 2051, - /* 2450 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 646, 1660, 1660, - /* 2460 */ 1660, 1660, 2001, 1660, 645, 1660, 1660, 1660, 1660, 1660, - /* 2470 */ 1660, 1660, 1660, 1660, 2032, 1660, 1660, 1660, 2068, 1660, - /* 2480 */ 2033, 2045, 2034, 649, 2036, 2037, 644, 1660, 639, 1660, - /* 2490 */ 1660, 1660, 1660, 2032, 1660, 1660, 1660, 2068, 1660, 2033, - /* 2500 */ 2044, 2034, 649, 2036, 2037, 644, 1660, 639, 1660, 1660, - /* 2510 */ 1660, 2051, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 646, - /* 2520 */ 1660, 1660, 1660, 1660, 2001, 1660, 645, 1660, 1660, 1660, - /* 2530 */ 2051, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 646, 1660, - /* 2540 */ 1660, 1660, 1660, 2001, 1660, 645, 1660, 1660, 1660, 1660, - /* 2550 */ 1660, 1660, 1660, 1660, 1660, 2032, 2033, 1660, 1660, 2068, - /* 2560 */ 1660, 1660, 2043, 2034, 649, 2036, 2037, 644, 1660, 639, - /* 2570 */ 1660, 1660, 1660, 1660, 2032, 2033, 1660, 1660, 2068, 1660, - /* 2580 */ 1660, 340, 2034, 649, 2036, 2037, 644, 2051, 639, 1660, - /* 2590 */ 1660, 1660, 1660, 1660, 1660, 646, 1660, 1660, 1660, 1660, - /* 2600 */ 2001, 1660, 645, 1660, 1660, 1660, 2051, 1660, 1660, 1660, - /* 2610 */ 1660, 1660, 1660, 1660, 646, 1660, 1660, 1660, 1660, 2001, - /* 2620 */ 1660, 645, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2630 */ 1660, 2032, 1660, 1660, 1660, 2068, 1660, 2033, 341, 2034, - /* 2640 */ 649, 2036, 2037, 644, 1660, 639, 1660, 1660, 1660, 1660, - /* 2650 */ 2032, 1660, 1660, 1660, 2068, 1660, 1660, 337, 2034, 649, - /* 2660 */ 2036, 2037, 644, 1660, 639, 1660, 1660, 1660, 2051, 1660, - /* 2670 */ 1660, 1660, 1660, 1660, 1660, 1660, 646, 1660, 1660, 1660, - /* 2680 */ 1660, 2001, 1660, 645, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2690 */ 1660, 1660, 1660, 1660, 1660, 1660, 2033, 1660, 1660, 1660, - /* 2700 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2710 */ 1660, 1660, 2032, 1660, 1660, 1660, 2068, 1660, 1660, 342, - /* 2720 */ 2034, 649, 2036, 2037, 644, 1660, 639, 2051, 1660, 1660, - /* 2730 */ 1660, 1660, 1660, 1660, 1660, 646, 1660, 1660, 1660, 1660, - /* 2740 */ 2001, 1660, 645, 1660, 1660, 2033, 1660, 1660, 1660, 1660, - /* 2750 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2760 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2770 */ 1660, 647, 1660, 1660, 1660, 2068, 2051, 1660, 319, 2034, - /* 2780 */ 649, 2036, 2037, 644, 646, 639, 1660, 1660, 1660, 2001, - /* 2790 */ 1660, 645, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2800 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2810 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - /* 2820 */ 2032, 1660, 1660, 1660, 2068, 1660, 1660, 318, 2034, 649, - /* 2830 */ 2036, 2037, 644, 1660, 639, + /* 0 */ 1937, 2201, 1796, 605, 480, 2196, 481, 1700, 489, 1807, + /* 10 */ 481, 1700, 45, 43, 1588, 1935, 617, 31, 176, 178, + /* 20 */ 378, 2200, 1437, 38, 37, 2197, 2199, 44, 42, 41, + /* 30 */ 40, 39, 1858, 1518, 140, 1435, 1462, 2037, 1871, 346, + /* 40 */ 1920, 2023, 38, 37, 611, 356, 44, 42, 41, 40, + /* 50 */ 39, 423, 2019, 2201, 1869, 38, 37, 2196, 1513, 44, + /* 60 */ 42, 41, 40, 39, 18, 498, 383, 1465, 2055, 1864, + /* 70 */ 1866, 1443, 1662, 2200, 167, 605, 644, 2197, 2198, 1772, + /* 80 */ 1151, 2005, 1150, 646, 45, 43, 2015, 2021, 359, 568, + /* 90 */ 1132, 329, 378, 2196, 1437, 220, 14, 640, 339, 181, + /* 100 */ 2133, 2134, 548, 138, 2138, 1518, 140, 1435, 2202, 182, + /* 110 */ 600, 1152, 2036, 2197, 594, 546, 2072, 544, 737, 323, + /* 120 */ 2038, 650, 2040, 2041, 645, 643, 640, 631, 2090, 1134, + /* 130 */ 1513, 1137, 1138, 1520, 1521, 629, 18, 479, 391, 1547, + /* 140 */ 484, 1706, 390, 1443, 1687, 1259, 672, 671, 670, 1263, + /* 150 */ 669, 1265, 1266, 668, 1268, 665, 176, 1274, 662, 1276, + /* 160 */ 1277, 659, 656, 1493, 1503, 1937, 605, 615, 14, 1519, + /* 170 */ 1522, 266, 2133, 604, 381, 133, 603, 369, 1921, 2196, + /* 180 */ 1934, 617, 161, 568, 1438, 616, 1436, 2196, 2005, 357, + /* 190 */ 737, 1820, 629, 269, 592, 182, 1548, 140, 1869, 2197, + /* 200 */ 594, 498, 2202, 182, 629, 1520, 1521, 2197, 594, 588, + /* 210 */ 1441, 1442, 246, 1492, 1495, 1496, 1497, 1498, 1499, 1500, + /* 220 */ 1501, 1502, 642, 638, 1511, 1512, 1514, 1515, 1516, 1517, + /* 230 */ 2, 61, 496, 92, 1930, 1493, 1503, 583, 106, 684, + /* 240 */ 122, 1519, 1522, 121, 120, 119, 118, 117, 116, 115, + /* 250 */ 114, 113, 141, 1592, 350, 166, 1438, 1676, 1436, 1462, + /* 260 */ 1810, 607, 180, 2133, 2134, 1461, 138, 2138, 48, 34, + /* 270 */ 376, 1542, 1543, 1544, 1545, 1546, 1550, 1551, 1552, 1553, + /* 280 */ 48, 61, 1441, 1442, 1219, 1492, 1495, 1496, 1497, 1498, + /* 290 */ 1499, 1500, 1501, 1502, 642, 638, 1511, 1512, 1514, 1515, + /* 300 */ 1516, 1517, 2, 2023, 11, 45, 43, 44, 42, 41, + /* 310 */ 40, 39, 1462, 378, 2019, 1437, 351, 740, 349, 348, + /* 320 */ 1221, 521, 589, 584, 577, 523, 1518, 1462, 1435, 488, + /* 330 */ 2037, 294, 484, 1706, 605, 35, 287, 38, 37, 601, + /* 340 */ 410, 44, 42, 41, 40, 39, 175, 522, 2015, 2021, + /* 350 */ 360, 1513, 730, 726, 722, 718, 292, 18, 86, 640, + /* 360 */ 486, 2055, 412, 408, 1443, 140, 482, 557, 415, 647, + /* 370 */ 414, 2140, 136, 1151, 2005, 1150, 646, 45, 43, 1523, + /* 380 */ 1463, 1813, 2201, 185, 11, 378, 9, 1437, 61, 14, + /* 390 */ 278, 279, 65, 107, 413, 277, 285, 2137, 1518, 1464, + /* 400 */ 1435, 632, 1494, 2097, 1152, 2036, 1733, 630, 1686, 2072, + /* 410 */ 630, 737, 168, 2038, 650, 2040, 2041, 645, 1665, 640, + /* 420 */ 185, 132, 676, 1513, 187, 1862, 1520, 1521, 519, 626, + /* 430 */ 183, 2133, 2134, 185, 138, 2138, 1443, 630, 1818, 122, + /* 440 */ 11, 1818, 121, 120, 119, 118, 117, 116, 115, 114, + /* 450 */ 113, 132, 2005, 569, 2162, 194, 1493, 1503, 524, 1871, + /* 460 */ 100, 46, 1519, 1522, 272, 634, 366, 2097, 1818, 271, + /* 470 */ 1357, 1358, 534, 533, 532, 1869, 1650, 1438, 2026, 1436, + /* 480 */ 137, 528, 1811, 737, 61, 527, 1401, 461, 240, 1901, + /* 490 */ 526, 531, 83, 1302, 1303, 82, 525, 236, 1520, 1521, + /* 500 */ 1865, 1866, 1463, 1441, 1442, 1657, 1492, 1495, 1496, 1497, + /* 510 */ 1498, 1499, 1500, 1501, 1502, 642, 638, 1511, 1512, 1514, + /* 520 */ 1515, 1516, 1517, 2, 534, 533, 532, 2028, 1493, 1503, + /* 530 */ 1664, 1871, 137, 528, 1519, 1522, 630, 527, 344, 630, + /* 540 */ 185, 1464, 526, 531, 268, 198, 197, 1869, 525, 1438, + /* 550 */ 54, 1436, 616, 421, 131, 130, 129, 128, 127, 126, + /* 560 */ 125, 124, 123, 1412, 1413, 417, 1181, 1818, 460, 416, + /* 570 */ 1818, 41, 40, 39, 2037, 1441, 1442, 616, 1492, 1495, + /* 580 */ 1496, 1497, 1498, 1499, 1500, 1501, 1502, 642, 638, 1511, + /* 590 */ 1512, 1514, 1515, 1516, 1517, 2, 45, 43, 1446, 614, + /* 600 */ 1916, 1930, 1182, 1656, 378, 2055, 1437, 630, 593, 630, + /* 610 */ 568, 190, 2196, 647, 2196, 1374, 1375, 1518, 2005, 1435, + /* 620 */ 646, 422, 221, 431, 625, 61, 1930, 592, 182, 2202, + /* 630 */ 182, 49, 2197, 594, 2197, 594, 185, 171, 1818, 1685, + /* 640 */ 1818, 441, 1513, 515, 511, 507, 503, 218, 630, 2036, + /* 650 */ 440, 1373, 1376, 2072, 1616, 1443, 110, 2038, 650, 2040, + /* 660 */ 2041, 645, 446, 640, 424, 370, 1528, 1684, 45, 43, + /* 670 */ 2125, 1465, 1462, 164, 2124, 2121, 378, 425, 1437, 1818, + /* 680 */ 46, 539, 1820, 2005, 87, 1683, 268, 216, 1443, 1518, + /* 690 */ 1682, 1435, 142, 38, 37, 2096, 549, 44, 42, 41, + /* 700 */ 40, 39, 737, 580, 579, 1614, 1615, 1617, 1618, 1619, + /* 710 */ 234, 2005, 1871, 1809, 1513, 38, 37, 1520, 1521, 44, + /* 720 */ 42, 41, 40, 39, 2019, 542, 33, 1443, 1870, 2005, + /* 730 */ 536, 1795, 38, 37, 2005, 233, 44, 42, 41, 40, + /* 740 */ 39, 1681, 593, 1680, 1679, 1549, 2196, 1493, 1503, 1449, + /* 750 */ 630, 27, 14, 1519, 1522, 215, 209, 675, 2015, 2021, + /* 760 */ 214, 592, 182, 494, 447, 1803, 2197, 594, 1438, 640, + /* 770 */ 1436, 164, 69, 1678, 737, 68, 2055, 185, 1675, 207, + /* 780 */ 1821, 1818, 1627, 185, 587, 2005, 1974, 2005, 2005, 1520, + /* 790 */ 1521, 1674, 13, 12, 1441, 1442, 696, 1492, 1495, 1496, + /* 800 */ 1497, 1498, 1499, 1500, 1501, 1502, 642, 638, 1511, 1512, + /* 810 */ 1514, 1515, 1516, 1517, 2, 1494, 191, 2005, 32, 1493, + /* 820 */ 1503, 332, 2005, 1460, 682, 1519, 1522, 235, 1554, 586, + /* 830 */ 454, 86, 237, 468, 1871, 2005, 467, 1137, 1138, 682, + /* 840 */ 1438, 371, 1436, 154, 153, 679, 678, 677, 151, 1673, + /* 850 */ 1869, 437, 1465, 469, 1814, 1794, 439, 1916, 154, 153, + /* 860 */ 679, 678, 677, 151, 530, 529, 1441, 1442, 192, 1492, + /* 870 */ 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 642, 638, + /* 880 */ 1511, 1512, 1514, 1515, 1516, 1517, 2, 381, 1561, 563, + /* 890 */ 89, 334, 165, 2005, 355, 164, 550, 307, 347, 1730, + /* 900 */ 630, 38, 37, 1793, 1820, 44, 42, 41, 40, 39, + /* 910 */ 427, 305, 72, 1805, 497, 71, 1672, 8, 684, 38, + /* 920 */ 37, 1871, 384, 44, 42, 41, 40, 39, 382, 301, + /* 930 */ 164, 1818, 1848, 203, 476, 474, 471, 1869, 2140, 1820, + /* 940 */ 465, 708, 706, 459, 458, 457, 456, 453, 452, 451, + /* 950 */ 450, 449, 445, 444, 443, 442, 331, 434, 433, 432, + /* 960 */ 2005, 429, 428, 345, 2136, 714, 713, 712, 711, 388, + /* 970 */ 61, 710, 709, 144, 704, 703, 702, 701, 700, 699, + /* 980 */ 698, 156, 694, 693, 692, 387, 386, 689, 688, 687, + /* 990 */ 686, 685, 630, 630, 1671, 38, 37, 245, 1998, 44, + /* 1000 */ 42, 41, 40, 39, 1437, 630, 1815, 238, 1604, 108, + /* 1010 */ 2037, 682, 2200, 630, 630, 630, 1585, 1435, 697, 627, + /* 1020 */ 1788, 1670, 1669, 1818, 1818, 1668, 1667, 628, 564, 609, + /* 1030 */ 154, 153, 679, 678, 677, 151, 1818, 1916, 2005, 523, + /* 1040 */ 51, 2055, 3, 568, 1818, 1818, 1818, 2196, 196, 608, + /* 1050 */ 80, 79, 420, 1443, 2005, 189, 646, 630, 163, 2037, + /* 1060 */ 2140, 522, 2202, 182, 152, 2005, 2005, 2197, 594, 2005, + /* 1070 */ 2005, 613, 680, 2023, 330, 1862, 1462, 406, 73, 404, + /* 1080 */ 400, 396, 393, 413, 2019, 2036, 2135, 244, 1818, 2072, + /* 1090 */ 2055, 2024, 109, 2038, 650, 2040, 2041, 645, 647, 640, + /* 1100 */ 737, 597, 2019, 2005, 179, 646, 2125, 2145, 1581, 630, + /* 1110 */ 372, 2121, 681, 1991, 146, 1862, 134, 53, 2015, 2021, + /* 1120 */ 373, 630, 185, 282, 184, 1581, 2037, 90, 81, 640, + /* 1130 */ 1999, 1801, 2151, 152, 2036, 288, 2015, 2021, 2072, 674, + /* 1140 */ 1818, 109, 2038, 650, 2040, 2041, 645, 640, 640, 630, + /* 1150 */ 152, 143, 1818, 149, 2096, 2125, 241, 2055, 2037, 372, + /* 1160 */ 2121, 398, 1720, 385, 226, 608, 1438, 224, 1436, 1713, + /* 1170 */ 2005, 228, 646, 230, 227, 568, 229, 63, 232, 2196, + /* 1180 */ 1818, 231, 63, 250, 535, 552, 1407, 551, 637, 2055, + /* 1190 */ 1677, 537, 1441, 1442, 2202, 182, 1711, 647, 641, 2197, + /* 1200 */ 594, 2036, 2005, 1410, 646, 2072, 1445, 2037, 109, 2038, + /* 1210 */ 650, 2040, 2041, 645, 52, 640, 1659, 1660, 540, 1494, + /* 1220 */ 179, 567, 2125, 152, 47, 1707, 372, 2121, 275, 2165, + /* 1230 */ 1613, 70, 150, 2036, 152, 1612, 252, 2072, 2055, 1773, + /* 1240 */ 109, 2038, 650, 2040, 2041, 645, 647, 640, 2152, 13, + /* 1250 */ 12, 2005, 2216, 646, 2125, 105, 63, 555, 372, 2121, + /* 1260 */ 47, 1584, 47, 654, 150, 102, 2037, 263, 581, 2159, + /* 1270 */ 219, 152, 135, 690, 732, 257, 612, 1371, 596, 150, + /* 1280 */ 2056, 280, 2036, 389, 622, 284, 2072, 1252, 1701, 109, + /* 1290 */ 2038, 650, 2040, 2041, 645, 1200, 640, 2055, 691, 1925, + /* 1300 */ 2037, 2216, 568, 2125, 1859, 647, 2196, 372, 2121, 1555, + /* 1310 */ 2005, 2155, 646, 1504, 606, 300, 1280, 1284, 2172, 265, + /* 1320 */ 1198, 2202, 182, 262, 1291, 1289, 2197, 594, 598, 1, + /* 1330 */ 4, 2055, 155, 392, 1539, 397, 1394, 295, 195, 647, + /* 1340 */ 343, 2036, 426, 1465, 2005, 2072, 646, 1926, 109, 2038, + /* 1350 */ 650, 2040, 2041, 645, 430, 640, 463, 1448, 435, 1460, + /* 1360 */ 2216, 448, 2125, 1918, 462, 455, 372, 2121, 464, 470, + /* 1370 */ 472, 200, 473, 2037, 475, 2036, 477, 575, 1466, 2072, + /* 1380 */ 478, 487, 109, 2038, 650, 2040, 2041, 645, 1468, 640, + /* 1390 */ 206, 490, 375, 374, 2216, 1463, 2125, 208, 491, 1467, + /* 1400 */ 372, 2121, 1451, 492, 2055, 1469, 493, 211, 495, 499, + /* 1410 */ 213, 2190, 647, 1518, 84, 1444, 1154, 2005, 518, 646, + /* 1420 */ 85, 217, 2037, 516, 517, 112, 333, 88, 520, 1808, + /* 1430 */ 1980, 554, 556, 1979, 148, 296, 223, 239, 1513, 1804, + /* 1440 */ 558, 225, 242, 559, 565, 2156, 157, 582, 2036, 158, + /* 1450 */ 1806, 1443, 2072, 2055, 1802, 109, 2038, 650, 2040, 2041, + /* 1460 */ 645, 647, 640, 159, 160, 2171, 2005, 2216, 646, 2125, + /* 1470 */ 620, 572, 562, 372, 2121, 2166, 7, 2170, 578, 361, + /* 1480 */ 591, 571, 585, 573, 2144, 2147, 2037, 248, 251, 256, + /* 1490 */ 172, 570, 258, 259, 2219, 139, 260, 2036, 636, 362, + /* 1500 */ 264, 2072, 602, 599, 109, 2038, 650, 2040, 2041, 645, + /* 1510 */ 1581, 640, 1464, 2195, 610, 270, 2100, 2055, 2125, 261, + /* 1520 */ 2141, 365, 372, 2121, 1470, 647, 95, 297, 1931, 623, + /* 1530 */ 2005, 618, 646, 619, 298, 1945, 1944, 624, 1943, 368, + /* 1540 */ 97, 99, 60, 299, 1819, 2106, 101, 1789, 652, 291, + /* 1550 */ 302, 1863, 733, 326, 2037, 734, 311, 335, 336, 736, + /* 1560 */ 325, 2036, 50, 315, 1452, 2072, 1447, 306, 109, 2038, + /* 1570 */ 650, 2040, 2041, 645, 1997, 640, 1996, 1995, 304, 77, + /* 1580 */ 2098, 1992, 2125, 394, 2037, 2055, 372, 2121, 395, 1428, + /* 1590 */ 1455, 1457, 1429, 647, 188, 399, 1990, 401, 2005, 402, + /* 1600 */ 646, 403, 1989, 638, 1511, 1512, 1514, 1515, 1516, 1517, + /* 1610 */ 405, 1988, 1987, 407, 2037, 2055, 409, 1986, 78, 411, + /* 1620 */ 1397, 1396, 1957, 647, 1956, 1955, 1954, 418, 2005, 2036, + /* 1630 */ 646, 419, 1953, 2072, 1348, 1909, 109, 2038, 650, 2040, + /* 1640 */ 2041, 645, 1908, 640, 2037, 2055, 1906, 145, 633, 1905, + /* 1650 */ 2125, 1904, 1907, 647, 372, 2121, 1903, 1902, 2005, 2036, + /* 1660 */ 646, 1900, 1899, 2072, 193, 436, 110, 2038, 650, 2040, + /* 1670 */ 2041, 645, 1898, 640, 1897, 2055, 438, 1911, 2037, 1896, + /* 1680 */ 2125, 1895, 1894, 647, 635, 2121, 1893, 1892, 2005, 648, + /* 1690 */ 646, 1891, 1890, 2072, 1889, 1888, 110, 2038, 650, 2040, + /* 1700 */ 2041, 645, 1887, 640, 1886, 2037, 1885, 1884, 1883, 2055, + /* 1710 */ 2125, 1882, 147, 1881, 338, 2121, 1880, 647, 1879, 2036, + /* 1720 */ 1910, 1878, 2005, 2072, 646, 1877, 169, 2038, 650, 2040, + /* 1730 */ 2041, 645, 1350, 640, 1876, 1875, 2055, 1874, 1873, 466, + /* 1740 */ 1872, 1736, 199, 1735, 647, 1734, 201, 1227, 202, 2005, + /* 1750 */ 1732, 646, 2025, 2036, 2037, 1696, 204, 2072, 75, 177, + /* 1760 */ 168, 2038, 650, 2040, 2041, 645, 1695, 640, 1140, 483, + /* 1770 */ 1139, 485, 205, 1970, 1964, 76, 1952, 1951, 595, 2217, + /* 1780 */ 2036, 210, 212, 1929, 2072, 2055, 1797, 110, 2038, 650, + /* 1790 */ 2040, 2041, 645, 647, 640, 1174, 1731, 1729, 2005, 500, + /* 1800 */ 646, 2125, 2163, 1727, 502, 501, 2122, 504, 505, 506, + /* 1810 */ 1725, 509, 1723, 508, 510, 512, 2037, 513, 1710, 1709, + /* 1820 */ 514, 1692, 1799, 1296, 1295, 1798, 1218, 1217, 62, 2036, + /* 1830 */ 222, 705, 1721, 2072, 1216, 1215, 317, 2038, 650, 2040, + /* 1840 */ 2041, 645, 707, 640, 1212, 1210, 1211, 2055, 2037, 1209, + /* 1850 */ 352, 1714, 353, 1712, 538, 647, 354, 1691, 1690, 541, + /* 1860 */ 2005, 543, 646, 1689, 545, 547, 111, 26, 1417, 1969, + /* 1870 */ 1418, 1416, 1403, 1963, 55, 1950, 560, 1948, 66, 2055, + /* 1880 */ 590, 1420, 561, 162, 367, 2201, 19, 647, 16, 28, + /* 1890 */ 247, 2036, 2005, 243, 646, 2072, 358, 2037, 169, 2038, + /* 1900 */ 650, 2040, 2041, 645, 1629, 640, 566, 574, 58, 576, + /* 1910 */ 249, 5, 59, 1611, 2037, 254, 6, 1603, 20, 255, + /* 1920 */ 30, 2026, 64, 2036, 1649, 17, 1644, 2072, 2055, 21, + /* 1930 */ 324, 2038, 650, 2040, 2041, 645, 644, 640, 1650, 1643, + /* 1940 */ 170, 2005, 363, 646, 253, 2055, 2037, 1648, 29, 1647, + /* 1950 */ 377, 2218, 91, 647, 57, 364, 1578, 1577, 2005, 1949, + /* 1960 */ 646, 1947, 1946, 267, 173, 1928, 93, 94, 273, 1927, + /* 1970 */ 96, 2037, 2036, 621, 56, 22, 2072, 2055, 23, 323, + /* 1980 */ 2038, 650, 2040, 2041, 645, 647, 640, 274, 2091, 2036, + /* 1990 */ 2005, 1609, 646, 2072, 102, 2037, 324, 2038, 650, 2040, + /* 2000 */ 2041, 645, 2055, 640, 276, 281, 283, 379, 12, 67, + /* 2010 */ 647, 286, 1453, 174, 98, 2005, 1530, 646, 1540, 2075, + /* 2020 */ 2037, 553, 10, 1508, 1506, 2072, 2055, 1505, 319, 2038, + /* 2030 */ 650, 2040, 2041, 645, 647, 640, 639, 1529, 36, 2005, + /* 2040 */ 15, 646, 24, 649, 186, 1477, 2036, 1485, 25, 653, + /* 2050 */ 2072, 2055, 651, 324, 2038, 650, 2040, 2041, 645, 647, + /* 2060 */ 640, 380, 657, 655, 2005, 1281, 646, 1278, 1275, 658, + /* 2070 */ 2036, 660, 661, 663, 2072, 1269, 664, 308, 2038, 650, + /* 2080 */ 2040, 2041, 645, 2037, 640, 1267, 666, 667, 1258, 103, + /* 2090 */ 673, 289, 1290, 1286, 1273, 2036, 104, 1272, 74, 2072, + /* 2100 */ 1172, 1271, 309, 2038, 650, 2040, 2041, 645, 683, 640, + /* 2110 */ 2037, 1206, 1270, 1205, 2055, 1204, 1203, 1202, 1201, 1225, + /* 2120 */ 1199, 1197, 647, 1196, 1195, 695, 1193, 2005, 1192, 646, + /* 2130 */ 1191, 290, 2037, 1189, 1190, 1188, 1187, 1220, 1222, 1184, + /* 2140 */ 1183, 2055, 1180, 1179, 1178, 1177, 1728, 716, 715, 647, + /* 2150 */ 1726, 719, 1724, 717, 2005, 1722, 646, 720, 2036, 721, + /* 2160 */ 723, 1708, 2072, 2055, 727, 310, 2038, 650, 2040, 2041, + /* 2170 */ 645, 647, 640, 725, 724, 728, 2005, 729, 646, 731, + /* 2180 */ 1129, 1688, 293, 735, 738, 2036, 1439, 303, 739, 2072, + /* 2190 */ 1663, 1663, 316, 2038, 650, 2040, 2041, 645, 1663, 640, + /* 2200 */ 1663, 1663, 1663, 1663, 1663, 1663, 1663, 2036, 1663, 1663, + /* 2210 */ 1663, 2072, 2037, 1663, 320, 2038, 650, 2040, 2041, 645, + /* 2220 */ 1663, 640, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 2037, + /* 2230 */ 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + /* 2240 */ 1663, 1663, 1663, 2055, 1663, 1663, 2037, 1663, 1663, 1663, + /* 2250 */ 1663, 647, 1663, 1663, 1663, 1663, 2005, 1663, 646, 1663, + /* 2260 */ 2055, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 647, 1663, + /* 2270 */ 1663, 1663, 1663, 2005, 1663, 646, 1663, 2055, 2037, 1663, + /* 2280 */ 1663, 1663, 1663, 1663, 1663, 647, 1663, 2036, 1663, 1663, + /* 2290 */ 2005, 2072, 646, 1663, 312, 2038, 650, 2040, 2041, 645, + /* 2300 */ 1663, 640, 1663, 2037, 2036, 1663, 1663, 1663, 2072, 2055, + /* 2310 */ 1663, 321, 2038, 650, 2040, 2041, 645, 647, 640, 1663, + /* 2320 */ 1663, 2036, 2005, 1663, 646, 2072, 1663, 2037, 313, 2038, + /* 2330 */ 650, 2040, 2041, 645, 2055, 640, 1663, 1663, 1663, 1663, + /* 2340 */ 1663, 1663, 647, 1663, 1663, 1663, 1663, 2005, 1663, 646, + /* 2350 */ 1663, 1663, 2037, 2036, 1663, 1663, 1663, 2072, 2055, 1663, + /* 2360 */ 322, 2038, 650, 2040, 2041, 645, 647, 640, 1663, 1663, + /* 2370 */ 1663, 2005, 1663, 646, 1663, 1663, 1663, 1663, 2036, 1663, + /* 2380 */ 1663, 1663, 2072, 2055, 1663, 314, 2038, 650, 2040, 2041, + /* 2390 */ 645, 647, 640, 1663, 1663, 1663, 2005, 1663, 646, 1663, + /* 2400 */ 1663, 1663, 2036, 1663, 1663, 1663, 2072, 1663, 1663, 327, + /* 2410 */ 2038, 650, 2040, 2041, 645, 2037, 640, 1663, 1663, 1663, + /* 2420 */ 1663, 1663, 1663, 1663, 1663, 1663, 1663, 2036, 1663, 1663, + /* 2430 */ 1663, 2072, 1663, 1663, 328, 2038, 650, 2040, 2041, 645, + /* 2440 */ 1663, 640, 2037, 1663, 1663, 1663, 2055, 1663, 1663, 1663, + /* 2450 */ 1663, 1663, 1663, 1663, 647, 1663, 1663, 1663, 1663, 2005, + /* 2460 */ 1663, 646, 1663, 1663, 2037, 1663, 1663, 1663, 1663, 1663, + /* 2470 */ 1663, 1663, 1663, 2055, 1663, 1663, 1663, 1663, 1663, 1663, + /* 2480 */ 1663, 647, 1663, 1663, 1663, 1663, 2005, 1663, 646, 1663, + /* 2490 */ 2036, 1663, 1663, 1663, 2072, 2055, 1663, 2049, 2038, 650, + /* 2500 */ 2040, 2041, 645, 647, 640, 1663, 1663, 1663, 2005, 1663, + /* 2510 */ 646, 1663, 1663, 1663, 1663, 1663, 1663, 2036, 1663, 1663, + /* 2520 */ 1663, 2072, 1663, 1663, 2048, 2038, 650, 2040, 2041, 645, + /* 2530 */ 1663, 640, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 2036, + /* 2540 */ 1663, 1663, 1663, 2072, 2037, 1663, 2047, 2038, 650, 2040, + /* 2550 */ 2041, 645, 1663, 640, 1663, 1663, 1663, 1663, 1663, 1663, + /* 2560 */ 1663, 2037, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + /* 2570 */ 1663, 1663, 1663, 1663, 1663, 2055, 1663, 1663, 2037, 1663, + /* 2580 */ 1663, 1663, 1663, 647, 1663, 1663, 1663, 1663, 2005, 1663, + /* 2590 */ 646, 1663, 2055, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + /* 2600 */ 647, 1663, 1663, 1663, 1663, 2005, 1663, 646, 1663, 2055, + /* 2610 */ 2037, 1663, 1663, 1663, 1663, 1663, 1663, 647, 1663, 2036, + /* 2620 */ 1663, 1663, 2005, 2072, 646, 1663, 340, 2038, 650, 2040, + /* 2630 */ 2041, 645, 1663, 640, 1663, 2037, 2036, 1663, 1663, 1663, + /* 2640 */ 2072, 2055, 1663, 341, 2038, 650, 2040, 2041, 645, 647, + /* 2650 */ 640, 1663, 1663, 2036, 2005, 1663, 646, 2072, 1663, 2037, + /* 2660 */ 337, 2038, 650, 2040, 2041, 645, 2055, 640, 1663, 1663, + /* 2670 */ 1663, 1663, 1663, 1663, 647, 1663, 1663, 1663, 1663, 2005, + /* 2680 */ 1663, 646, 1663, 1663, 1663, 2036, 1663, 1663, 1663, 2072, + /* 2690 */ 2055, 1663, 342, 2038, 650, 2040, 2041, 645, 647, 640, + /* 2700 */ 1663, 1663, 1663, 2005, 1663, 646, 1663, 1663, 1663, 1663, + /* 2710 */ 648, 1663, 1663, 1663, 2072, 1663, 1663, 319, 2038, 650, + /* 2720 */ 2040, 2041, 645, 1663, 640, 1663, 1663, 1663, 1663, 1663, + /* 2730 */ 1663, 1663, 1663, 1663, 2036, 1663, 1663, 1663, 2072, 1663, + /* 2740 */ 1663, 318, 2038, 650, 2040, 2041, 645, 1663, 640, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 330, 354, 332, 339, 335, 339, 337, 338, 423, 362, - /* 10 */ 4, 426, 12, 13, 14, 363, 369, 2, 371, 353, - /* 20 */ 20, 364, 22, 8, 9, 378, 360, 12, 13, 14, - /* 30 */ 15, 16, 375, 33, 370, 35, 370, 331, 20, 14, - /* 40 */ 22, 364, 8, 9, 394, 20, 12, 13, 14, 15, - /* 50 */ 16, 339, 375, 35, 412, 8, 9, 362, 58, 12, - /* 60 */ 13, 14, 15, 16, 64, 353, 409, 410, 362, 51, - /* 70 */ 373, 71, 328, 376, 377, 339, 370, 420, 383, 384, - /* 80 */ 438, 375, 370, 377, 12, 13, 409, 410, 411, 439, - /* 90 */ 20, 58, 20, 443, 22, 377, 96, 420, 64, 435, - /* 100 */ 436, 437, 96, 439, 440, 33, 370, 35, 458, 459, - /* 110 */ 392, 393, 406, 463, 464, 20, 410, 20, 118, 413, - /* 120 */ 414, 415, 416, 417, 418, 419, 420, 421, 422, 96, - /* 130 */ 58, 98, 20, 133, 134, 20, 64, 336, 394, 105, - /* 140 */ 339, 340, 398, 71, 97, 109, 110, 111, 112, 113, - /* 150 */ 114, 115, 116, 117, 118, 119, 20, 121, 122, 123, - /* 160 */ 124, 125, 126, 163, 164, 377, 339, 96, 96, 169, - /* 170 */ 170, 435, 436, 437, 20, 439, 440, 389, 345, 443, - /* 180 */ 392, 393, 362, 439, 184, 362, 186, 443, 163, 335, - /* 190 */ 118, 337, 338, 370, 458, 459, 162, 370, 63, 463, - /* 200 */ 464, 368, 458, 459, 384, 133, 134, 463, 464, 209, - /* 210 */ 210, 96, 212, 213, 214, 215, 216, 217, 218, 219, + /* 0 */ 377, 439, 0, 339, 335, 443, 337, 338, 335, 363, + /* 10 */ 337, 338, 12, 13, 14, 392, 393, 2, 362, 361, + /* 20 */ 20, 459, 22, 8, 9, 463, 464, 12, 13, 14, + /* 30 */ 15, 16, 374, 33, 370, 35, 20, 331, 362, 383, + /* 40 */ 384, 364, 8, 9, 394, 369, 12, 13, 14, 15, + /* 50 */ 16, 339, 375, 439, 378, 8, 9, 443, 58, 12, + /* 60 */ 13, 14, 15, 16, 64, 63, 373, 20, 362, 376, + /* 70 */ 377, 71, 328, 459, 346, 339, 370, 463, 464, 351, + /* 80 */ 20, 375, 22, 377, 12, 13, 409, 410, 411, 439, + /* 90 */ 4, 379, 20, 443, 22, 35, 96, 420, 64, 435, + /* 100 */ 436, 437, 21, 439, 440, 33, 370, 35, 458, 459, + /* 110 */ 44, 51, 406, 463, 464, 34, 410, 36, 118, 413, + /* 120 */ 414, 415, 416, 417, 418, 419, 420, 421, 422, 43, + /* 130 */ 58, 45, 46, 133, 134, 20, 64, 336, 394, 105, + /* 140 */ 339, 340, 398, 71, 331, 109, 110, 111, 112, 113, + /* 150 */ 114, 115, 116, 117, 118, 119, 362, 121, 122, 123, + /* 160 */ 124, 125, 126, 163, 164, 377, 339, 20, 96, 169, + /* 170 */ 170, 435, 436, 437, 354, 439, 440, 389, 384, 443, + /* 180 */ 392, 393, 362, 439, 184, 339, 186, 443, 375, 369, + /* 190 */ 118, 371, 20, 58, 458, 459, 162, 370, 378, 463, + /* 200 */ 464, 63, 458, 459, 20, 133, 134, 463, 464, 20, + /* 210 */ 210, 211, 165, 213, 214, 215, 216, 217, 218, 219, /* 220 */ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - /* 230 */ 133, 134, 96, 163, 339, 163, 164, 20, 415, 162, + /* 230 */ 230, 96, 386, 98, 388, 163, 164, 168, 343, 63, /* 240 */ 21, 169, 170, 24, 25, 26, 27, 28, 29, 30, - /* 250 */ 31, 32, 20, 247, 22, 37, 184, 343, 186, 428, - /* 260 */ 429, 434, 435, 436, 437, 370, 439, 440, 234, 235, - /* 270 */ 236, 237, 238, 239, 240, 241, 242, 243, 244, 365, - /* 280 */ 247, 209, 210, 51, 212, 213, 214, 215, 216, 217, + /* 250 */ 31, 32, 357, 14, 37, 330, 184, 332, 186, 20, + /* 260 */ 365, 434, 435, 436, 437, 20, 439, 440, 96, 235, + /* 270 */ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + /* 280 */ 96, 96, 210, 211, 35, 213, 214, 215, 216, 217, /* 290 */ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - /* 300 */ 228, 229, 339, 231, 12, 13, 12, 13, 14, 15, - /* 310 */ 16, 234, 20, 358, 22, 0, 20, 99, 247, 101, - /* 320 */ 102, 244, 104, 346, 339, 33, 108, 35, 351, 331, - /* 330 */ 435, 436, 437, 439, 439, 440, 21, 443, 353, 24, - /* 340 */ 25, 26, 27, 28, 29, 30, 31, 32, 130, 386, - /* 350 */ 58, 388, 458, 459, 331, 370, 64, 463, 464, 404, - /* 360 */ 362, 364, 247, 71, 127, 128, 35, 439, 370, 132, - /* 370 */ 439, 443, 375, 375, 443, 377, 12, 13, 14, 168, - /* 380 */ 163, 164, 4, 247, 20, 362, 22, 459, 96, 339, - /* 390 */ 459, 463, 464, 370, 463, 464, 209, 33, 375, 35, - /* 400 */ 377, 44, 71, 353, 406, 343, 409, 410, 410, 63, - /* 410 */ 118, 413, 414, 415, 416, 417, 418, 420, 420, 357, - /* 420 */ 370, 43, 58, 45, 46, 133, 134, 365, 336, 406, - /* 430 */ 20, 339, 340, 410, 96, 71, 413, 414, 415, 416, - /* 440 */ 417, 418, 0, 420, 106, 258, 259, 260, 261, 262, - /* 450 */ 263, 264, 454, 455, 97, 163, 164, 0, 20, 20, - /* 460 */ 96, 169, 170, 252, 253, 254, 24, 25, 26, 27, - /* 470 */ 28, 29, 30, 31, 32, 14, 184, 21, 186, 8, - /* 480 */ 9, 20, 118, 12, 13, 14, 15, 16, 465, 466, - /* 490 */ 34, 20, 36, 14, 15, 16, 372, 133, 134, 375, - /* 500 */ 394, 209, 210, 0, 212, 213, 214, 215, 216, 217, - /* 510 */ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - /* 520 */ 228, 229, 3, 66, 67, 68, 107, 163, 164, 362, - /* 530 */ 339, 74, 75, 169, 170, 96, 79, 14, 371, 20, - /* 540 */ 345, 84, 85, 20, 353, 439, 362, 90, 184, 443, - /* 550 */ 186, 360, 362, 369, 359, 331, 394, 231, 354, 369, - /* 560 */ 398, 370, 378, 368, 458, 459, 362, 71, 378, 463, - /* 570 */ 464, 133, 134, 209, 210, 371, 212, 213, 214, 215, - /* 580 */ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - /* 590 */ 226, 227, 228, 229, 12, 13, 80, 22, 339, 375, - /* 600 */ 372, 439, 20, 375, 22, 443, 107, 169, 170, 339, - /* 610 */ 35, 108, 353, 339, 339, 33, 97, 35, 20, 331, - /* 620 */ 458, 459, 96, 439, 163, 463, 464, 443, 353, 370, - /* 630 */ 127, 128, 129, 130, 131, 132, 165, 339, 339, 107, - /* 640 */ 58, 331, 458, 459, 331, 370, 71, 463, 464, 379, - /* 650 */ 362, 353, 353, 71, 138, 139, 157, 362, 370, 179, - /* 660 */ 386, 96, 388, 375, 369, 377, 12, 13, 370, 370, - /* 670 */ 362, 339, 394, 378, 20, 362, 22, 161, 96, 361, - /* 680 */ 200, 201, 339, 370, 165, 375, 378, 33, 375, 35, - /* 690 */ 377, 71, 374, 118, 406, 4, 353, 231, 410, 233, - /* 700 */ 118, 413, 414, 415, 416, 417, 418, 0, 420, 183, - /* 710 */ 19, 185, 58, 370, 128, 133, 134, 439, 386, 406, - /* 720 */ 388, 443, 363, 410, 33, 71, 413, 414, 415, 416, - /* 730 */ 417, 418, 372, 420, 208, 375, 458, 459, 331, 48, - /* 740 */ 339, 463, 464, 455, 53, 163, 164, 363, 339, 58, - /* 750 */ 96, 169, 170, 58, 353, 48, 66, 67, 68, 184, - /* 760 */ 362, 186, 353, 165, 74, 75, 184, 369, 186, 79, - /* 770 */ 457, 370, 118, 247, 84, 85, 378, 191, 192, 370, - /* 780 */ 90, 195, 375, 197, 209, 210, 95, 133, 134, 98, - /* 790 */ 95, 209, 210, 98, 212, 213, 214, 215, 216, 217, - /* 800 */ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - /* 810 */ 228, 229, 247, 18, 20, 20, 412, 163, 164, 376, - /* 820 */ 377, 331, 27, 169, 170, 30, 8, 9, 33, 33, - /* 830 */ 12, 13, 14, 15, 16, 412, 108, 363, 184, 0, - /* 840 */ 186, 331, 438, 48, 48, 50, 348, 349, 53, 363, - /* 850 */ 54, 55, 56, 57, 58, 127, 128, 129, 130, 131, - /* 860 */ 132, 438, 44, 209, 210, 375, 212, 213, 214, 215, - /* 870 */ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - /* 880 */ 226, 227, 228, 229, 20, 375, 2, 354, 348, 349, - /* 890 */ 95, 95, 8, 9, 98, 362, 12, 13, 14, 15, - /* 900 */ 16, 0, 107, 165, 371, 66, 67, 68, 69, 70, - /* 910 */ 172, 72, 73, 74, 75, 76, 77, 78, 79, 80, - /* 920 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 930 */ 91, 92, 137, 363, 331, 140, 141, 142, 143, 144, - /* 940 */ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - /* 950 */ 155, 156, 19, 158, 159, 160, 18, 355, 364, 165, - /* 960 */ 358, 23, 166, 167, 63, 362, 33, 171, 331, 375, - /* 970 */ 174, 339, 424, 370, 426, 37, 38, 394, 375, 41, - /* 980 */ 377, 48, 370, 331, 354, 353, 190, 54, 55, 56, - /* 990 */ 57, 58, 362, 381, 339, 0, 3, 59, 60, 61, - /* 1000 */ 62, 371, 370, 409, 410, 411, 331, 331, 353, 406, - /* 1010 */ 127, 39, 375, 410, 420, 4, 413, 414, 415, 416, - /* 1020 */ 417, 418, 439, 420, 339, 370, 443, 375, 95, 165, - /* 1030 */ 427, 98, 362, 0, 96, 432, 44, 362, 353, 369, - /* 1040 */ 339, 458, 459, 339, 339, 370, 463, 464, 378, 339, - /* 1050 */ 375, 375, 377, 331, 353, 370, 339, 353, 353, 1, - /* 1060 */ 2, 8, 9, 353, 131, 12, 13, 14, 15, 16, - /* 1070 */ 353, 370, 108, 135, 370, 370, 193, 194, 331, 363, - /* 1080 */ 370, 406, 424, 331, 426, 410, 44, 370, 413, 414, - /* 1090 */ 415, 416, 417, 418, 130, 420, 63, 375, 399, 166, - /* 1100 */ 425, 370, 427, 332, 171, 331, 431, 432, 331, 362, - /* 1110 */ 331, 350, 381, 352, 176, 177, 178, 370, 44, 181, - /* 1120 */ 445, 188, 375, 190, 377, 8, 9, 375, 453, 12, - /* 1130 */ 13, 14, 15, 16, 45, 46, 331, 199, 331, 331, - /* 1140 */ 202, 58, 204, 205, 206, 207, 208, 152, 100, 375, - /* 1150 */ 97, 103, 375, 406, 375, 97, 161, 410, 331, 331, - /* 1160 */ 413, 414, 415, 416, 417, 418, 331, 420, 331, 362, - /* 1170 */ 423, 97, 425, 426, 427, 245, 246, 370, 431, 432, - /* 1180 */ 375, 98, 375, 375, 377, 247, 370, 8, 9, 0, - /* 1190 */ 44, 12, 13, 14, 15, 16, 22, 381, 331, 42, - /* 1200 */ 64, 44, 375, 375, 42, 100, 44, 351, 103, 35, - /* 1210 */ 375, 100, 375, 406, 103, 44, 44, 410, 246, 364, - /* 1220 */ 413, 414, 415, 416, 417, 418, 44, 420, 100, 362, - /* 1230 */ 375, 103, 425, 35, 427, 0, 0, 370, 431, 432, - /* 1240 */ 133, 134, 375, 97, 377, 0, 47, 331, 8, 9, - /* 1250 */ 44, 44, 12, 13, 14, 15, 16, 22, 22, 248, - /* 1260 */ 453, 268, 270, 385, 409, 410, 411, 22, 97, 97, - /* 1270 */ 44, 44, 44, 406, 44, 420, 35, 410, 362, 97, - /* 1280 */ 413, 414, 415, 416, 417, 418, 370, 420, 1, 2, - /* 1290 */ 0, 375, 425, 377, 427, 96, 44, 108, 431, 432, - /* 1300 */ 467, 44, 44, 97, 97, 456, 44, 331, 341, 442, - /* 1310 */ 44, 44, 44, 13, 272, 44, 127, 128, 129, 130, - /* 1320 */ 131, 132, 406, 97, 97, 97, 410, 97, 13, 413, - /* 1330 */ 414, 415, 416, 417, 418, 35, 420, 35, 362, 49, - /* 1340 */ 450, 425, 362, 427, 165, 209, 370, 431, 432, 97, - /* 1350 */ 35, 375, 338, 377, 97, 97, 341, 374, 442, 97, - /* 1360 */ 385, 441, 385, 97, 97, 97, 331, 460, 97, 433, - /* 1370 */ 444, 249, 48, 71, 408, 407, 182, 396, 42, 382, - /* 1380 */ 20, 385, 406, 382, 186, 162, 410, 380, 20, 413, - /* 1390 */ 414, 415, 416, 417, 418, 339, 420, 362, 339, 382, - /* 1400 */ 380, 425, 380, 427, 339, 370, 94, 431, 432, 347, - /* 1410 */ 375, 339, 377, 333, 339, 339, 176, 20, 442, 333, - /* 1420 */ 20, 20, 401, 345, 377, 331, 345, 186, 20, 20, - /* 1430 */ 340, 395, 345, 340, 52, 339, 345, 345, 375, 333, - /* 1440 */ 345, 406, 345, 342, 342, 410, 362, 362, 413, 414, - /* 1450 */ 415, 416, 417, 418, 339, 420, 362, 333, 198, 405, - /* 1460 */ 425, 362, 427, 375, 370, 362, 431, 432, 96, 375, - /* 1470 */ 362, 377, 362, 403, 362, 362, 362, 442, 362, 400, - /* 1480 */ 362, 343, 12, 13, 343, 331, 189, 339, 257, 385, - /* 1490 */ 449, 452, 22, 256, 385, 375, 377, 265, 375, 401, - /* 1500 */ 406, 449, 375, 33, 410, 35, 375, 413, 414, 415, - /* 1510 */ 416, 417, 418, 273, 420, 390, 362, 331, 175, 425, - /* 1520 */ 390, 427, 451, 267, 370, 431, 432, 266, 58, 375, - /* 1530 */ 448, 377, 250, 274, 468, 271, 442, 246, 269, 462, - /* 1540 */ 408, 71, 20, 370, 339, 331, 412, 343, 362, 449, - /* 1550 */ 340, 343, 20, 388, 390, 375, 370, 390, 375, 375, - /* 1560 */ 406, 375, 375, 377, 410, 375, 375, 413, 414, 415, - /* 1570 */ 416, 417, 418, 447, 420, 446, 362, 167, 358, 425, - /* 1580 */ 387, 427, 461, 370, 370, 431, 432, 343, 118, 375, - /* 1590 */ 343, 377, 406, 96, 96, 366, 410, 375, 430, 413, - /* 1600 */ 414, 415, 416, 417, 418, 352, 420, 36, 343, 339, - /* 1610 */ 334, 425, 333, 427, 397, 391, 391, 431, 432, 356, - /* 1620 */ 406, 402, 344, 329, 410, 0, 331, 413, 414, 415, - /* 1630 */ 416, 417, 418, 356, 420, 0, 356, 0, 42, 425, - /* 1640 */ 0, 427, 35, 203, 35, 431, 432, 35, 35, 203, - /* 1650 */ 0, 35, 35, 203, 184, 0, 186, 362, 203, 0, - /* 1660 */ 0, 35, 0, 22, 35, 370, 191, 186, 184, 0, - /* 1670 */ 375, 0, 377, 0, 180, 331, 0, 0, 179, 209, - /* 1680 */ 210, 47, 0, 0, 0, 42, 0, 0, 0, 0, - /* 1690 */ 0, 0, 222, 223, 224, 225, 226, 227, 228, 0, - /* 1700 */ 0, 406, 152, 35, 0, 410, 362, 152, 413, 414, - /* 1710 */ 415, 416, 417, 418, 370, 420, 0, 0, 0, 375, - /* 1720 */ 0, 377, 427, 0, 331, 0, 431, 432, 0, 0, - /* 1730 */ 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, - /* 1740 */ 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - /* 1750 */ 406, 136, 0, 0, 410, 362, 58, 413, 414, 415, - /* 1760 */ 416, 417, 418, 370, 420, 0, 58, 0, 375, 58, - /* 1770 */ 377, 427, 0, 331, 0, 431, 432, 14, 14, 0, - /* 1780 */ 42, 35, 0, 0, 0, 175, 0, 0, 0, 39, - /* 1790 */ 0, 65, 331, 0, 0, 44, 40, 35, 39, 406, - /* 1800 */ 39, 47, 47, 410, 362, 47, 413, 414, 415, 416, - /* 1810 */ 417, 418, 370, 420, 48, 39, 35, 375, 48, 377, - /* 1820 */ 427, 0, 0, 362, 431, 432, 48, 35, 367, 0, - /* 1830 */ 39, 370, 35, 48, 39, 39, 375, 0, 377, 0, - /* 1840 */ 0, 331, 35, 0, 35, 22, 35, 35, 406, 35, - /* 1850 */ 44, 35, 410, 35, 44, 413, 414, 415, 416, 417, - /* 1860 */ 418, 331, 420, 22, 0, 105, 35, 406, 22, 0, - /* 1870 */ 22, 410, 362, 0, 413, 414, 415, 416, 417, 418, - /* 1880 */ 370, 420, 22, 103, 50, 375, 35, 377, 0, 35, - /* 1890 */ 0, 35, 362, 0, 22, 20, 35, 367, 35, 196, - /* 1900 */ 370, 97, 0, 35, 96, 375, 0, 377, 466, 96, - /* 1910 */ 0, 22, 0, 96, 187, 44, 406, 251, 331, 255, - /* 1920 */ 410, 97, 165, 413, 414, 415, 416, 417, 418, 3, - /* 1930 */ 420, 96, 422, 165, 331, 230, 406, 3, 165, 97, - /* 1940 */ 410, 172, 167, 413, 414, 415, 416, 417, 418, 362, - /* 1950 */ 420, 44, 331, 44, 367, 97, 97, 370, 44, 44, - /* 1960 */ 47, 172, 375, 96, 377, 362, 96, 47, 44, 47, - /* 1970 */ 96, 173, 96, 370, 97, 97, 35, 35, 375, 35, - /* 1980 */ 377, 35, 35, 362, 35, 47, 0, 44, 97, 97, - /* 1990 */ 0, 370, 0, 406, 0, 96, 375, 410, 377, 39, - /* 2000 */ 413, 414, 415, 416, 417, 418, 47, 420, 97, 406, - /* 2010 */ 0, 331, 96, 410, 97, 96, 413, 414, 415, 416, - /* 2020 */ 417, 418, 245, 420, 96, 168, 96, 406, 331, 96, - /* 2030 */ 39, 410, 166, 106, 413, 414, 415, 416, 417, 418, - /* 2040 */ 47, 420, 362, 2, 44, 331, 22, 232, 96, 230, - /* 2050 */ 370, 251, 251, 209, 97, 375, 230, 377, 96, 362, - /* 2060 */ 97, 96, 47, 97, 96, 96, 47, 370, 97, 22, - /* 2070 */ 97, 96, 375, 35, 377, 35, 362, 107, 96, 35, - /* 2080 */ 97, 96, 22, 35, 370, 97, 406, 35, 35, 375, - /* 2090 */ 410, 377, 96, 413, 414, 415, 416, 417, 418, 97, - /* 2100 */ 420, 96, 331, 406, 97, 211, 44, 410, 96, 120, - /* 2110 */ 413, 414, 415, 416, 417, 418, 108, 420, 120, 96, - /* 2120 */ 406, 120, 96, 120, 410, 35, 96, 413, 414, 415, - /* 2130 */ 416, 417, 418, 362, 420, 22, 331, 65, 64, 35, - /* 2140 */ 35, 370, 35, 35, 35, 35, 375, 35, 377, 35, - /* 2150 */ 35, 35, 71, 35, 93, 44, 35, 35, 22, 35, - /* 2160 */ 35, 35, 71, 331, 35, 35, 35, 362, 35, 35, - /* 2170 */ 22, 0, 35, 35, 39, 370, 48, 406, 0, 35, - /* 2180 */ 375, 410, 377, 0, 413, 414, 415, 416, 417, 418, - /* 2190 */ 48, 420, 39, 331, 362, 35, 39, 0, 48, 35, - /* 2200 */ 48, 39, 370, 0, 35, 35, 0, 375, 22, 377, - /* 2210 */ 21, 406, 331, 22, 22, 410, 21, 469, 413, 414, - /* 2220 */ 415, 416, 417, 418, 362, 420, 469, 20, 469, 469, - /* 2230 */ 469, 469, 370, 469, 469, 469, 469, 375, 406, 377, - /* 2240 */ 469, 469, 410, 362, 469, 413, 414, 415, 416, 417, - /* 2250 */ 418, 370, 420, 469, 469, 469, 375, 469, 377, 469, - /* 2260 */ 469, 469, 469, 469, 469, 469, 469, 469, 406, 469, - /* 2270 */ 469, 469, 410, 469, 469, 413, 414, 415, 416, 417, - /* 2280 */ 418, 331, 420, 469, 469, 469, 469, 406, 469, 469, - /* 2290 */ 469, 410, 469, 469, 413, 414, 415, 416, 417, 418, - /* 2300 */ 469, 420, 469, 469, 469, 331, 469, 469, 469, 469, - /* 2310 */ 469, 469, 362, 469, 469, 469, 469, 469, 469, 469, - /* 2320 */ 370, 469, 469, 469, 469, 375, 469, 377, 469, 469, - /* 2330 */ 331, 469, 469, 469, 469, 469, 362, 469, 469, 469, - /* 2340 */ 469, 469, 469, 469, 370, 469, 469, 469, 469, 375, - /* 2350 */ 469, 377, 469, 469, 469, 469, 406, 469, 469, 469, - /* 2360 */ 410, 362, 469, 413, 414, 415, 416, 417, 418, 370, - /* 2370 */ 420, 469, 469, 469, 375, 469, 377, 469, 469, 469, - /* 2380 */ 406, 469, 469, 469, 410, 469, 469, 413, 414, 415, - /* 2390 */ 416, 417, 418, 469, 420, 469, 469, 469, 469, 331, - /* 2400 */ 469, 469, 469, 469, 469, 406, 469, 469, 469, 410, - /* 2410 */ 469, 469, 413, 414, 415, 416, 417, 418, 331, 420, - /* 2420 */ 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2430 */ 362, 469, 469, 469, 469, 469, 469, 469, 370, 469, - /* 2440 */ 469, 469, 469, 375, 469, 377, 469, 469, 469, 362, - /* 2450 */ 469, 469, 469, 469, 469, 469, 469, 370, 469, 469, - /* 2460 */ 469, 469, 375, 469, 377, 469, 469, 469, 469, 469, - /* 2470 */ 469, 469, 469, 469, 406, 469, 469, 469, 410, 469, - /* 2480 */ 331, 413, 414, 415, 416, 417, 418, 469, 420, 469, - /* 2490 */ 469, 469, 469, 406, 469, 469, 469, 410, 469, 331, - /* 2500 */ 413, 414, 415, 416, 417, 418, 469, 420, 469, 469, - /* 2510 */ 469, 362, 469, 469, 469, 469, 469, 469, 469, 370, - /* 2520 */ 469, 469, 469, 469, 375, 469, 377, 469, 469, 469, - /* 2530 */ 362, 469, 469, 469, 469, 469, 469, 469, 370, 469, - /* 2540 */ 469, 469, 469, 375, 469, 377, 469, 469, 469, 469, - /* 2550 */ 469, 469, 469, 469, 469, 406, 331, 469, 469, 410, - /* 2560 */ 469, 469, 413, 414, 415, 416, 417, 418, 469, 420, - /* 2570 */ 469, 469, 469, 469, 406, 331, 469, 469, 410, 469, - /* 2580 */ 469, 413, 414, 415, 416, 417, 418, 362, 420, 469, - /* 2590 */ 469, 469, 469, 469, 469, 370, 469, 469, 469, 469, - /* 2600 */ 375, 469, 377, 469, 469, 469, 362, 469, 469, 469, - /* 2610 */ 469, 469, 469, 469, 370, 469, 469, 469, 469, 375, - /* 2620 */ 469, 377, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2630 */ 469, 406, 469, 469, 469, 410, 469, 331, 413, 414, - /* 2640 */ 415, 416, 417, 418, 469, 420, 469, 469, 469, 469, - /* 2650 */ 406, 469, 469, 469, 410, 469, 469, 413, 414, 415, - /* 2660 */ 416, 417, 418, 469, 420, 469, 469, 469, 362, 469, - /* 2670 */ 469, 469, 469, 469, 469, 469, 370, 469, 469, 469, - /* 2680 */ 469, 375, 469, 377, 469, 469, 469, 469, 469, 469, - /* 2690 */ 469, 469, 469, 469, 469, 469, 331, 469, 469, 469, - /* 2700 */ 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2710 */ 469, 469, 406, 469, 469, 469, 410, 469, 469, 413, - /* 2720 */ 414, 415, 416, 417, 418, 469, 420, 362, 469, 469, - /* 2730 */ 469, 469, 469, 469, 469, 370, 469, 469, 469, 469, - /* 2740 */ 375, 469, 377, 469, 469, 331, 469, 469, 469, 469, - /* 2750 */ 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2760 */ 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2770 */ 469, 406, 469, 469, 469, 410, 362, 469, 413, 414, - /* 2780 */ 415, 416, 417, 418, 370, 420, 469, 469, 469, 375, - /* 2790 */ 469, 377, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2800 */ 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2810 */ 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - /* 2820 */ 406, 469, 469, 469, 410, 469, 469, 413, 414, 415, - /* 2830 */ 416, 417, 418, 469, 420, + /* 300 */ 228, 229, 230, 364, 232, 12, 13, 12, 13, 14, + /* 310 */ 15, 16, 20, 20, 375, 22, 99, 19, 101, 102, + /* 320 */ 71, 104, 253, 254, 255, 108, 33, 20, 35, 336, + /* 330 */ 331, 33, 339, 340, 339, 428, 429, 8, 9, 273, + /* 340 */ 179, 12, 13, 14, 15, 16, 48, 130, 409, 410, + /* 350 */ 411, 58, 54, 55, 56, 57, 58, 64, 345, 420, + /* 360 */ 14, 362, 201, 202, 71, 370, 20, 107, 183, 370, + /* 370 */ 185, 412, 359, 20, 375, 22, 377, 12, 13, 14, + /* 380 */ 20, 368, 3, 248, 232, 20, 234, 22, 96, 96, + /* 390 */ 127, 128, 4, 95, 209, 132, 98, 438, 33, 20, + /* 400 */ 35, 424, 163, 426, 51, 406, 0, 339, 331, 410, + /* 410 */ 339, 118, 413, 414, 415, 416, 417, 418, 0, 420, + /* 420 */ 248, 353, 372, 58, 353, 375, 133, 134, 360, 131, + /* 430 */ 435, 436, 437, 248, 439, 440, 71, 339, 370, 21, + /* 440 */ 232, 370, 24, 25, 26, 27, 28, 29, 30, 31, + /* 450 */ 32, 353, 375, 454, 455, 58, 163, 164, 360, 362, + /* 460 */ 343, 96, 169, 170, 166, 424, 369, 426, 370, 171, + /* 470 */ 163, 164, 66, 67, 68, 378, 97, 184, 47, 186, + /* 480 */ 74, 75, 365, 118, 96, 79, 188, 80, 190, 0, + /* 490 */ 84, 85, 95, 133, 134, 98, 90, 127, 133, 134, + /* 500 */ 376, 377, 20, 210, 211, 176, 213, 214, 215, 216, + /* 510 */ 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + /* 520 */ 227, 228, 229, 230, 66, 67, 68, 96, 163, 164, + /* 530 */ 0, 362, 74, 75, 169, 170, 339, 79, 369, 339, + /* 540 */ 248, 20, 84, 85, 165, 138, 139, 378, 90, 184, + /* 550 */ 353, 186, 339, 353, 24, 25, 26, 27, 28, 29, + /* 560 */ 30, 31, 32, 193, 194, 394, 35, 370, 161, 398, + /* 570 */ 370, 14, 15, 16, 331, 210, 211, 339, 213, 214, + /* 580 */ 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + /* 590 */ 225, 226, 227, 228, 229, 230, 12, 13, 35, 386, + /* 600 */ 370, 388, 71, 274, 20, 362, 22, 339, 439, 339, + /* 610 */ 439, 381, 443, 370, 443, 133, 134, 33, 375, 35, + /* 620 */ 377, 353, 33, 353, 386, 96, 388, 458, 459, 458, + /* 630 */ 459, 96, 463, 464, 463, 464, 248, 48, 370, 331, + /* 640 */ 370, 152, 58, 54, 55, 56, 57, 58, 339, 406, + /* 650 */ 161, 169, 170, 410, 210, 71, 413, 414, 415, 416, + /* 660 */ 417, 418, 353, 420, 22, 354, 14, 331, 12, 13, + /* 670 */ 427, 20, 20, 362, 431, 432, 20, 35, 22, 370, + /* 680 */ 96, 4, 371, 375, 95, 331, 165, 98, 71, 33, + /* 690 */ 331, 35, 423, 8, 9, 426, 19, 12, 13, 14, + /* 700 */ 15, 16, 118, 259, 260, 261, 262, 263, 264, 265, + /* 710 */ 33, 375, 362, 364, 58, 8, 9, 133, 134, 12, + /* 720 */ 13, 14, 15, 16, 375, 48, 2, 71, 378, 375, + /* 730 */ 53, 0, 8, 9, 375, 58, 12, 13, 14, 15, + /* 740 */ 16, 331, 439, 331, 331, 162, 443, 163, 164, 186, + /* 750 */ 339, 44, 96, 169, 170, 166, 167, 107, 409, 410, + /* 760 */ 171, 458, 459, 174, 353, 363, 463, 464, 184, 420, + /* 770 */ 186, 362, 95, 331, 118, 98, 362, 248, 331, 190, + /* 780 */ 371, 370, 97, 248, 370, 375, 358, 375, 375, 133, + /* 790 */ 134, 331, 1, 2, 210, 211, 71, 213, 214, 215, + /* 800 */ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + /* 810 */ 226, 227, 228, 229, 230, 163, 165, 375, 235, 163, + /* 820 */ 164, 18, 375, 20, 108, 169, 170, 128, 245, 415, + /* 830 */ 27, 345, 404, 30, 362, 375, 33, 45, 46, 108, + /* 840 */ 184, 369, 186, 127, 128, 129, 130, 131, 132, 331, + /* 850 */ 378, 48, 20, 50, 368, 0, 53, 370, 127, 128, + /* 860 */ 129, 130, 131, 132, 348, 349, 210, 211, 381, 213, + /* 870 */ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + /* 880 */ 224, 225, 226, 227, 228, 229, 230, 354, 97, 399, + /* 890 */ 191, 192, 18, 375, 195, 362, 197, 23, 95, 0, + /* 900 */ 339, 8, 9, 0, 371, 12, 13, 14, 15, 16, + /* 910 */ 107, 37, 38, 363, 353, 41, 331, 39, 63, 8, + /* 920 */ 9, 362, 354, 12, 13, 14, 15, 16, 369, 355, + /* 930 */ 362, 370, 358, 59, 60, 61, 62, 378, 412, 371, + /* 940 */ 137, 348, 349, 140, 141, 142, 143, 144, 145, 146, + /* 950 */ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + /* 960 */ 375, 158, 159, 160, 438, 66, 67, 68, 69, 70, + /* 970 */ 96, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 980 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + /* 990 */ 91, 92, 339, 339, 331, 8, 9, 165, 394, 12, + /* 1000 */ 13, 14, 15, 16, 22, 339, 353, 353, 97, 135, + /* 1010 */ 331, 108, 3, 339, 339, 339, 4, 35, 350, 353, + /* 1020 */ 352, 331, 331, 370, 370, 331, 331, 353, 353, 353, + /* 1030 */ 127, 128, 129, 130, 131, 132, 370, 370, 375, 108, + /* 1040 */ 42, 362, 44, 439, 370, 370, 370, 443, 381, 370, + /* 1050 */ 176, 177, 178, 71, 375, 181, 377, 339, 165, 331, + /* 1060 */ 412, 130, 458, 459, 44, 375, 375, 463, 464, 375, + /* 1070 */ 375, 353, 372, 364, 200, 375, 20, 203, 107, 205, + /* 1080 */ 206, 207, 208, 209, 375, 406, 438, 58, 370, 410, + /* 1090 */ 362, 364, 413, 414, 415, 416, 417, 418, 370, 420, + /* 1100 */ 118, 44, 375, 375, 425, 377, 427, 246, 247, 339, + /* 1110 */ 431, 432, 372, 0, 42, 375, 44, 97, 409, 410, + /* 1120 */ 411, 339, 248, 353, 445, 247, 331, 98, 157, 420, + /* 1130 */ 394, 363, 453, 44, 406, 353, 409, 410, 410, 363, + /* 1140 */ 370, 413, 414, 415, 416, 417, 418, 420, 420, 339, + /* 1150 */ 44, 423, 370, 425, 426, 427, 363, 362, 331, 431, + /* 1160 */ 432, 48, 0, 353, 100, 370, 184, 103, 186, 0, + /* 1170 */ 375, 100, 377, 100, 103, 439, 103, 44, 100, 443, + /* 1180 */ 370, 103, 44, 44, 22, 196, 97, 198, 64, 362, + /* 1190 */ 332, 22, 210, 211, 458, 459, 0, 370, 363, 463, + /* 1200 */ 464, 406, 375, 97, 377, 410, 35, 331, 413, 414, + /* 1210 */ 415, 416, 417, 418, 165, 420, 133, 134, 22, 163, + /* 1220 */ 425, 172, 427, 44, 44, 0, 431, 432, 44, 385, + /* 1230 */ 97, 44, 44, 406, 44, 97, 97, 410, 362, 351, + /* 1240 */ 413, 414, 415, 416, 417, 418, 370, 420, 453, 1, + /* 1250 */ 2, 375, 425, 377, 427, 96, 44, 394, 431, 432, + /* 1260 */ 44, 249, 44, 44, 44, 106, 331, 467, 456, 442, + /* 1270 */ 341, 44, 44, 13, 49, 450, 97, 97, 269, 44, + /* 1280 */ 362, 97, 406, 341, 97, 97, 410, 97, 338, 413, + /* 1290 */ 414, 415, 416, 417, 418, 35, 420, 362, 13, 385, + /* 1300 */ 331, 425, 439, 427, 374, 370, 443, 431, 432, 97, + /* 1310 */ 375, 385, 377, 97, 441, 97, 97, 97, 442, 460, + /* 1320 */ 35, 458, 459, 433, 97, 97, 463, 464, 271, 444, + /* 1330 */ 250, 362, 97, 408, 210, 48, 182, 396, 42, 370, + /* 1340 */ 407, 406, 382, 20, 375, 410, 377, 385, 413, 414, + /* 1350 */ 415, 416, 417, 418, 382, 420, 162, 186, 380, 20, + /* 1360 */ 425, 339, 427, 339, 380, 382, 431, 432, 380, 339, + /* 1370 */ 94, 339, 347, 331, 339, 406, 339, 442, 20, 410, + /* 1380 */ 333, 333, 413, 414, 415, 416, 417, 418, 20, 420, + /* 1390 */ 345, 401, 12, 13, 425, 20, 427, 345, 377, 20, + /* 1400 */ 431, 432, 22, 340, 362, 20, 395, 345, 340, 339, + /* 1410 */ 345, 442, 370, 33, 345, 35, 52, 375, 333, 377, + /* 1420 */ 345, 345, 331, 342, 342, 339, 333, 96, 362, 362, + /* 1430 */ 375, 199, 405, 375, 403, 401, 362, 343, 58, 362, + /* 1440 */ 189, 362, 343, 400, 339, 385, 362, 258, 406, 362, + /* 1450 */ 362, 71, 410, 362, 362, 413, 414, 415, 416, 417, + /* 1460 */ 418, 370, 420, 362, 362, 449, 375, 425, 377, 427, + /* 1470 */ 257, 375, 377, 431, 432, 385, 266, 449, 375, 375, + /* 1480 */ 175, 267, 375, 268, 442, 452, 331, 390, 390, 451, + /* 1490 */ 449, 251, 448, 447, 468, 370, 446, 406, 118, 275, + /* 1500 */ 461, 410, 272, 270, 413, 414, 415, 416, 417, 418, + /* 1510 */ 247, 420, 20, 462, 339, 343, 425, 362, 427, 408, + /* 1520 */ 412, 340, 431, 432, 20, 370, 343, 390, 388, 167, + /* 1530 */ 375, 375, 377, 375, 390, 375, 375, 387, 375, 375, + /* 1540 */ 343, 343, 96, 358, 370, 430, 96, 352, 366, 343, + /* 1550 */ 339, 375, 36, 402, 331, 334, 356, 391, 391, 333, + /* 1560 */ 356, 406, 397, 356, 184, 410, 186, 329, 413, 414, + /* 1570 */ 415, 416, 417, 418, 0, 420, 0, 0, 344, 42, + /* 1580 */ 425, 0, 427, 35, 331, 362, 431, 432, 204, 35, + /* 1590 */ 210, 211, 35, 370, 35, 204, 0, 35, 375, 35, + /* 1600 */ 377, 204, 0, 223, 224, 225, 226, 227, 228, 229, + /* 1610 */ 204, 0, 0, 35, 331, 362, 22, 0, 191, 35, + /* 1620 */ 186, 184, 0, 370, 0, 0, 0, 180, 375, 406, + /* 1630 */ 377, 179, 0, 410, 47, 0, 413, 414, 415, 416, + /* 1640 */ 417, 418, 0, 420, 331, 362, 0, 42, 425, 0, + /* 1650 */ 427, 0, 0, 370, 431, 432, 0, 0, 375, 406, + /* 1660 */ 377, 0, 0, 410, 152, 35, 413, 414, 415, 416, + /* 1670 */ 417, 418, 0, 420, 0, 362, 152, 0, 331, 0, + /* 1680 */ 427, 0, 0, 370, 431, 432, 0, 0, 375, 406, + /* 1690 */ 377, 0, 0, 410, 0, 0, 413, 414, 415, 416, + /* 1700 */ 417, 418, 0, 420, 0, 331, 0, 0, 0, 362, + /* 1710 */ 427, 0, 42, 0, 431, 432, 0, 370, 0, 406, + /* 1720 */ 0, 0, 375, 410, 377, 0, 413, 414, 415, 416, + /* 1730 */ 417, 418, 22, 420, 0, 0, 362, 0, 0, 136, + /* 1740 */ 0, 0, 58, 0, 370, 0, 58, 35, 58, 375, + /* 1750 */ 0, 377, 47, 406, 331, 0, 42, 410, 39, 44, + /* 1760 */ 413, 414, 415, 416, 417, 418, 0, 420, 14, 47, + /* 1770 */ 14, 47, 40, 0, 0, 39, 0, 0, 465, 466, + /* 1780 */ 406, 39, 175, 0, 410, 362, 0, 413, 414, 415, + /* 1790 */ 416, 417, 418, 370, 420, 65, 0, 0, 375, 35, + /* 1800 */ 377, 427, 455, 0, 39, 48, 432, 35, 48, 39, + /* 1810 */ 0, 48, 0, 35, 39, 35, 331, 48, 0, 0, + /* 1820 */ 39, 0, 0, 35, 22, 0, 35, 35, 105, 406, + /* 1830 */ 103, 44, 0, 410, 35, 35, 413, 414, 415, 416, + /* 1840 */ 417, 418, 44, 420, 35, 22, 35, 362, 331, 35, + /* 1850 */ 22, 0, 22, 0, 50, 370, 22, 0, 0, 35, + /* 1860 */ 375, 35, 377, 0, 35, 22, 20, 96, 35, 0, + /* 1870 */ 35, 35, 35, 0, 165, 0, 22, 0, 96, 362, + /* 1880 */ 457, 97, 165, 187, 367, 3, 44, 370, 252, 96, + /* 1890 */ 96, 406, 375, 167, 377, 410, 165, 331, 413, 414, + /* 1900 */ 415, 416, 417, 418, 97, 420, 173, 231, 44, 256, + /* 1910 */ 97, 172, 44, 97, 331, 44, 172, 97, 252, 47, + /* 1920 */ 44, 47, 3, 406, 97, 252, 35, 410, 362, 44, + /* 1930 */ 413, 414, 415, 416, 417, 418, 370, 420, 97, 35, + /* 1940 */ 96, 375, 35, 377, 96, 362, 331, 35, 96, 35, + /* 1950 */ 367, 466, 96, 370, 44, 35, 97, 97, 375, 0, + /* 1960 */ 377, 0, 0, 47, 47, 0, 96, 39, 47, 0, + /* 1970 */ 39, 331, 406, 168, 246, 96, 410, 362, 44, 413, + /* 1980 */ 414, 415, 416, 417, 418, 370, 420, 97, 422, 406, + /* 1990 */ 375, 97, 377, 410, 106, 331, 413, 414, 415, 416, + /* 2000 */ 417, 418, 362, 420, 96, 96, 166, 367, 2, 96, + /* 2010 */ 370, 47, 22, 47, 96, 375, 231, 377, 210, 96, + /* 2020 */ 331, 406, 233, 97, 97, 410, 362, 97, 413, 414, + /* 2030 */ 415, 416, 417, 418, 370, 420, 96, 231, 96, 375, + /* 2040 */ 96, 377, 96, 212, 47, 97, 406, 22, 96, 35, + /* 2050 */ 410, 362, 107, 413, 414, 415, 416, 417, 418, 370, + /* 2060 */ 420, 35, 35, 96, 375, 97, 377, 97, 97, 96, + /* 2070 */ 406, 35, 96, 35, 410, 97, 96, 413, 414, 415, + /* 2080 */ 416, 417, 418, 331, 420, 97, 35, 96, 22, 96, + /* 2090 */ 108, 44, 35, 22, 120, 406, 96, 120, 96, 410, + /* 2100 */ 65, 120, 413, 414, 415, 416, 417, 418, 64, 420, + /* 2110 */ 331, 35, 120, 35, 362, 35, 35, 35, 35, 71, + /* 2120 */ 35, 35, 370, 35, 35, 93, 35, 375, 35, 377, + /* 2130 */ 35, 44, 331, 35, 22, 35, 35, 35, 71, 35, + /* 2140 */ 35, 362, 35, 35, 22, 35, 0, 48, 35, 370, + /* 2150 */ 0, 35, 0, 39, 375, 0, 377, 48, 406, 39, + /* 2160 */ 35, 0, 410, 362, 35, 413, 414, 415, 416, 417, + /* 2170 */ 418, 370, 420, 39, 48, 48, 375, 39, 377, 35, + /* 2180 */ 35, 0, 22, 21, 21, 406, 22, 22, 20, 410, + /* 2190 */ 469, 469, 413, 414, 415, 416, 417, 418, 469, 420, + /* 2200 */ 469, 469, 469, 469, 469, 469, 469, 406, 469, 469, + /* 2210 */ 469, 410, 331, 469, 413, 414, 415, 416, 417, 418, + /* 2220 */ 469, 420, 469, 469, 469, 469, 469, 469, 469, 331, + /* 2230 */ 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, + /* 2240 */ 469, 469, 469, 362, 469, 469, 331, 469, 469, 469, + /* 2250 */ 469, 370, 469, 469, 469, 469, 375, 469, 377, 469, + /* 2260 */ 362, 469, 469, 469, 469, 469, 469, 469, 370, 469, + /* 2270 */ 469, 469, 469, 375, 469, 377, 469, 362, 331, 469, + /* 2280 */ 469, 469, 469, 469, 469, 370, 469, 406, 469, 469, + /* 2290 */ 375, 410, 377, 469, 413, 414, 415, 416, 417, 418, + /* 2300 */ 469, 420, 469, 331, 406, 469, 469, 469, 410, 362, + /* 2310 */ 469, 413, 414, 415, 416, 417, 418, 370, 420, 469, + /* 2320 */ 469, 406, 375, 469, 377, 410, 469, 331, 413, 414, + /* 2330 */ 415, 416, 417, 418, 362, 420, 469, 469, 469, 469, + /* 2340 */ 469, 469, 370, 469, 469, 469, 469, 375, 469, 377, + /* 2350 */ 469, 469, 331, 406, 469, 469, 469, 410, 362, 469, + /* 2360 */ 413, 414, 415, 416, 417, 418, 370, 420, 469, 469, + /* 2370 */ 469, 375, 469, 377, 469, 469, 469, 469, 406, 469, + /* 2380 */ 469, 469, 410, 362, 469, 413, 414, 415, 416, 417, + /* 2390 */ 418, 370, 420, 469, 469, 469, 375, 469, 377, 469, + /* 2400 */ 469, 469, 406, 469, 469, 469, 410, 469, 469, 413, + /* 2410 */ 414, 415, 416, 417, 418, 331, 420, 469, 469, 469, + /* 2420 */ 469, 469, 469, 469, 469, 469, 469, 406, 469, 469, + /* 2430 */ 469, 410, 469, 469, 413, 414, 415, 416, 417, 418, + /* 2440 */ 469, 420, 331, 469, 469, 469, 362, 469, 469, 469, + /* 2450 */ 469, 469, 469, 469, 370, 469, 469, 469, 469, 375, + /* 2460 */ 469, 377, 469, 469, 331, 469, 469, 469, 469, 469, + /* 2470 */ 469, 469, 469, 362, 469, 469, 469, 469, 469, 469, + /* 2480 */ 469, 370, 469, 469, 469, 469, 375, 469, 377, 469, + /* 2490 */ 406, 469, 469, 469, 410, 362, 469, 413, 414, 415, + /* 2500 */ 416, 417, 418, 370, 420, 469, 469, 469, 375, 469, + /* 2510 */ 377, 469, 469, 469, 469, 469, 469, 406, 469, 469, + /* 2520 */ 469, 410, 469, 469, 413, 414, 415, 416, 417, 418, + /* 2530 */ 469, 420, 469, 469, 469, 469, 469, 469, 469, 406, + /* 2540 */ 469, 469, 469, 410, 331, 469, 413, 414, 415, 416, + /* 2550 */ 417, 418, 469, 420, 469, 469, 469, 469, 469, 469, + /* 2560 */ 469, 331, 469, 469, 469, 469, 469, 469, 469, 469, + /* 2570 */ 469, 469, 469, 469, 469, 362, 469, 469, 331, 469, + /* 2580 */ 469, 469, 469, 370, 469, 469, 469, 469, 375, 469, + /* 2590 */ 377, 469, 362, 469, 469, 469, 469, 469, 469, 469, + /* 2600 */ 370, 469, 469, 469, 469, 375, 469, 377, 469, 362, + /* 2610 */ 331, 469, 469, 469, 469, 469, 469, 370, 469, 406, + /* 2620 */ 469, 469, 375, 410, 377, 469, 413, 414, 415, 416, + /* 2630 */ 417, 418, 469, 420, 469, 331, 406, 469, 469, 469, + /* 2640 */ 410, 362, 469, 413, 414, 415, 416, 417, 418, 370, + /* 2650 */ 420, 469, 469, 406, 375, 469, 377, 410, 469, 331, + /* 2660 */ 413, 414, 415, 416, 417, 418, 362, 420, 469, 469, + /* 2670 */ 469, 469, 469, 469, 370, 469, 469, 469, 469, 375, + /* 2680 */ 469, 377, 469, 469, 469, 406, 469, 469, 469, 410, + /* 2690 */ 362, 469, 413, 414, 415, 416, 417, 418, 370, 420, + /* 2700 */ 469, 469, 469, 375, 469, 377, 469, 469, 469, 469, + /* 2710 */ 406, 469, 469, 469, 410, 469, 469, 413, 414, 415, + /* 2720 */ 416, 417, 418, 469, 420, 469, 469, 469, 469, 469, + /* 2730 */ 469, 469, 469, 469, 406, 469, 469, 469, 410, 469, + /* 2740 */ 469, 413, 414, 415, 416, 417, 418, 469, 420, }; -#define YY_SHIFT_COUNT (739) +#define YY_SHIFT_COUNT (740) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (2207) +#define YY_SHIFT_MAX (2181) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 938, 0, 72, 0, 292, 292, 292, 292, 292, 292, - /* 10 */ 292, 292, 292, 292, 292, 364, 582, 582, 654, 582, - /* 20 */ 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - /* 30 */ 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - /* 40 */ 582, 582, 582, 582, 582, 582, 582, 582, 115, 136, - /* 50 */ 526, 439, 33, 71, 565, 71, 439, 439, 1470, 1470, - /* 60 */ 1470, 71, 1470, 1470, 6, 71, 95, 438, 112, 112, - /* 70 */ 438, 378, 378, 217, 97, 523, 523, 112, 112, 112, - /* 80 */ 112, 112, 112, 112, 154, 112, 112, 135, 95, 112, - /* 90 */ 112, 296, 112, 95, 112, 154, 112, 154, 95, 112, - /* 100 */ 112, 95, 112, 95, 95, 95, 112, 346, 795, 34, - /* 110 */ 34, 219, 690, 575, 575, 575, 575, 575, 575, 575, - /* 120 */ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, - /* 130 */ 575, 575, 218, 519, 217, 97, 901, 331, 598, 598, - /* 140 */ 598, 1033, 466, 466, 331, 410, 410, 410, 419, 326, - /* 150 */ 95, 496, 95, 496, 496, 532, 620, 36, 36, 36, - /* 160 */ 36, 36, 36, 36, 36, 933, 315, 457, 471, 1240, - /* 170 */ 187, 18, 211, 25, 461, 232, 794, 1089, 964, 864, - /* 180 */ 930, 972, 993, 930, 1157, 1011, 70, 1122, 1324, 1194, - /* 190 */ 1336, 1360, 1336, 1223, 1368, 1368, 1336, 1223, 1223, 1368, - /* 200 */ 1312, 1368, 1368, 1368, 1397, 1397, 1400, 135, 1401, 135, - /* 210 */ 1408, 1409, 135, 1408, 135, 135, 135, 1368, 135, 1382, - /* 220 */ 1382, 1397, 95, 95, 95, 95, 95, 95, 95, 95, - /* 230 */ 95, 95, 95, 1368, 1397, 496, 496, 1260, 1372, 1400, - /* 240 */ 346, 1297, 1401, 346, 1368, 1360, 1360, 496, 1231, 1237, - /* 250 */ 496, 1231, 1237, 496, 496, 95, 1232, 1343, 1231, 1256, - /* 260 */ 1261, 1282, 1122, 1259, 1264, 1269, 1291, 410, 1522, 1368, - /* 270 */ 1408, 346, 346, 1532, 1237, 496, 496, 496, 496, 496, - /* 280 */ 1237, 496, 1410, 346, 532, 346, 410, 1497, 1498, 496, - /* 290 */ 620, 1368, 346, 1571, 1397, 2835, 2835, 2835, 2835, 2835, - /* 300 */ 2835, 2835, 2835, 2835, 839, 796, 442, 691, 47, 818, - /* 310 */ 1053, 503, 15, 884, 1179, 1189, 1117, 1117, 1117, 1117, - /* 320 */ 1117, 1117, 1117, 1117, 1117, 728, 586, 294, 294, 516, - /* 330 */ 480, 995, 695, 456, 883, 237, 237, 479, 1058, 77, - /* 340 */ 479, 479, 479, 707, 357, 1174, 1162, 499, 1048, 1105, - /* 350 */ 1111, 1128, 1235, 1236, 1245, 1074, 1146, 1083, 1171, 1172, - /* 360 */ 1182, 1107, 992, 1042, 738, 1206, 1207, 1226, 1227, 1228, - /* 370 */ 1230, 1287, 1252, 1198, 1241, 1136, 1257, 1199, 1258, 1262, - /* 380 */ 1266, 1267, 1268, 1271, 338, 1300, 1315, 1302, 1290, 1625, - /* 390 */ 1635, 1637, 1596, 1640, 1607, 1440, 1609, 1612, 1613, 1446, - /* 400 */ 1650, 1616, 1617, 1450, 1655, 1455, 1659, 1626, 1660, 1641, - /* 410 */ 1662, 1629, 1475, 1481, 1484, 1669, 1671, 1673, 1494, 1499, - /* 420 */ 1676, 1677, 1634, 1682, 1683, 1684, 1643, 1686, 1687, 1688, - /* 430 */ 1689, 1690, 1691, 1699, 1700, 1550, 1668, 1704, 1555, 1716, - /* 440 */ 1717, 1718, 1720, 1723, 1725, 1728, 1729, 1730, 1731, 1732, - /* 450 */ 1733, 1734, 1735, 1736, 1737, 1696, 1739, 1740, 1741, 1742, - /* 460 */ 1743, 1744, 1724, 1745, 1747, 1748, 1615, 1749, 1752, 1753, - /* 470 */ 1698, 1746, 1765, 1708, 1767, 1711, 1772, 1774, 1738, 1750, - /* 480 */ 1751, 1754, 1763, 1755, 1764, 1758, 1779, 1756, 1759, 1782, - /* 490 */ 1783, 1784, 1761, 1610, 1786, 1787, 1788, 1726, 1790, 1793, - /* 500 */ 1762, 1766, 1776, 1794, 1781, 1770, 1791, 1821, 1792, 1778, - /* 510 */ 1795, 1822, 1797, 1785, 1796, 1829, 1837, 1839, 1840, 1760, - /* 520 */ 1780, 1807, 1823, 1843, 1809, 1811, 1812, 1814, 1806, 1810, - /* 530 */ 1816, 1818, 1841, 1831, 1864, 1846, 1869, 1848, 1834, 1873, - /* 540 */ 1860, 1851, 1888, 1854, 1890, 1856, 1893, 1872, 1875, 1861, - /* 550 */ 1863, 1703, 1804, 1808, 1902, 1757, 1813, 1868, 1906, 1727, - /* 560 */ 1889, 1768, 1775, 1910, 1912, 1773, 1798, 1926, 1871, 1666, - /* 570 */ 1817, 1824, 1835, 1769, 1705, 1789, 1664, 1842, 1907, 1909, - /* 580 */ 1858, 1867, 1870, 1874, 1859, 1914, 1913, 1920, 1876, 1915, - /* 590 */ 1800, 1877, 1878, 1934, 1924, 1801, 1941, 1942, 1944, 1946, - /* 600 */ 1947, 1949, 1891, 1892, 1922, 1777, 1943, 1938, 1986, 1990, - /* 610 */ 1992, 1994, 1899, 1960, 1754, 1959, 1916, 1911, 1917, 1919, - /* 620 */ 1928, 1857, 1930, 2010, 1991, 1866, 1933, 1927, 1754, 1993, - /* 630 */ 2000, 1819, 1815, 1826, 2041, 2024, 1844, 1952, 1957, 1962, - /* 640 */ 1963, 1965, 1966, 2015, 1968, 1969, 2019, 1971, 2047, 1894, - /* 650 */ 1975, 1970, 1973, 2038, 2040, 1982, 1983, 2044, 1985, 1988, - /* 660 */ 2048, 1996, 2002, 2052, 2005, 2007, 2053, 2012, 1989, 1998, - /* 670 */ 2001, 2003, 2060, 2008, 2023, 2062, 2026, 2090, 2030, 2062, - /* 680 */ 2062, 2113, 2072, 2074, 2104, 2105, 2107, 2108, 2109, 2110, - /* 690 */ 2112, 2114, 2115, 2116, 2081, 2061, 2111, 2118, 2121, 2122, - /* 700 */ 2136, 2124, 2125, 2126, 2091, 1806, 2129, 1810, 2130, 2131, - /* 710 */ 2133, 2134, 2148, 2137, 2171, 2138, 2128, 2135, 2178, 2144, - /* 720 */ 2142, 2153, 2183, 2160, 2150, 2157, 2197, 2164, 2152, 2162, - /* 730 */ 2203, 2169, 2170, 2206, 2186, 2189, 2191, 2192, 2195, 2207, + /* 0 */ 874, 0, 72, 0, 293, 293, 293, 293, 293, 293, + /* 10 */ 293, 293, 293, 293, 293, 365, 584, 584, 656, 584, + /* 20 */ 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, + /* 30 */ 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, + /* 40 */ 584, 584, 584, 584, 584, 584, 584, 584, 172, 292, + /* 50 */ 185, 184, 135, 529, 535, 529, 184, 184, 1380, 1380, + /* 60 */ 1380, 529, 1380, 1380, 388, 529, 16, 482, 115, 115, + /* 70 */ 482, 86, 86, 307, 360, 346, 346, 115, 115, 115, + /* 80 */ 115, 115, 115, 115, 147, 115, 115, 138, 16, 115, + /* 90 */ 115, 189, 115, 16, 115, 147, 115, 147, 16, 115, + /* 100 */ 115, 16, 115, 16, 16, 16, 115, 176, 803, 34, + /* 110 */ 34, 219, 458, 982, 982, 982, 982, 982, 982, 982, + /* 120 */ 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + /* 130 */ 982, 982, 217, 379, 307, 360, 2, 249, 521, 521, + /* 140 */ 521, 855, 152, 152, 249, 245, 245, 245, 260, 208, + /* 150 */ 16, 617, 16, 617, 617, 650, 725, 36, 36, 36, + /* 160 */ 36, 36, 36, 36, 36, 298, 418, 406, 47, 329, + /* 170 */ 444, 60, 69, 239, 652, 353, 651, 792, 931, 832, + /* 180 */ 861, 878, 1009, 861, 998, 1012, 1056, 1080, 1287, 1154, + /* 190 */ 1296, 1323, 1296, 1194, 1339, 1339, 1296, 1194, 1194, 1339, + /* 200 */ 1276, 1339, 1339, 1339, 1358, 1358, 1368, 138, 1375, 138, + /* 210 */ 1379, 1385, 138, 1379, 138, 138, 138, 1339, 138, 1364, + /* 220 */ 1364, 1358, 16, 16, 16, 16, 16, 16, 16, 16, + /* 230 */ 16, 16, 16, 1339, 1358, 617, 617, 1232, 1331, 1368, + /* 240 */ 176, 1251, 1375, 176, 1339, 1323, 1323, 617, 1189, 1213, + /* 250 */ 617, 1189, 1213, 617, 617, 16, 1210, 1305, 1189, 1215, + /* 260 */ 1214, 1240, 1080, 1224, 1230, 1233, 1263, 245, 1492, 1339, + /* 270 */ 1379, 176, 176, 1504, 1213, 617, 617, 617, 617, 617, + /* 280 */ 1213, 617, 1362, 176, 650, 176, 245, 1446, 1450, 617, + /* 290 */ 725, 1339, 176, 1516, 1358, 2749, 2749, 2749, 2749, 2749, + /* 300 */ 2749, 2749, 2749, 2749, 899, 589, 530, 677, 685, 707, + /* 310 */ 911, 731, 15, 724, 893, 903, 987, 987, 987, 987, + /* 320 */ 987, 987, 987, 987, 987, 716, 699, 295, 295, 407, + /* 330 */ 161, 489, 397, 81, 370, 263, 263, 557, 791, 583, + /* 340 */ 557, 557, 557, 1113, 1020, 642, 1072, 971, 1064, 1071, + /* 350 */ 1073, 1078, 1162, 1169, 1196, 989, 1089, 1106, 1029, 1133, + /* 360 */ 1138, 1139, 1083, 1057, 66, 1049, 1179, 1180, 1184, 1187, + /* 370 */ 1188, 1190, 1248, 1212, 563, 1171, 1124, 1216, 431, 1218, + /* 380 */ 1219, 1220, 1227, 1228, 1235, 1159, 1260, 1285, 531, 1225, + /* 390 */ 1574, 1576, 1577, 1537, 1581, 1548, 1384, 1554, 1557, 1559, + /* 400 */ 1391, 1596, 1562, 1564, 1397, 1602, 1406, 1611, 1578, 1612, + /* 410 */ 1594, 1617, 1584, 1427, 1434, 1437, 1622, 1624, 1625, 1447, + /* 420 */ 1452, 1626, 1632, 1587, 1635, 1642, 1646, 1605, 1649, 1651, + /* 430 */ 1652, 1656, 1657, 1661, 1662, 1672, 1512, 1630, 1674, 1524, + /* 440 */ 1677, 1679, 1681, 1682, 1686, 1687, 1691, 1692, 1694, 1695, + /* 450 */ 1702, 1704, 1706, 1707, 1708, 1711, 1670, 1713, 1716, 1718, + /* 460 */ 1720, 1721, 1725, 1710, 1734, 1735, 1737, 1603, 1738, 1740, + /* 470 */ 1741, 1684, 1712, 1743, 1688, 1745, 1690, 1750, 1755, 1714, + /* 480 */ 1719, 1715, 1705, 1754, 1722, 1756, 1724, 1766, 1732, 1736, + /* 490 */ 1773, 1774, 1776, 1742, 1607, 1777, 1783, 1786, 1730, 1796, + /* 500 */ 1797, 1764, 1757, 1765, 1803, 1772, 1760, 1770, 1810, 1778, + /* 510 */ 1763, 1775, 1812, 1780, 1769, 1781, 1818, 1819, 1821, 1822, + /* 520 */ 1723, 1727, 1788, 1802, 1825, 1791, 1792, 1799, 1800, 1787, + /* 530 */ 1798, 1809, 1811, 1823, 1814, 1832, 1828, 1851, 1830, 1804, + /* 540 */ 1853, 1834, 1824, 1857, 1826, 1858, 1829, 1863, 1843, 1846, + /* 550 */ 1833, 1835, 1836, 1784, 1771, 1869, 1709, 1782, 1837, 1873, + /* 560 */ 1696, 1854, 1717, 1726, 1875, 1877, 1731, 1733, 1882, 1842, + /* 570 */ 1636, 1793, 1807, 1794, 1739, 1676, 1744, 1653, 1813, 1864, + /* 580 */ 1868, 1816, 1844, 1848, 1852, 1820, 1871, 1872, 1874, 1856, + /* 590 */ 1876, 1666, 1827, 1841, 1919, 1885, 1673, 1891, 1904, 1907, + /* 600 */ 1912, 1914, 1920, 1859, 1860, 1916, 1728, 1910, 1917, 1959, + /* 610 */ 1961, 1962, 1965, 1870, 1928, 1705, 1921, 1879, 1890, 1894, + /* 620 */ 1908, 1909, 1805, 1913, 1969, 1931, 1840, 1918, 1888, 1705, + /* 630 */ 1964, 1934, 1785, 1789, 1806, 2006, 1990, 1808, 1923, 1926, + /* 640 */ 1940, 1927, 1942, 1930, 1966, 1944, 1946, 1997, 1948, 2025, + /* 650 */ 1831, 1952, 1945, 1968, 2014, 2026, 1967, 1970, 2027, 1973, + /* 660 */ 1971, 2036, 1976, 1978, 2038, 1980, 1988, 2051, 1991, 1974, + /* 670 */ 1977, 1981, 1992, 2066, 1982, 1993, 2047, 2000, 2057, 2002, + /* 680 */ 2047, 2047, 2071, 2035, 2044, 2076, 2078, 2080, 2081, 2082, + /* 690 */ 2083, 2085, 2086, 2088, 2089, 2048, 2032, 2087, 2091, 2093, + /* 700 */ 2095, 2112, 2098, 2100, 2101, 2067, 1787, 2102, 1798, 2104, + /* 710 */ 2105, 2107, 2108, 2122, 2110, 2146, 2113, 2099, 2114, 2150, + /* 720 */ 2116, 2109, 2120, 2152, 2125, 2126, 2134, 2155, 2129, 2127, + /* 730 */ 2138, 2161, 2144, 2145, 2181, 2160, 2162, 2164, 2165, 2163, + /* 740 */ 2168, }; #define YY_REDUCE_COUNT (303) -#define YY_REDUCE_MIN (-415) -#define YY_REDUCE_MAX (2414) +#define YY_REDUCE_MIN (-438) +#define YY_REDUCE_MAX (2328) static const short yy_reduce_ofst[] = { - /* 0 */ -256, 675, 747, 807, 867, 916, 976, 1035, 1094, 1154, - /* 10 */ 1186, 1214, 1295, 1344, 1393, -294, -2, 23, 603, 288, - /* 20 */ 313, 1442, 1461, 1510, 1530, 1587, 1603, 1621, 1680, 1697, - /* 30 */ 1714, 1771, 1805, 1832, 1862, 1881, 1950, 1974, 1999, 2068, - /* 40 */ 2087, 2149, 2168, 2225, 2244, 2306, 2365, 2414, -264, 184, - /* 50 */ 162, -173, -350, 106, 278, 583, -336, -105, -323, 594, - /* 60 */ 855, -106, -343, -3, -72, -69, -353, -212, -334, 191, - /* 70 */ -282, -331, -146, -305, -303, -199, 92, -288, -15, 50, - /* 80 */ 259, 275, 298, 299, -37, 343, 401, 195, 190, 409, - /* 90 */ 632, -177, 655, 295, 685, 274, 701, 332, 204, 704, - /* 100 */ 705, 398, 710, 533, 670, 630, 717, 62, 270, -169, - /* 110 */ -169, -330, -23, 224, 310, 407, 490, 510, 637, 652, - /* 120 */ 676, 722, 752, 774, 777, 779, 805, 808, 827, 828, - /* 130 */ 835, 837, 318, -358, -180, 443, -167, 498, -358, 404, - /* 140 */ 423, -86, 548, 658, 540, 612, 731, 816, -45, -415, - /* 150 */ 167, 124, 308, 228, 360, 602, 761, -348, 359, 384, - /* 160 */ 474, 486, 570, 716, 486, 699, 771, 856, 878, 833, - /* 170 */ 849, 967, 890, 980, 980, 1015, 975, 1014, 983, 977, - /* 180 */ 920, 920, 907, 920, 936, 926, 980, 966, 968, 981, - /* 190 */ 997, 996, 1001, 1007, 1056, 1059, 1017, 1020, 1022, 1065, - /* 200 */ 1062, 1072, 1075, 1076, 1080, 1086, 1021, 1078, 1047, 1081, - /* 210 */ 1090, 1036, 1087, 1093, 1091, 1092, 1095, 1096, 1097, 1101, - /* 220 */ 1102, 1106, 1084, 1085, 1099, 1103, 1108, 1110, 1112, 1113, - /* 230 */ 1114, 1116, 1118, 1115, 1124, 1063, 1088, 1054, 1070, 1098, - /* 240 */ 1138, 1079, 1119, 1141, 1148, 1104, 1109, 1120, 1041, 1125, - /* 250 */ 1123, 1052, 1130, 1127, 1131, 980, 1039, 1071, 1100, 1082, - /* 260 */ 1126, 1129, 1132, 1066, 1077, 1121, 920, 1173, 1134, 1205, - /* 270 */ 1210, 1204, 1208, 1165, 1164, 1180, 1183, 1184, 1187, 1190, - /* 280 */ 1167, 1191, 1193, 1244, 1220, 1247, 1213, 1168, 1229, 1222, - /* 290 */ 1253, 1270, 1265, 1276, 1279, 1217, 1219, 1224, 1225, 1263, - /* 300 */ 1277, 1280, 1278, 1294, + /* 0 */ -256, 679, 728, 795, 827, 876, 935, 969, 1042, 1091, + /* 10 */ 1155, 1223, 243, 1253, 1283, -294, -1, 1313, 1374, 1347, + /* 20 */ 1423, 1485, 1517, 1566, 1583, 1640, 1615, 1664, 1689, 1752, + /* 30 */ 1779, 1801, 1881, 1898, 1915, 1947, 1972, 1996, 2021, 2084, + /* 40 */ 2111, 2133, 2213, 2230, 2247, 2279, 2304, 2328, -264, 169, + /* 50 */ 171, -173, -350, 604, 736, 863, -336, -5, -323, -61, + /* 60 */ 709, 303, 349, 727, -438, -386, -180, -212, 68, 98, + /* 70 */ -377, -331, -327, -344, -307, -199, -7, 71, 197, 200, + /* 80 */ 268, 270, 309, 411, -154, 561, 653, 13, -324, 654, + /* 90 */ 675, 414, 676, 97, 718, 213, 770, 238, 311, 666, + /* 100 */ 674, 472, 782, 533, 559, 568, 810, -105, -288, -93, + /* 110 */ -93, -75, -272, -187, 77, 308, 336, 354, 359, 410, + /* 120 */ 412, 413, 442, 447, 460, 518, 585, 663, 690, 691, + /* 130 */ 694, 695, -342, -41, -206, 124, 486, 516, -41, 526, + /* 140 */ 648, 117, -23, 41, 593, 230, 487, 667, 428, 269, + /* 150 */ 409, 50, 350, 700, 740, 574, 668, -354, 402, 550, + /* 160 */ 768, 776, 793, 835, 776, 490, 858, 888, 844, 800, + /* 170 */ 812, 929, 825, 918, 918, 942, 914, 950, 930, 926, + /* 180 */ 873, 873, 859, 873, 890, 885, 918, 925, 933, 941, + /* 190 */ 960, 962, 972, 978, 1022, 1024, 983, 984, 988, 1030, + /* 200 */ 1025, 1032, 1035, 1037, 1047, 1048, 990, 1045, 1021, 1052, + /* 210 */ 1063, 1011, 1062, 1068, 1065, 1069, 1075, 1070, 1076, 1081, + /* 220 */ 1082, 1085, 1066, 1067, 1074, 1077, 1079, 1084, 1087, 1088, + /* 230 */ 1092, 1101, 1102, 1086, 1093, 1055, 1058, 1027, 1031, 1034, + /* 240 */ 1094, 1043, 1095, 1099, 1105, 1060, 1090, 1096, 1016, 1097, + /* 250 */ 1103, 1028, 1098, 1104, 1107, 918, 1033, 1038, 1041, 1044, + /* 260 */ 1046, 1050, 1111, 1026, 1051, 1039, 873, 1125, 1108, 1175, + /* 270 */ 1181, 1172, 1183, 1140, 1137, 1156, 1158, 1160, 1161, 1163, + /* 280 */ 1144, 1164, 1150, 1197, 1185, 1198, 1174, 1115, 1182, 1176, + /* 290 */ 1195, 1211, 1206, 1221, 1226, 1165, 1151, 1166, 1167, 1200, + /* 300 */ 1204, 1207, 1234, 1238, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 10 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 20 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 30 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 40 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 50 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 60 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 70 */ 1658, 1658, 1658, 1916, 1658, 1658, 1658, 1658, 1658, 1658, - /* 80 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1737, 1658, 1658, - /* 90 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 100 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1735, 1909, 2123, - /* 110 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 120 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 130 */ 1658, 1658, 1658, 2135, 1658, 1658, 1737, 1658, 2135, 2135, - /* 140 */ 2135, 1735, 2095, 2095, 1658, 1658, 1658, 1658, 1970, 1658, - /* 150 */ 1658, 1658, 1658, 1658, 1658, 1844, 1658, 1658, 1658, 1658, - /* 160 */ 1658, 1868, 1658, 1658, 1658, 1962, 1658, 1658, 2160, 2216, - /* 170 */ 1658, 1658, 2163, 1658, 1658, 1658, 1921, 1658, 1797, 2150, - /* 180 */ 2127, 2141, 2200, 2128, 2125, 2144, 1658, 2154, 1658, 1955, - /* 190 */ 1914, 1658, 1914, 1911, 1658, 1658, 1914, 1911, 1911, 1658, - /* 200 */ 1788, 1658, 1658, 1658, 1658, 1658, 1658, 1737, 1658, 1737, - /* 210 */ 1658, 1658, 1737, 1658, 1737, 1737, 1737, 1658, 1737, 1715, - /* 220 */ 1715, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 230 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1980, 1968, 1658, - /* 240 */ 1735, 1964, 1658, 1735, 1658, 1658, 1658, 1658, 2171, 2169, - /* 250 */ 1658, 2171, 2169, 1658, 1658, 1658, 2185, 2181, 2171, 2189, - /* 260 */ 2187, 2156, 2154, 2219, 2206, 2202, 2141, 1658, 1658, 1658, - /* 270 */ 1658, 1735, 1735, 1658, 2169, 1658, 1658, 1658, 1658, 1658, - /* 280 */ 2169, 1658, 1658, 1735, 1658, 1735, 1658, 1658, 1813, 1658, - /* 290 */ 1658, 1658, 1735, 1690, 1658, 1957, 1973, 1939, 1939, 1847, - /* 300 */ 1847, 1847, 1738, 1663, 1658, 1658, 1658, 1658, 1658, 1658, - /* 310 */ 1658, 1658, 1658, 1658, 1658, 1658, 2184, 2183, 2050, 1658, - /* 320 */ 2099, 2098, 2097, 2088, 2049, 1809, 1658, 2048, 2047, 1658, - /* 330 */ 1658, 1658, 1658, 1658, 1658, 1930, 1929, 2041, 1658, 1658, - /* 340 */ 2042, 2040, 2039, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 350 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 360 */ 1658, 1658, 2203, 2207, 1658, 1658, 1658, 1658, 1658, 1658, - /* 370 */ 1658, 2124, 1658, 1658, 1658, 1658, 1658, 2023, 1658, 1658, - /* 380 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 390 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 400 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 410 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 420 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 430 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 440 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 450 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 460 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 470 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 480 */ 1695, 2028, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 490 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 500 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 510 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 520 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1776, 1775, - /* 530 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 540 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 550 */ 1658, 1658, 2032, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 560 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 2199, 2157, 1658, - /* 570 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 580 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 2023, 1658, 2182, - /* 590 */ 1658, 1658, 2197, 1658, 2201, 1658, 1658, 1658, 1658, 1658, - /* 600 */ 1658, 1658, 2134, 2130, 1658, 1658, 2126, 1658, 1658, 1658, - /* 610 */ 1658, 1658, 1658, 1658, 2031, 1658, 1658, 1658, 1658, 1658, - /* 620 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 2022, 1658, - /* 630 */ 2085, 1658, 1658, 1658, 2119, 1658, 1658, 2070, 1658, 1658, - /* 640 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 2032, 1658, 2035, - /* 650 */ 1658, 1658, 1658, 1658, 1658, 1841, 1658, 1658, 1658, 1658, - /* 660 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1826, 1824, - /* 670 */ 1823, 1822, 1658, 1819, 1658, 1854, 1658, 1658, 1658, 1850, - /* 680 */ 1849, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 690 */ 1658, 1658, 1658, 1658, 1658, 1658, 1756, 1658, 1658, 1658, - /* 700 */ 1658, 1658, 1658, 1658, 1658, 1748, 1658, 1747, 1658, 1658, - /* 710 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 720 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - /* 730 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, + /* 0 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 10 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 20 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 30 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 40 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 50 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 60 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 70 */ 1661, 1661, 1661, 1919, 1661, 1661, 1661, 1661, 1661, 1661, + /* 80 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1740, 1661, 1661, + /* 90 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 100 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1738, 1912, 2127, + /* 110 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 120 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 130 */ 1661, 1661, 1661, 2139, 1661, 1661, 1740, 1661, 2139, 2139, + /* 140 */ 2139, 1738, 2099, 2099, 1661, 1661, 1661, 1661, 1973, 1661, + /* 150 */ 1661, 1661, 1661, 1661, 1661, 1847, 1661, 1661, 1661, 1661, + /* 160 */ 1661, 1871, 1661, 1661, 1661, 1965, 1661, 1661, 2164, 2220, + /* 170 */ 1661, 1661, 2167, 1661, 1661, 1661, 1924, 1661, 1800, 2154, + /* 180 */ 2131, 2145, 2204, 2132, 2129, 2148, 1661, 2158, 1661, 1958, + /* 190 */ 1917, 1661, 1917, 1914, 1661, 1661, 1917, 1914, 1914, 1661, + /* 200 */ 1791, 1661, 1661, 1661, 1661, 1661, 1661, 1740, 1661, 1740, + /* 210 */ 1661, 1661, 1740, 1661, 1740, 1740, 1740, 1661, 1740, 1718, + /* 220 */ 1718, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 230 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1984, 1971, 1661, + /* 240 */ 1738, 1967, 1661, 1738, 1661, 1661, 1661, 1661, 2175, 2173, + /* 250 */ 1661, 2175, 2173, 1661, 1661, 1661, 2189, 2185, 2175, 2193, + /* 260 */ 2191, 2160, 2158, 2223, 2210, 2206, 2145, 1661, 1661, 1661, + /* 270 */ 1661, 1738, 1738, 1661, 2173, 1661, 1661, 1661, 1661, 1661, + /* 280 */ 2173, 1661, 1661, 1738, 1661, 1738, 1661, 1661, 1816, 1661, + /* 290 */ 1661, 1661, 1738, 1693, 1661, 1960, 1976, 1942, 1942, 1850, + /* 300 */ 1850, 1850, 1741, 1666, 1661, 1661, 1661, 1661, 1661, 1661, + /* 310 */ 1661, 1661, 1661, 1661, 1661, 1661, 2188, 2187, 2054, 1661, + /* 320 */ 2103, 2102, 2101, 2092, 2053, 1812, 1661, 2052, 2051, 1661, + /* 330 */ 1661, 1661, 1661, 1661, 1661, 1933, 1932, 2045, 1661, 1661, + /* 340 */ 2046, 2044, 2043, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 350 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 360 */ 1661, 1661, 1661, 2207, 2211, 1661, 1661, 1661, 1661, 1661, + /* 370 */ 1661, 1661, 2128, 1661, 1661, 1661, 1661, 1661, 2027, 1661, + /* 380 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 390 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 400 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 410 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 420 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 430 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 440 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 450 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 460 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 470 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 480 */ 1661, 1698, 2032, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 490 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 500 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 510 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 520 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1779, + /* 530 */ 1778, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 540 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 550 */ 1661, 1661, 1661, 2036, 1661, 1661, 1661, 1661, 1661, 1661, + /* 560 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 2203, 2161, + /* 570 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 580 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 2027, 1661, + /* 590 */ 2186, 1661, 1661, 2201, 1661, 2205, 1661, 1661, 1661, 1661, + /* 600 */ 1661, 1661, 1661, 2138, 2134, 1661, 1661, 2130, 1661, 1661, + /* 610 */ 1661, 1661, 1661, 1661, 1661, 2035, 1661, 1661, 1661, 1661, + /* 620 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 2026, + /* 630 */ 1661, 2089, 1661, 1661, 1661, 2123, 1661, 1661, 2074, 1661, + /* 640 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 2036, 1661, + /* 650 */ 2039, 1661, 1661, 1661, 1661, 1661, 1844, 1661, 1661, 1661, + /* 660 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1829, + /* 670 */ 1827, 1826, 1825, 1661, 1822, 1661, 1857, 1661, 1661, 1661, + /* 680 */ 1853, 1852, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 690 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1759, 1661, 1661, + /* 700 */ 1661, 1661, 1661, 1661, 1661, 1661, 1751, 1661, 1750, 1661, + /* 710 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 720 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 730 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 740 */ 1661, }; /********** End of lemon-generated parsing tables *****************************/ @@ -1196,6 +1180,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* IGNORE => nothing */ 0, /* EXPIRED => nothing */ 0, /* FILL_HISTORY => nothing */ + 0, /* UPDATE => nothing */ 0, /* SUBTABLE => nothing */ 0, /* KILL => nothing */ 0, /* CONNECTION => nothing */ @@ -1228,7 +1213,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* SERVER_STATUS => nothing */ 0, /* CURRENT_USER => nothing */ 0, /* CASE => nothing */ - 275, /* END => ABORT */ + 276, /* END => ABORT */ 0, /* WHEN => nothing */ 0, /* THEN => nothing */ 0, /* ELSE => nothing */ @@ -1274,58 +1259,57 @@ static const YYCODETYPE yyFallback[] = { 0, /* ASC => nothing */ 0, /* NULLS => nothing */ 0, /* ABORT => nothing */ - 275, /* AFTER => ABORT */ - 275, /* ATTACH => ABORT */ - 275, /* BEFORE => ABORT */ - 275, /* BEGIN => ABORT */ - 275, /* BITAND => ABORT */ - 275, /* BITNOT => ABORT */ - 275, /* BITOR => ABORT */ - 275, /* BLOCKS => ABORT */ - 275, /* CHANGE => ABORT */ - 275, /* COMMA => ABORT */ - 275, /* CONCAT => ABORT */ - 275, /* CONFLICT => ABORT */ - 275, /* COPY => ABORT */ - 275, /* DEFERRED => ABORT */ - 275, /* DELIMITERS => ABORT */ - 275, /* DETACH => ABORT */ - 275, /* DIVIDE => ABORT */ - 275, /* DOT => ABORT */ - 275, /* EACH => ABORT */ - 275, /* FAIL => ABORT */ - 275, /* FILE => ABORT */ - 275, /* FOR => ABORT */ - 275, /* GLOB => ABORT */ - 275, /* ID => ABORT */ - 275, /* IMMEDIATE => ABORT */ - 275, /* IMPORT => ABORT */ - 275, /* INITIALLY => ABORT */ - 275, /* INSTEAD => ABORT */ - 275, /* ISNULL => ABORT */ - 275, /* KEY => ABORT */ - 275, /* MODULES => ABORT */ - 275, /* NK_BITNOT => ABORT */ - 275, /* NK_SEMI => ABORT */ - 275, /* NOTNULL => ABORT */ - 275, /* OF => ABORT */ - 275, /* PLUS => ABORT */ - 275, /* PRIVILEGE => ABORT */ - 275, /* RAISE => ABORT */ - 275, /* REPLACE => ABORT */ - 275, /* RESTRICT => ABORT */ - 275, /* ROW => ABORT */ - 275, /* SEMI => ABORT */ - 275, /* STAR => ABORT */ - 275, /* STATEMENT => ABORT */ - 275, /* STRICT => ABORT */ - 275, /* STRING => ABORT */ - 275, /* TIMES => ABORT */ - 275, /* UPDATE => ABORT */ - 275, /* VALUES => ABORT */ - 275, /* VARIABLE => ABORT */ - 275, /* VIEW => ABORT */ - 275, /* WAL => ABORT */ + 276, /* AFTER => ABORT */ + 276, /* ATTACH => ABORT */ + 276, /* BEFORE => ABORT */ + 276, /* BEGIN => ABORT */ + 276, /* BITAND => ABORT */ + 276, /* BITNOT => ABORT */ + 276, /* BITOR => ABORT */ + 276, /* BLOCKS => ABORT */ + 276, /* CHANGE => ABORT */ + 276, /* COMMA => ABORT */ + 276, /* CONCAT => ABORT */ + 276, /* CONFLICT => ABORT */ + 276, /* COPY => ABORT */ + 276, /* DEFERRED => ABORT */ + 276, /* DELIMITERS => ABORT */ + 276, /* DETACH => ABORT */ + 276, /* DIVIDE => ABORT */ + 276, /* DOT => ABORT */ + 276, /* EACH => ABORT */ + 276, /* FAIL => ABORT */ + 276, /* FILE => ABORT */ + 276, /* FOR => ABORT */ + 276, /* GLOB => ABORT */ + 276, /* ID => ABORT */ + 276, /* IMMEDIATE => ABORT */ + 276, /* IMPORT => ABORT */ + 276, /* INITIALLY => ABORT */ + 276, /* INSTEAD => ABORT */ + 276, /* ISNULL => ABORT */ + 276, /* KEY => ABORT */ + 276, /* MODULES => ABORT */ + 276, /* NK_BITNOT => ABORT */ + 276, /* NK_SEMI => ABORT */ + 276, /* NOTNULL => ABORT */ + 276, /* OF => ABORT */ + 276, /* PLUS => ABORT */ + 276, /* PRIVILEGE => ABORT */ + 276, /* RAISE => ABORT */ + 276, /* REPLACE => ABORT */ + 276, /* RESTRICT => ABORT */ + 276, /* ROW => ABORT */ + 276, /* SEMI => ABORT */ + 276, /* STAR => ABORT */ + 276, /* STATEMENT => ABORT */ + 276, /* STRICT => ABORT */ + 276, /* STRING => ABORT */ + 276, /* TIMES => ABORT */ + 276, /* VALUES => ABORT */ + 276, /* VARIABLE => ABORT */ + 276, /* VIEW => ABORT */ + 276, /* WAL => ABORT */ }; #endif /* YYFALLBACK */ @@ -1611,132 +1595,132 @@ static const char *const yyTokenName[] = { /* 195 */ "IGNORE", /* 196 */ "EXPIRED", /* 197 */ "FILL_HISTORY", - /* 198 */ "SUBTABLE", - /* 199 */ "KILL", - /* 200 */ "CONNECTION", - /* 201 */ "TRANSACTION", - /* 202 */ "BALANCE", - /* 203 */ "VGROUP", - /* 204 */ "MERGE", - /* 205 */ "REDISTRIBUTE", - /* 206 */ "SPLIT", - /* 207 */ "DELETE", - /* 208 */ "INSERT", - /* 209 */ "NULL", - /* 210 */ "NK_QUESTION", - /* 211 */ "NK_ARROW", - /* 212 */ "ROWTS", - /* 213 */ "QSTART", - /* 214 */ "QEND", - /* 215 */ "QDURATION", - /* 216 */ "WSTART", - /* 217 */ "WEND", - /* 218 */ "WDURATION", - /* 219 */ "IROWTS", - /* 220 */ "ISFILLED", - /* 221 */ "CAST", - /* 222 */ "NOW", - /* 223 */ "TODAY", - /* 224 */ "TIMEZONE", - /* 225 */ "CLIENT_VERSION", - /* 226 */ "SERVER_VERSION", - /* 227 */ "SERVER_STATUS", - /* 228 */ "CURRENT_USER", - /* 229 */ "CASE", - /* 230 */ "END", - /* 231 */ "WHEN", - /* 232 */ "THEN", - /* 233 */ "ELSE", - /* 234 */ "BETWEEN", - /* 235 */ "IS", - /* 236 */ "NK_LT", - /* 237 */ "NK_GT", - /* 238 */ "NK_LE", - /* 239 */ "NK_GE", - /* 240 */ "NK_NE", - /* 241 */ "MATCH", - /* 242 */ "NMATCH", - /* 243 */ "CONTAINS", - /* 244 */ "IN", - /* 245 */ "JOIN", - /* 246 */ "INNER", - /* 247 */ "SELECT", - /* 248 */ "DISTINCT", - /* 249 */ "WHERE", - /* 250 */ "PARTITION", - /* 251 */ "BY", - /* 252 */ "SESSION", - /* 253 */ "STATE_WINDOW", - /* 254 */ "EVENT_WINDOW", - /* 255 */ "START", - /* 256 */ "SLIDING", - /* 257 */ "FILL", - /* 258 */ "VALUE", - /* 259 */ "VALUE_F", - /* 260 */ "NONE", - /* 261 */ "PREV", - /* 262 */ "NULL_F", - /* 263 */ "LINEAR", - /* 264 */ "NEXT", - /* 265 */ "HAVING", - /* 266 */ "RANGE", - /* 267 */ "EVERY", - /* 268 */ "ORDER", - /* 269 */ "SLIMIT", - /* 270 */ "SOFFSET", - /* 271 */ "LIMIT", - /* 272 */ "OFFSET", - /* 273 */ "ASC", - /* 274 */ "NULLS", - /* 275 */ "ABORT", - /* 276 */ "AFTER", - /* 277 */ "ATTACH", - /* 278 */ "BEFORE", - /* 279 */ "BEGIN", - /* 280 */ "BITAND", - /* 281 */ "BITNOT", - /* 282 */ "BITOR", - /* 283 */ "BLOCKS", - /* 284 */ "CHANGE", - /* 285 */ "COMMA", - /* 286 */ "CONCAT", - /* 287 */ "CONFLICT", - /* 288 */ "COPY", - /* 289 */ "DEFERRED", - /* 290 */ "DELIMITERS", - /* 291 */ "DETACH", - /* 292 */ "DIVIDE", - /* 293 */ "DOT", - /* 294 */ "EACH", - /* 295 */ "FAIL", - /* 296 */ "FILE", - /* 297 */ "FOR", - /* 298 */ "GLOB", - /* 299 */ "ID", - /* 300 */ "IMMEDIATE", - /* 301 */ "IMPORT", - /* 302 */ "INITIALLY", - /* 303 */ "INSTEAD", - /* 304 */ "ISNULL", - /* 305 */ "KEY", - /* 306 */ "MODULES", - /* 307 */ "NK_BITNOT", - /* 308 */ "NK_SEMI", - /* 309 */ "NOTNULL", - /* 310 */ "OF", - /* 311 */ "PLUS", - /* 312 */ "PRIVILEGE", - /* 313 */ "RAISE", - /* 314 */ "REPLACE", - /* 315 */ "RESTRICT", - /* 316 */ "ROW", - /* 317 */ "SEMI", - /* 318 */ "STAR", - /* 319 */ "STATEMENT", - /* 320 */ "STRICT", - /* 321 */ "STRING", - /* 322 */ "TIMES", - /* 323 */ "UPDATE", + /* 198 */ "UPDATE", + /* 199 */ "SUBTABLE", + /* 200 */ "KILL", + /* 201 */ "CONNECTION", + /* 202 */ "TRANSACTION", + /* 203 */ "BALANCE", + /* 204 */ "VGROUP", + /* 205 */ "MERGE", + /* 206 */ "REDISTRIBUTE", + /* 207 */ "SPLIT", + /* 208 */ "DELETE", + /* 209 */ "INSERT", + /* 210 */ "NULL", + /* 211 */ "NK_QUESTION", + /* 212 */ "NK_ARROW", + /* 213 */ "ROWTS", + /* 214 */ "QSTART", + /* 215 */ "QEND", + /* 216 */ "QDURATION", + /* 217 */ "WSTART", + /* 218 */ "WEND", + /* 219 */ "WDURATION", + /* 220 */ "IROWTS", + /* 221 */ "ISFILLED", + /* 222 */ "CAST", + /* 223 */ "NOW", + /* 224 */ "TODAY", + /* 225 */ "TIMEZONE", + /* 226 */ "CLIENT_VERSION", + /* 227 */ "SERVER_VERSION", + /* 228 */ "SERVER_STATUS", + /* 229 */ "CURRENT_USER", + /* 230 */ "CASE", + /* 231 */ "END", + /* 232 */ "WHEN", + /* 233 */ "THEN", + /* 234 */ "ELSE", + /* 235 */ "BETWEEN", + /* 236 */ "IS", + /* 237 */ "NK_LT", + /* 238 */ "NK_GT", + /* 239 */ "NK_LE", + /* 240 */ "NK_GE", + /* 241 */ "NK_NE", + /* 242 */ "MATCH", + /* 243 */ "NMATCH", + /* 244 */ "CONTAINS", + /* 245 */ "IN", + /* 246 */ "JOIN", + /* 247 */ "INNER", + /* 248 */ "SELECT", + /* 249 */ "DISTINCT", + /* 250 */ "WHERE", + /* 251 */ "PARTITION", + /* 252 */ "BY", + /* 253 */ "SESSION", + /* 254 */ "STATE_WINDOW", + /* 255 */ "EVENT_WINDOW", + /* 256 */ "START", + /* 257 */ "SLIDING", + /* 258 */ "FILL", + /* 259 */ "VALUE", + /* 260 */ "VALUE_F", + /* 261 */ "NONE", + /* 262 */ "PREV", + /* 263 */ "NULL_F", + /* 264 */ "LINEAR", + /* 265 */ "NEXT", + /* 266 */ "HAVING", + /* 267 */ "RANGE", + /* 268 */ "EVERY", + /* 269 */ "ORDER", + /* 270 */ "SLIMIT", + /* 271 */ "SOFFSET", + /* 272 */ "LIMIT", + /* 273 */ "OFFSET", + /* 274 */ "ASC", + /* 275 */ "NULLS", + /* 276 */ "ABORT", + /* 277 */ "AFTER", + /* 278 */ "ATTACH", + /* 279 */ "BEFORE", + /* 280 */ "BEGIN", + /* 281 */ "BITAND", + /* 282 */ "BITNOT", + /* 283 */ "BITOR", + /* 284 */ "BLOCKS", + /* 285 */ "CHANGE", + /* 286 */ "COMMA", + /* 287 */ "CONCAT", + /* 288 */ "CONFLICT", + /* 289 */ "COPY", + /* 290 */ "DEFERRED", + /* 291 */ "DELIMITERS", + /* 292 */ "DETACH", + /* 293 */ "DIVIDE", + /* 294 */ "DOT", + /* 295 */ "EACH", + /* 296 */ "FAIL", + /* 297 */ "FILE", + /* 298 */ "FOR", + /* 299 */ "GLOB", + /* 300 */ "ID", + /* 301 */ "IMMEDIATE", + /* 302 */ "IMPORT", + /* 303 */ "INITIALLY", + /* 304 */ "INSTEAD", + /* 305 */ "ISNULL", + /* 306 */ "KEY", + /* 307 */ "MODULES", + /* 308 */ "NK_BITNOT", + /* 309 */ "NK_SEMI", + /* 310 */ "NOTNULL", + /* 311 */ "OF", + /* 312 */ "PLUS", + /* 313 */ "PRIVILEGE", + /* 314 */ "RAISE", + /* 315 */ "REPLACE", + /* 316 */ "RESTRICT", + /* 317 */ "ROW", + /* 318 */ "SEMI", + /* 319 */ "STAR", + /* 320 */ "STATEMENT", + /* 321 */ "STRICT", + /* 322 */ "STRING", + /* 323 */ "TIMES", /* 324 */ "VALUES", /* 325 */ "VARIABLE", /* 326 */ "VIEW", @@ -2208,248 +2192,249 @@ static const char *const yyRuleName[] = { /* 316 */ "stream_options ::= stream_options WATERMARK duration_literal", /* 317 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER", /* 318 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER", - /* 319 */ "subtable_opt ::=", - /* 320 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", - /* 321 */ "cmd ::= KILL CONNECTION NK_INTEGER", - /* 322 */ "cmd ::= KILL QUERY NK_STRING", - /* 323 */ "cmd ::= KILL TRANSACTION NK_INTEGER", - /* 324 */ "cmd ::= BALANCE VGROUP", - /* 325 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", - /* 326 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", - /* 327 */ "cmd ::= SPLIT VGROUP NK_INTEGER", - /* 328 */ "dnode_list ::= DNODE NK_INTEGER", - /* 329 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", - /* 330 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", - /* 331 */ "cmd ::= query_or_subquery", - /* 332 */ "cmd ::= insert_query", - /* 333 */ "insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", - /* 334 */ "insert_query ::= INSERT INTO full_table_name query_or_subquery", - /* 335 */ "literal ::= NK_INTEGER", - /* 336 */ "literal ::= NK_FLOAT", - /* 337 */ "literal ::= NK_STRING", - /* 338 */ "literal ::= NK_BOOL", - /* 339 */ "literal ::= TIMESTAMP NK_STRING", - /* 340 */ "literal ::= duration_literal", - /* 341 */ "literal ::= NULL", - /* 342 */ "literal ::= NK_QUESTION", - /* 343 */ "duration_literal ::= NK_VARIABLE", - /* 344 */ "signed ::= NK_INTEGER", - /* 345 */ "signed ::= NK_PLUS NK_INTEGER", - /* 346 */ "signed ::= NK_MINUS NK_INTEGER", - /* 347 */ "signed ::= NK_FLOAT", - /* 348 */ "signed ::= NK_PLUS NK_FLOAT", - /* 349 */ "signed ::= NK_MINUS NK_FLOAT", - /* 350 */ "signed_literal ::= signed", - /* 351 */ "signed_literal ::= NK_STRING", - /* 352 */ "signed_literal ::= NK_BOOL", - /* 353 */ "signed_literal ::= TIMESTAMP NK_STRING", - /* 354 */ "signed_literal ::= duration_literal", - /* 355 */ "signed_literal ::= NULL", - /* 356 */ "signed_literal ::= literal_func", - /* 357 */ "signed_literal ::= NK_QUESTION", - /* 358 */ "literal_list ::= signed_literal", - /* 359 */ "literal_list ::= literal_list NK_COMMA signed_literal", - /* 360 */ "db_name ::= NK_ID", - /* 361 */ "table_name ::= NK_ID", - /* 362 */ "column_name ::= NK_ID", - /* 363 */ "function_name ::= NK_ID", - /* 364 */ "table_alias ::= NK_ID", - /* 365 */ "column_alias ::= NK_ID", - /* 366 */ "user_name ::= NK_ID", - /* 367 */ "topic_name ::= NK_ID", - /* 368 */ "stream_name ::= NK_ID", - /* 369 */ "cgroup_name ::= NK_ID", - /* 370 */ "index_name ::= NK_ID", - /* 371 */ "expr_or_subquery ::= expression", - /* 372 */ "expression ::= literal", - /* 373 */ "expression ::= pseudo_column", - /* 374 */ "expression ::= column_reference", - /* 375 */ "expression ::= function_expression", - /* 376 */ "expression ::= case_when_expression", - /* 377 */ "expression ::= NK_LP expression NK_RP", - /* 378 */ "expression ::= NK_PLUS expr_or_subquery", - /* 379 */ "expression ::= NK_MINUS expr_or_subquery", - /* 380 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", - /* 381 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", - /* 382 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", - /* 383 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", - /* 384 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", - /* 385 */ "expression ::= column_reference NK_ARROW NK_STRING", - /* 386 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", - /* 387 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", - /* 388 */ "expression_list ::= expr_or_subquery", - /* 389 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", - /* 390 */ "column_reference ::= column_name", - /* 391 */ "column_reference ::= table_name NK_DOT column_name", - /* 392 */ "pseudo_column ::= ROWTS", - /* 393 */ "pseudo_column ::= TBNAME", - /* 394 */ "pseudo_column ::= table_name NK_DOT TBNAME", - /* 395 */ "pseudo_column ::= QSTART", - /* 396 */ "pseudo_column ::= QEND", - /* 397 */ "pseudo_column ::= QDURATION", - /* 398 */ "pseudo_column ::= WSTART", - /* 399 */ "pseudo_column ::= WEND", - /* 400 */ "pseudo_column ::= WDURATION", - /* 401 */ "pseudo_column ::= IROWTS", - /* 402 */ "pseudo_column ::= ISFILLED", - /* 403 */ "pseudo_column ::= QTAGS", - /* 404 */ "function_expression ::= function_name NK_LP expression_list NK_RP", - /* 405 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", - /* 406 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", - /* 407 */ "function_expression ::= literal_func", - /* 408 */ "literal_func ::= noarg_func NK_LP NK_RP", - /* 409 */ "literal_func ::= NOW", - /* 410 */ "noarg_func ::= NOW", - /* 411 */ "noarg_func ::= TODAY", - /* 412 */ "noarg_func ::= TIMEZONE", - /* 413 */ "noarg_func ::= DATABASE", - /* 414 */ "noarg_func ::= CLIENT_VERSION", - /* 415 */ "noarg_func ::= SERVER_VERSION", - /* 416 */ "noarg_func ::= SERVER_STATUS", - /* 417 */ "noarg_func ::= CURRENT_USER", - /* 418 */ "noarg_func ::= USER", - /* 419 */ "star_func ::= COUNT", - /* 420 */ "star_func ::= FIRST", - /* 421 */ "star_func ::= LAST", - /* 422 */ "star_func ::= LAST_ROW", - /* 423 */ "star_func_para_list ::= NK_STAR", - /* 424 */ "star_func_para_list ::= other_para_list", - /* 425 */ "other_para_list ::= star_func_para", - /* 426 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", - /* 427 */ "star_func_para ::= expr_or_subquery", - /* 428 */ "star_func_para ::= table_name NK_DOT NK_STAR", - /* 429 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", - /* 430 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", - /* 431 */ "when_then_list ::= when_then_expr", - /* 432 */ "when_then_list ::= when_then_list when_then_expr", - /* 433 */ "when_then_expr ::= WHEN common_expression THEN common_expression", - /* 434 */ "case_when_else_opt ::=", - /* 435 */ "case_when_else_opt ::= ELSE common_expression", - /* 436 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", - /* 437 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", - /* 438 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", - /* 439 */ "predicate ::= expr_or_subquery IS NULL", - /* 440 */ "predicate ::= expr_or_subquery IS NOT NULL", - /* 441 */ "predicate ::= expr_or_subquery in_op in_predicate_value", - /* 442 */ "compare_op ::= NK_LT", - /* 443 */ "compare_op ::= NK_GT", - /* 444 */ "compare_op ::= NK_LE", - /* 445 */ "compare_op ::= NK_GE", - /* 446 */ "compare_op ::= NK_NE", - /* 447 */ "compare_op ::= NK_EQ", - /* 448 */ "compare_op ::= LIKE", - /* 449 */ "compare_op ::= NOT LIKE", - /* 450 */ "compare_op ::= MATCH", - /* 451 */ "compare_op ::= NMATCH", - /* 452 */ "compare_op ::= CONTAINS", - /* 453 */ "in_op ::= IN", - /* 454 */ "in_op ::= NOT IN", - /* 455 */ "in_predicate_value ::= NK_LP literal_list NK_RP", - /* 456 */ "boolean_value_expression ::= boolean_primary", - /* 457 */ "boolean_value_expression ::= NOT boolean_primary", - /* 458 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", - /* 459 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", - /* 460 */ "boolean_primary ::= predicate", - /* 461 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", - /* 462 */ "common_expression ::= expr_or_subquery", - /* 463 */ "common_expression ::= boolean_value_expression", - /* 464 */ "from_clause_opt ::=", - /* 465 */ "from_clause_opt ::= FROM table_reference_list", - /* 466 */ "table_reference_list ::= table_reference", - /* 467 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", - /* 468 */ "table_reference ::= table_primary", - /* 469 */ "table_reference ::= joined_table", - /* 470 */ "table_primary ::= table_name alias_opt", - /* 471 */ "table_primary ::= db_name NK_DOT table_name alias_opt", - /* 472 */ "table_primary ::= subquery alias_opt", - /* 473 */ "table_primary ::= parenthesized_joined_table", - /* 474 */ "alias_opt ::=", - /* 475 */ "alias_opt ::= table_alias", - /* 476 */ "alias_opt ::= AS table_alias", - /* 477 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", - /* 478 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", - /* 479 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", - /* 480 */ "join_type ::=", - /* 481 */ "join_type ::= INNER", - /* 482 */ "query_specification ::= SELECT 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", - /* 483 */ "set_quantifier_opt ::=", - /* 484 */ "set_quantifier_opt ::= DISTINCT", - /* 485 */ "set_quantifier_opt ::= ALL", - /* 486 */ "select_list ::= select_item", - /* 487 */ "select_list ::= select_list NK_COMMA select_item", - /* 488 */ "select_item ::= NK_STAR", - /* 489 */ "select_item ::= common_expression", - /* 490 */ "select_item ::= common_expression column_alias", - /* 491 */ "select_item ::= common_expression AS column_alias", - /* 492 */ "select_item ::= table_name NK_DOT NK_STAR", - /* 493 */ "where_clause_opt ::=", - /* 494 */ "where_clause_opt ::= WHERE search_condition", - /* 495 */ "partition_by_clause_opt ::=", - /* 496 */ "partition_by_clause_opt ::= PARTITION BY partition_list", - /* 497 */ "partition_list ::= partition_item", - /* 498 */ "partition_list ::= partition_list NK_COMMA partition_item", - /* 499 */ "partition_item ::= expr_or_subquery", - /* 500 */ "partition_item ::= expr_or_subquery column_alias", - /* 501 */ "partition_item ::= expr_or_subquery AS column_alias", - /* 502 */ "twindow_clause_opt ::=", - /* 503 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", - /* 504 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", - /* 505 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", - /* 506 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", - /* 507 */ "twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition", - /* 508 */ "sliding_opt ::=", - /* 509 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", - /* 510 */ "fill_opt ::=", - /* 511 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", - /* 512 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", - /* 513 */ "fill_opt ::= FILL NK_LP VALUE_F NK_COMMA literal_list NK_RP", - /* 514 */ "fill_mode ::= NONE", - /* 515 */ "fill_mode ::= PREV", - /* 516 */ "fill_mode ::= NULL", - /* 517 */ "fill_mode ::= NULL_F", - /* 518 */ "fill_mode ::= LINEAR", - /* 519 */ "fill_mode ::= NEXT", - /* 520 */ "group_by_clause_opt ::=", - /* 521 */ "group_by_clause_opt ::= GROUP BY group_by_list", - /* 522 */ "group_by_list ::= expr_or_subquery", - /* 523 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", - /* 524 */ "having_clause_opt ::=", - /* 525 */ "having_clause_opt ::= HAVING search_condition", - /* 526 */ "range_opt ::=", - /* 527 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", - /* 528 */ "every_opt ::=", - /* 529 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", - /* 530 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", - /* 531 */ "query_simple ::= query_specification", - /* 532 */ "query_simple ::= union_query_expression", - /* 533 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", - /* 534 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", - /* 535 */ "query_simple_or_subquery ::= query_simple", - /* 536 */ "query_simple_or_subquery ::= subquery", - /* 537 */ "query_or_subquery ::= query_expression", - /* 538 */ "query_or_subquery ::= subquery", - /* 539 */ "order_by_clause_opt ::=", - /* 540 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", - /* 541 */ "slimit_clause_opt ::=", - /* 542 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", - /* 543 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", - /* 544 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 545 */ "limit_clause_opt ::=", - /* 546 */ "limit_clause_opt ::= LIMIT NK_INTEGER", - /* 547 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", - /* 548 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 549 */ "subquery ::= NK_LP query_expression NK_RP", - /* 550 */ "subquery ::= NK_LP subquery NK_RP", - /* 551 */ "search_condition ::= common_expression", - /* 552 */ "sort_specification_list ::= sort_specification", - /* 553 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", - /* 554 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", - /* 555 */ "ordering_specification_opt ::=", - /* 556 */ "ordering_specification_opt ::= ASC", - /* 557 */ "ordering_specification_opt ::= DESC", - /* 558 */ "null_ordering_opt ::=", - /* 559 */ "null_ordering_opt ::= NULLS FIRST", - /* 560 */ "null_ordering_opt ::= NULLS LAST", + /* 319 */ "stream_options ::= stream_options IGNORE UPDATE NK_INTEGER", + /* 320 */ "subtable_opt ::=", + /* 321 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", + /* 322 */ "cmd ::= KILL CONNECTION NK_INTEGER", + /* 323 */ "cmd ::= KILL QUERY NK_STRING", + /* 324 */ "cmd ::= KILL TRANSACTION NK_INTEGER", + /* 325 */ "cmd ::= BALANCE VGROUP", + /* 326 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", + /* 327 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", + /* 328 */ "cmd ::= SPLIT VGROUP NK_INTEGER", + /* 329 */ "dnode_list ::= DNODE NK_INTEGER", + /* 330 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", + /* 331 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", + /* 332 */ "cmd ::= query_or_subquery", + /* 333 */ "cmd ::= insert_query", + /* 334 */ "insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", + /* 335 */ "insert_query ::= INSERT INTO full_table_name query_or_subquery", + /* 336 */ "literal ::= NK_INTEGER", + /* 337 */ "literal ::= NK_FLOAT", + /* 338 */ "literal ::= NK_STRING", + /* 339 */ "literal ::= NK_BOOL", + /* 340 */ "literal ::= TIMESTAMP NK_STRING", + /* 341 */ "literal ::= duration_literal", + /* 342 */ "literal ::= NULL", + /* 343 */ "literal ::= NK_QUESTION", + /* 344 */ "duration_literal ::= NK_VARIABLE", + /* 345 */ "signed ::= NK_INTEGER", + /* 346 */ "signed ::= NK_PLUS NK_INTEGER", + /* 347 */ "signed ::= NK_MINUS NK_INTEGER", + /* 348 */ "signed ::= NK_FLOAT", + /* 349 */ "signed ::= NK_PLUS NK_FLOAT", + /* 350 */ "signed ::= NK_MINUS NK_FLOAT", + /* 351 */ "signed_literal ::= signed", + /* 352 */ "signed_literal ::= NK_STRING", + /* 353 */ "signed_literal ::= NK_BOOL", + /* 354 */ "signed_literal ::= TIMESTAMP NK_STRING", + /* 355 */ "signed_literal ::= duration_literal", + /* 356 */ "signed_literal ::= NULL", + /* 357 */ "signed_literal ::= literal_func", + /* 358 */ "signed_literal ::= NK_QUESTION", + /* 359 */ "literal_list ::= signed_literal", + /* 360 */ "literal_list ::= literal_list NK_COMMA signed_literal", + /* 361 */ "db_name ::= NK_ID", + /* 362 */ "table_name ::= NK_ID", + /* 363 */ "column_name ::= NK_ID", + /* 364 */ "function_name ::= NK_ID", + /* 365 */ "table_alias ::= NK_ID", + /* 366 */ "column_alias ::= NK_ID", + /* 367 */ "user_name ::= NK_ID", + /* 368 */ "topic_name ::= NK_ID", + /* 369 */ "stream_name ::= NK_ID", + /* 370 */ "cgroup_name ::= NK_ID", + /* 371 */ "index_name ::= NK_ID", + /* 372 */ "expr_or_subquery ::= expression", + /* 373 */ "expression ::= literal", + /* 374 */ "expression ::= pseudo_column", + /* 375 */ "expression ::= column_reference", + /* 376 */ "expression ::= function_expression", + /* 377 */ "expression ::= case_when_expression", + /* 378 */ "expression ::= NK_LP expression NK_RP", + /* 379 */ "expression ::= NK_PLUS expr_or_subquery", + /* 380 */ "expression ::= NK_MINUS expr_or_subquery", + /* 381 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", + /* 382 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", + /* 383 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", + /* 384 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", + /* 385 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", + /* 386 */ "expression ::= column_reference NK_ARROW NK_STRING", + /* 387 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", + /* 388 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", + /* 389 */ "expression_list ::= expr_or_subquery", + /* 390 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", + /* 391 */ "column_reference ::= column_name", + /* 392 */ "column_reference ::= table_name NK_DOT column_name", + /* 393 */ "pseudo_column ::= ROWTS", + /* 394 */ "pseudo_column ::= TBNAME", + /* 395 */ "pseudo_column ::= table_name NK_DOT TBNAME", + /* 396 */ "pseudo_column ::= QSTART", + /* 397 */ "pseudo_column ::= QEND", + /* 398 */ "pseudo_column ::= QDURATION", + /* 399 */ "pseudo_column ::= WSTART", + /* 400 */ "pseudo_column ::= WEND", + /* 401 */ "pseudo_column ::= WDURATION", + /* 402 */ "pseudo_column ::= IROWTS", + /* 403 */ "pseudo_column ::= ISFILLED", + /* 404 */ "pseudo_column ::= QTAGS", + /* 405 */ "function_expression ::= function_name NK_LP expression_list NK_RP", + /* 406 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", + /* 407 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", + /* 408 */ "function_expression ::= literal_func", + /* 409 */ "literal_func ::= noarg_func NK_LP NK_RP", + /* 410 */ "literal_func ::= NOW", + /* 411 */ "noarg_func ::= NOW", + /* 412 */ "noarg_func ::= TODAY", + /* 413 */ "noarg_func ::= TIMEZONE", + /* 414 */ "noarg_func ::= DATABASE", + /* 415 */ "noarg_func ::= CLIENT_VERSION", + /* 416 */ "noarg_func ::= SERVER_VERSION", + /* 417 */ "noarg_func ::= SERVER_STATUS", + /* 418 */ "noarg_func ::= CURRENT_USER", + /* 419 */ "noarg_func ::= USER", + /* 420 */ "star_func ::= COUNT", + /* 421 */ "star_func ::= FIRST", + /* 422 */ "star_func ::= LAST", + /* 423 */ "star_func ::= LAST_ROW", + /* 424 */ "star_func_para_list ::= NK_STAR", + /* 425 */ "star_func_para_list ::= other_para_list", + /* 426 */ "other_para_list ::= star_func_para", + /* 427 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", + /* 428 */ "star_func_para ::= expr_or_subquery", + /* 429 */ "star_func_para ::= table_name NK_DOT NK_STAR", + /* 430 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", + /* 431 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", + /* 432 */ "when_then_list ::= when_then_expr", + /* 433 */ "when_then_list ::= when_then_list when_then_expr", + /* 434 */ "when_then_expr ::= WHEN common_expression THEN common_expression", + /* 435 */ "case_when_else_opt ::=", + /* 436 */ "case_when_else_opt ::= ELSE common_expression", + /* 437 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", + /* 438 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", + /* 439 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", + /* 440 */ "predicate ::= expr_or_subquery IS NULL", + /* 441 */ "predicate ::= expr_or_subquery IS NOT NULL", + /* 442 */ "predicate ::= expr_or_subquery in_op in_predicate_value", + /* 443 */ "compare_op ::= NK_LT", + /* 444 */ "compare_op ::= NK_GT", + /* 445 */ "compare_op ::= NK_LE", + /* 446 */ "compare_op ::= NK_GE", + /* 447 */ "compare_op ::= NK_NE", + /* 448 */ "compare_op ::= NK_EQ", + /* 449 */ "compare_op ::= LIKE", + /* 450 */ "compare_op ::= NOT LIKE", + /* 451 */ "compare_op ::= MATCH", + /* 452 */ "compare_op ::= NMATCH", + /* 453 */ "compare_op ::= CONTAINS", + /* 454 */ "in_op ::= IN", + /* 455 */ "in_op ::= NOT IN", + /* 456 */ "in_predicate_value ::= NK_LP literal_list NK_RP", + /* 457 */ "boolean_value_expression ::= boolean_primary", + /* 458 */ "boolean_value_expression ::= NOT boolean_primary", + /* 459 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", + /* 460 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", + /* 461 */ "boolean_primary ::= predicate", + /* 462 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", + /* 463 */ "common_expression ::= expr_or_subquery", + /* 464 */ "common_expression ::= boolean_value_expression", + /* 465 */ "from_clause_opt ::=", + /* 466 */ "from_clause_opt ::= FROM table_reference_list", + /* 467 */ "table_reference_list ::= table_reference", + /* 468 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", + /* 469 */ "table_reference ::= table_primary", + /* 470 */ "table_reference ::= joined_table", + /* 471 */ "table_primary ::= table_name alias_opt", + /* 472 */ "table_primary ::= db_name NK_DOT table_name alias_opt", + /* 473 */ "table_primary ::= subquery alias_opt", + /* 474 */ "table_primary ::= parenthesized_joined_table", + /* 475 */ "alias_opt ::=", + /* 476 */ "alias_opt ::= table_alias", + /* 477 */ "alias_opt ::= AS table_alias", + /* 478 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", + /* 479 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", + /* 480 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", + /* 481 */ "join_type ::=", + /* 482 */ "join_type ::= INNER", + /* 483 */ "query_specification ::= SELECT 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", + /* 484 */ "set_quantifier_opt ::=", + /* 485 */ "set_quantifier_opt ::= DISTINCT", + /* 486 */ "set_quantifier_opt ::= ALL", + /* 487 */ "select_list ::= select_item", + /* 488 */ "select_list ::= select_list NK_COMMA select_item", + /* 489 */ "select_item ::= NK_STAR", + /* 490 */ "select_item ::= common_expression", + /* 491 */ "select_item ::= common_expression column_alias", + /* 492 */ "select_item ::= common_expression AS column_alias", + /* 493 */ "select_item ::= table_name NK_DOT NK_STAR", + /* 494 */ "where_clause_opt ::=", + /* 495 */ "where_clause_opt ::= WHERE search_condition", + /* 496 */ "partition_by_clause_opt ::=", + /* 497 */ "partition_by_clause_opt ::= PARTITION BY partition_list", + /* 498 */ "partition_list ::= partition_item", + /* 499 */ "partition_list ::= partition_list NK_COMMA partition_item", + /* 500 */ "partition_item ::= expr_or_subquery", + /* 501 */ "partition_item ::= expr_or_subquery column_alias", + /* 502 */ "partition_item ::= expr_or_subquery AS column_alias", + /* 503 */ "twindow_clause_opt ::=", + /* 504 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", + /* 505 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", + /* 506 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", + /* 507 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", + /* 508 */ "twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition", + /* 509 */ "sliding_opt ::=", + /* 510 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", + /* 511 */ "fill_opt ::=", + /* 512 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", + /* 513 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", + /* 514 */ "fill_opt ::= FILL NK_LP VALUE_F NK_COMMA literal_list NK_RP", + /* 515 */ "fill_mode ::= NONE", + /* 516 */ "fill_mode ::= PREV", + /* 517 */ "fill_mode ::= NULL", + /* 518 */ "fill_mode ::= NULL_F", + /* 519 */ "fill_mode ::= LINEAR", + /* 520 */ "fill_mode ::= NEXT", + /* 521 */ "group_by_clause_opt ::=", + /* 522 */ "group_by_clause_opt ::= GROUP BY group_by_list", + /* 523 */ "group_by_list ::= expr_or_subquery", + /* 524 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", + /* 525 */ "having_clause_opt ::=", + /* 526 */ "having_clause_opt ::= HAVING search_condition", + /* 527 */ "range_opt ::=", + /* 528 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", + /* 529 */ "every_opt ::=", + /* 530 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", + /* 531 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", + /* 532 */ "query_simple ::= query_specification", + /* 533 */ "query_simple ::= union_query_expression", + /* 534 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", + /* 535 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", + /* 536 */ "query_simple_or_subquery ::= query_simple", + /* 537 */ "query_simple_or_subquery ::= subquery", + /* 538 */ "query_or_subquery ::= query_expression", + /* 539 */ "query_or_subquery ::= subquery", + /* 540 */ "order_by_clause_opt ::=", + /* 541 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", + /* 542 */ "slimit_clause_opt ::=", + /* 543 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", + /* 544 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", + /* 545 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 546 */ "limit_clause_opt ::=", + /* 547 */ "limit_clause_opt ::= LIMIT NK_INTEGER", + /* 548 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", + /* 549 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 550 */ "subquery ::= NK_LP query_expression NK_RP", + /* 551 */ "subquery ::= NK_LP subquery NK_RP", + /* 552 */ "search_condition ::= common_expression", + /* 553 */ "sort_specification_list ::= sort_specification", + /* 554 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", + /* 555 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", + /* 556 */ "ordering_specification_opt ::=", + /* 557 */ "ordering_specification_opt ::= ASC", + /* 558 */ "ordering_specification_opt ::= DESC", + /* 559 */ "null_ordering_opt ::=", + /* 560 */ "null_ordering_opt ::= NULLS FIRST", + /* 561 */ "null_ordering_opt ::= NULLS LAST", }; #endif /* NDEBUG */ @@ -3386,248 +3371,249 @@ static const struct { { 402, -3 }, /* (316) stream_options ::= stream_options WATERMARK duration_literal */ { 402, -4 }, /* (317) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ { 402, -3 }, /* (318) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ - { 405, 0 }, /* (319) subtable_opt ::= */ - { 405, -4 }, /* (320) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - { 328, -3 }, /* (321) cmd ::= KILL CONNECTION NK_INTEGER */ - { 328, -3 }, /* (322) cmd ::= KILL QUERY NK_STRING */ - { 328, -3 }, /* (323) cmd ::= KILL TRANSACTION NK_INTEGER */ - { 328, -2 }, /* (324) cmd ::= BALANCE VGROUP */ - { 328, -4 }, /* (325) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ - { 328, -4 }, /* (326) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ - { 328, -3 }, /* (327) cmd ::= SPLIT VGROUP NK_INTEGER */ - { 407, -2 }, /* (328) dnode_list ::= DNODE NK_INTEGER */ - { 407, -3 }, /* (329) dnode_list ::= dnode_list DNODE NK_INTEGER */ - { 328, -4 }, /* (330) cmd ::= DELETE FROM full_table_name where_clause_opt */ - { 328, -1 }, /* (331) cmd ::= query_or_subquery */ - { 328, -1 }, /* (332) cmd ::= insert_query */ - { 398, -7 }, /* (333) insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ - { 398, -4 }, /* (334) insert_query ::= INSERT INTO full_table_name query_or_subquery */ - { 331, -1 }, /* (335) literal ::= NK_INTEGER */ - { 331, -1 }, /* (336) literal ::= NK_FLOAT */ - { 331, -1 }, /* (337) literal ::= NK_STRING */ - { 331, -1 }, /* (338) literal ::= NK_BOOL */ - { 331, -2 }, /* (339) literal ::= TIMESTAMP NK_STRING */ - { 331, -1 }, /* (340) literal ::= duration_literal */ - { 331, -1 }, /* (341) literal ::= NULL */ - { 331, -1 }, /* (342) literal ::= NK_QUESTION */ - { 375, -1 }, /* (343) duration_literal ::= NK_VARIABLE */ - { 409, -1 }, /* (344) signed ::= NK_INTEGER */ - { 409, -2 }, /* (345) signed ::= NK_PLUS NK_INTEGER */ - { 409, -2 }, /* (346) signed ::= NK_MINUS NK_INTEGER */ - { 409, -1 }, /* (347) signed ::= NK_FLOAT */ - { 409, -2 }, /* (348) signed ::= NK_PLUS NK_FLOAT */ - { 409, -2 }, /* (349) signed ::= NK_MINUS NK_FLOAT */ - { 364, -1 }, /* (350) signed_literal ::= signed */ - { 364, -1 }, /* (351) signed_literal ::= NK_STRING */ - { 364, -1 }, /* (352) signed_literal ::= NK_BOOL */ - { 364, -2 }, /* (353) signed_literal ::= TIMESTAMP NK_STRING */ - { 364, -1 }, /* (354) signed_literal ::= duration_literal */ - { 364, -1 }, /* (355) signed_literal ::= NULL */ - { 364, -1 }, /* (356) signed_literal ::= literal_func */ - { 364, -1 }, /* (357) signed_literal ::= NK_QUESTION */ - { 411, -1 }, /* (358) literal_list ::= signed_literal */ - { 411, -3 }, /* (359) literal_list ::= literal_list NK_COMMA signed_literal */ - { 339, -1 }, /* (360) db_name ::= NK_ID */ - { 370, -1 }, /* (361) table_name ::= NK_ID */ - { 362, -1 }, /* (362) column_name ::= NK_ID */ - { 377, -1 }, /* (363) function_name ::= NK_ID */ - { 412, -1 }, /* (364) table_alias ::= NK_ID */ - { 385, -1 }, /* (365) column_alias ::= NK_ID */ - { 333, -1 }, /* (366) user_name ::= NK_ID */ - { 340, -1 }, /* (367) topic_name ::= NK_ID */ - { 401, -1 }, /* (368) stream_name ::= NK_ID */ - { 395, -1 }, /* (369) cgroup_name ::= NK_ID */ - { 388, -1 }, /* (370) index_name ::= NK_ID */ - { 413, -1 }, /* (371) expr_or_subquery ::= expression */ - { 406, -1 }, /* (372) expression ::= literal */ - { 406, -1 }, /* (373) expression ::= pseudo_column */ - { 406, -1 }, /* (374) expression ::= column_reference */ - { 406, -1 }, /* (375) expression ::= function_expression */ - { 406, -1 }, /* (376) expression ::= case_when_expression */ - { 406, -3 }, /* (377) expression ::= NK_LP expression NK_RP */ - { 406, -2 }, /* (378) expression ::= NK_PLUS expr_or_subquery */ - { 406, -2 }, /* (379) expression ::= NK_MINUS expr_or_subquery */ - { 406, -3 }, /* (380) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ - { 406, -3 }, /* (381) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ - { 406, -3 }, /* (382) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ - { 406, -3 }, /* (383) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ - { 406, -3 }, /* (384) expression ::= expr_or_subquery NK_REM expr_or_subquery */ - { 406, -3 }, /* (385) expression ::= column_reference NK_ARROW NK_STRING */ - { 406, -3 }, /* (386) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ - { 406, -3 }, /* (387) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ - { 367, -1 }, /* (388) expression_list ::= expr_or_subquery */ - { 367, -3 }, /* (389) expression_list ::= expression_list NK_COMMA expr_or_subquery */ - { 415, -1 }, /* (390) column_reference ::= column_name */ - { 415, -3 }, /* (391) column_reference ::= table_name NK_DOT column_name */ - { 414, -1 }, /* (392) pseudo_column ::= ROWTS */ - { 414, -1 }, /* (393) pseudo_column ::= TBNAME */ - { 414, -3 }, /* (394) pseudo_column ::= table_name NK_DOT TBNAME */ - { 414, -1 }, /* (395) pseudo_column ::= QSTART */ - { 414, -1 }, /* (396) pseudo_column ::= QEND */ - { 414, -1 }, /* (397) pseudo_column ::= QDURATION */ - { 414, -1 }, /* (398) pseudo_column ::= WSTART */ - { 414, -1 }, /* (399) pseudo_column ::= WEND */ - { 414, -1 }, /* (400) pseudo_column ::= WDURATION */ - { 414, -1 }, /* (401) pseudo_column ::= IROWTS */ - { 414, -1 }, /* (402) pseudo_column ::= ISFILLED */ - { 414, -1 }, /* (403) pseudo_column ::= QTAGS */ - { 416, -4 }, /* (404) function_expression ::= function_name NK_LP expression_list NK_RP */ - { 416, -4 }, /* (405) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ - { 416, -6 }, /* (406) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ - { 416, -1 }, /* (407) function_expression ::= literal_func */ - { 410, -3 }, /* (408) literal_func ::= noarg_func NK_LP NK_RP */ - { 410, -1 }, /* (409) literal_func ::= NOW */ - { 420, -1 }, /* (410) noarg_func ::= NOW */ - { 420, -1 }, /* (411) noarg_func ::= TODAY */ - { 420, -1 }, /* (412) noarg_func ::= TIMEZONE */ - { 420, -1 }, /* (413) noarg_func ::= DATABASE */ - { 420, -1 }, /* (414) noarg_func ::= CLIENT_VERSION */ - { 420, -1 }, /* (415) noarg_func ::= SERVER_VERSION */ - { 420, -1 }, /* (416) noarg_func ::= SERVER_STATUS */ - { 420, -1 }, /* (417) noarg_func ::= CURRENT_USER */ - { 420, -1 }, /* (418) noarg_func ::= USER */ - { 418, -1 }, /* (419) star_func ::= COUNT */ - { 418, -1 }, /* (420) star_func ::= FIRST */ - { 418, -1 }, /* (421) star_func ::= LAST */ - { 418, -1 }, /* (422) star_func ::= LAST_ROW */ - { 419, -1 }, /* (423) star_func_para_list ::= NK_STAR */ - { 419, -1 }, /* (424) star_func_para_list ::= other_para_list */ - { 421, -1 }, /* (425) other_para_list ::= star_func_para */ - { 421, -3 }, /* (426) other_para_list ::= other_para_list NK_COMMA star_func_para */ - { 422, -1 }, /* (427) star_func_para ::= expr_or_subquery */ - { 422, -3 }, /* (428) star_func_para ::= table_name NK_DOT NK_STAR */ - { 417, -4 }, /* (429) case_when_expression ::= CASE when_then_list case_when_else_opt END */ - { 417, -5 }, /* (430) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ - { 423, -1 }, /* (431) when_then_list ::= when_then_expr */ - { 423, -2 }, /* (432) when_then_list ::= when_then_list when_then_expr */ - { 426, -4 }, /* (433) when_then_expr ::= WHEN common_expression THEN common_expression */ - { 424, 0 }, /* (434) case_when_else_opt ::= */ - { 424, -2 }, /* (435) case_when_else_opt ::= ELSE common_expression */ - { 427, -3 }, /* (436) predicate ::= expr_or_subquery compare_op expr_or_subquery */ - { 427, -5 }, /* (437) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ - { 427, -6 }, /* (438) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ - { 427, -3 }, /* (439) predicate ::= expr_or_subquery IS NULL */ - { 427, -4 }, /* (440) predicate ::= expr_or_subquery IS NOT NULL */ - { 427, -3 }, /* (441) predicate ::= expr_or_subquery in_op in_predicate_value */ - { 428, -1 }, /* (442) compare_op ::= NK_LT */ - { 428, -1 }, /* (443) compare_op ::= NK_GT */ - { 428, -1 }, /* (444) compare_op ::= NK_LE */ - { 428, -1 }, /* (445) compare_op ::= NK_GE */ - { 428, -1 }, /* (446) compare_op ::= NK_NE */ - { 428, -1 }, /* (447) compare_op ::= NK_EQ */ - { 428, -1 }, /* (448) compare_op ::= LIKE */ - { 428, -2 }, /* (449) compare_op ::= NOT LIKE */ - { 428, -1 }, /* (450) compare_op ::= MATCH */ - { 428, -1 }, /* (451) compare_op ::= NMATCH */ - { 428, -1 }, /* (452) compare_op ::= CONTAINS */ - { 429, -1 }, /* (453) in_op ::= IN */ - { 429, -2 }, /* (454) in_op ::= NOT IN */ - { 430, -3 }, /* (455) in_predicate_value ::= NK_LP literal_list NK_RP */ - { 431, -1 }, /* (456) boolean_value_expression ::= boolean_primary */ - { 431, -2 }, /* (457) boolean_value_expression ::= NOT boolean_primary */ - { 431, -3 }, /* (458) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ - { 431, -3 }, /* (459) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ - { 432, -1 }, /* (460) boolean_primary ::= predicate */ - { 432, -3 }, /* (461) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ - { 425, -1 }, /* (462) common_expression ::= expr_or_subquery */ - { 425, -1 }, /* (463) common_expression ::= boolean_value_expression */ - { 433, 0 }, /* (464) from_clause_opt ::= */ - { 433, -2 }, /* (465) from_clause_opt ::= FROM table_reference_list */ - { 434, -1 }, /* (466) table_reference_list ::= table_reference */ - { 434, -3 }, /* (467) table_reference_list ::= table_reference_list NK_COMMA table_reference */ - { 435, -1 }, /* (468) table_reference ::= table_primary */ - { 435, -1 }, /* (469) table_reference ::= joined_table */ - { 436, -2 }, /* (470) table_primary ::= table_name alias_opt */ - { 436, -4 }, /* (471) table_primary ::= db_name NK_DOT table_name alias_opt */ - { 436, -2 }, /* (472) table_primary ::= subquery alias_opt */ - { 436, -1 }, /* (473) table_primary ::= parenthesized_joined_table */ - { 438, 0 }, /* (474) alias_opt ::= */ - { 438, -1 }, /* (475) alias_opt ::= table_alias */ - { 438, -2 }, /* (476) alias_opt ::= AS table_alias */ - { 440, -3 }, /* (477) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - { 440, -3 }, /* (478) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ - { 437, -6 }, /* (479) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ - { 441, 0 }, /* (480) join_type ::= */ - { 441, -1 }, /* (481) join_type ::= INNER */ - { 443, -12 }, /* (482) query_specification ::= SELECT 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 */ - { 444, 0 }, /* (483) set_quantifier_opt ::= */ - { 444, -1 }, /* (484) set_quantifier_opt ::= DISTINCT */ - { 444, -1 }, /* (485) set_quantifier_opt ::= ALL */ - { 445, -1 }, /* (486) select_list ::= select_item */ - { 445, -3 }, /* (487) select_list ::= select_list NK_COMMA select_item */ - { 453, -1 }, /* (488) select_item ::= NK_STAR */ - { 453, -1 }, /* (489) select_item ::= common_expression */ - { 453, -2 }, /* (490) select_item ::= common_expression column_alias */ - { 453, -3 }, /* (491) select_item ::= common_expression AS column_alias */ - { 453, -3 }, /* (492) select_item ::= table_name NK_DOT NK_STAR */ - { 408, 0 }, /* (493) where_clause_opt ::= */ - { 408, -2 }, /* (494) where_clause_opt ::= WHERE search_condition */ - { 446, 0 }, /* (495) partition_by_clause_opt ::= */ - { 446, -3 }, /* (496) partition_by_clause_opt ::= PARTITION BY partition_list */ - { 454, -1 }, /* (497) partition_list ::= partition_item */ - { 454, -3 }, /* (498) partition_list ::= partition_list NK_COMMA partition_item */ - { 455, -1 }, /* (499) partition_item ::= expr_or_subquery */ - { 455, -2 }, /* (500) partition_item ::= expr_or_subquery column_alias */ - { 455, -3 }, /* (501) partition_item ::= expr_or_subquery AS column_alias */ - { 450, 0 }, /* (502) twindow_clause_opt ::= */ - { 450, -6 }, /* (503) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ - { 450, -4 }, /* (504) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ - { 450, -6 }, /* (505) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ - { 450, -8 }, /* (506) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ - { 450, -7 }, /* (507) twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ - { 390, 0 }, /* (508) sliding_opt ::= */ - { 390, -4 }, /* (509) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ - { 449, 0 }, /* (510) fill_opt ::= */ - { 449, -4 }, /* (511) fill_opt ::= FILL NK_LP fill_mode NK_RP */ - { 449, -6 }, /* (512) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ - { 449, -6 }, /* (513) fill_opt ::= FILL NK_LP VALUE_F NK_COMMA literal_list NK_RP */ - { 456, -1 }, /* (514) fill_mode ::= NONE */ - { 456, -1 }, /* (515) fill_mode ::= PREV */ - { 456, -1 }, /* (516) fill_mode ::= NULL */ - { 456, -1 }, /* (517) fill_mode ::= NULL_F */ - { 456, -1 }, /* (518) fill_mode ::= LINEAR */ - { 456, -1 }, /* (519) fill_mode ::= NEXT */ - { 451, 0 }, /* (520) group_by_clause_opt ::= */ - { 451, -3 }, /* (521) group_by_clause_opt ::= GROUP BY group_by_list */ - { 457, -1 }, /* (522) group_by_list ::= expr_or_subquery */ - { 457, -3 }, /* (523) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ - { 452, 0 }, /* (524) having_clause_opt ::= */ - { 452, -2 }, /* (525) having_clause_opt ::= HAVING search_condition */ - { 447, 0 }, /* (526) range_opt ::= */ - { 447, -6 }, /* (527) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ - { 448, 0 }, /* (528) every_opt ::= */ - { 448, -4 }, /* (529) every_opt ::= EVERY NK_LP duration_literal NK_RP */ - { 458, -4 }, /* (530) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ - { 459, -1 }, /* (531) query_simple ::= query_specification */ - { 459, -1 }, /* (532) query_simple ::= union_query_expression */ - { 463, -4 }, /* (533) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ - { 463, -3 }, /* (534) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ - { 464, -1 }, /* (535) query_simple_or_subquery ::= query_simple */ - { 464, -1 }, /* (536) query_simple_or_subquery ::= subquery */ - { 394, -1 }, /* (537) query_or_subquery ::= query_expression */ - { 394, -1 }, /* (538) query_or_subquery ::= subquery */ - { 460, 0 }, /* (539) order_by_clause_opt ::= */ - { 460, -3 }, /* (540) order_by_clause_opt ::= ORDER BY sort_specification_list */ - { 461, 0 }, /* (541) slimit_clause_opt ::= */ - { 461, -2 }, /* (542) slimit_clause_opt ::= SLIMIT NK_INTEGER */ - { 461, -4 }, /* (543) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - { 461, -4 }, /* (544) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 462, 0 }, /* (545) limit_clause_opt ::= */ - { 462, -2 }, /* (546) limit_clause_opt ::= LIMIT NK_INTEGER */ - { 462, -4 }, /* (547) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ - { 462, -4 }, /* (548) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 439, -3 }, /* (549) subquery ::= NK_LP query_expression NK_RP */ - { 439, -3 }, /* (550) subquery ::= NK_LP subquery NK_RP */ - { 442, -1 }, /* (551) search_condition ::= common_expression */ - { 465, -1 }, /* (552) sort_specification_list ::= sort_specification */ - { 465, -3 }, /* (553) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ - { 466, -3 }, /* (554) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ - { 467, 0 }, /* (555) ordering_specification_opt ::= */ - { 467, -1 }, /* (556) ordering_specification_opt ::= ASC */ - { 467, -1 }, /* (557) ordering_specification_opt ::= DESC */ - { 468, 0 }, /* (558) null_ordering_opt ::= */ - { 468, -2 }, /* (559) null_ordering_opt ::= NULLS FIRST */ - { 468, -2 }, /* (560) null_ordering_opt ::= NULLS LAST */ + { 402, -4 }, /* (319) stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ + { 405, 0 }, /* (320) subtable_opt ::= */ + { 405, -4 }, /* (321) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + { 328, -3 }, /* (322) cmd ::= KILL CONNECTION NK_INTEGER */ + { 328, -3 }, /* (323) cmd ::= KILL QUERY NK_STRING */ + { 328, -3 }, /* (324) cmd ::= KILL TRANSACTION NK_INTEGER */ + { 328, -2 }, /* (325) cmd ::= BALANCE VGROUP */ + { 328, -4 }, /* (326) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + { 328, -4 }, /* (327) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ + { 328, -3 }, /* (328) cmd ::= SPLIT VGROUP NK_INTEGER */ + { 407, -2 }, /* (329) dnode_list ::= DNODE NK_INTEGER */ + { 407, -3 }, /* (330) dnode_list ::= dnode_list DNODE NK_INTEGER */ + { 328, -4 }, /* (331) cmd ::= DELETE FROM full_table_name where_clause_opt */ + { 328, -1 }, /* (332) cmd ::= query_or_subquery */ + { 328, -1 }, /* (333) cmd ::= insert_query */ + { 398, -7 }, /* (334) insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ + { 398, -4 }, /* (335) insert_query ::= INSERT INTO full_table_name query_or_subquery */ + { 331, -1 }, /* (336) literal ::= NK_INTEGER */ + { 331, -1 }, /* (337) literal ::= NK_FLOAT */ + { 331, -1 }, /* (338) literal ::= NK_STRING */ + { 331, -1 }, /* (339) literal ::= NK_BOOL */ + { 331, -2 }, /* (340) literal ::= TIMESTAMP NK_STRING */ + { 331, -1 }, /* (341) literal ::= duration_literal */ + { 331, -1 }, /* (342) literal ::= NULL */ + { 331, -1 }, /* (343) literal ::= NK_QUESTION */ + { 375, -1 }, /* (344) duration_literal ::= NK_VARIABLE */ + { 409, -1 }, /* (345) signed ::= NK_INTEGER */ + { 409, -2 }, /* (346) signed ::= NK_PLUS NK_INTEGER */ + { 409, -2 }, /* (347) signed ::= NK_MINUS NK_INTEGER */ + { 409, -1 }, /* (348) signed ::= NK_FLOAT */ + { 409, -2 }, /* (349) signed ::= NK_PLUS NK_FLOAT */ + { 409, -2 }, /* (350) signed ::= NK_MINUS NK_FLOAT */ + { 364, -1 }, /* (351) signed_literal ::= signed */ + { 364, -1 }, /* (352) signed_literal ::= NK_STRING */ + { 364, -1 }, /* (353) signed_literal ::= NK_BOOL */ + { 364, -2 }, /* (354) signed_literal ::= TIMESTAMP NK_STRING */ + { 364, -1 }, /* (355) signed_literal ::= duration_literal */ + { 364, -1 }, /* (356) signed_literal ::= NULL */ + { 364, -1 }, /* (357) signed_literal ::= literal_func */ + { 364, -1 }, /* (358) signed_literal ::= NK_QUESTION */ + { 411, -1 }, /* (359) literal_list ::= signed_literal */ + { 411, -3 }, /* (360) literal_list ::= literal_list NK_COMMA signed_literal */ + { 339, -1 }, /* (361) db_name ::= NK_ID */ + { 370, -1 }, /* (362) table_name ::= NK_ID */ + { 362, -1 }, /* (363) column_name ::= NK_ID */ + { 377, -1 }, /* (364) function_name ::= NK_ID */ + { 412, -1 }, /* (365) table_alias ::= NK_ID */ + { 385, -1 }, /* (366) column_alias ::= NK_ID */ + { 333, -1 }, /* (367) user_name ::= NK_ID */ + { 340, -1 }, /* (368) topic_name ::= NK_ID */ + { 401, -1 }, /* (369) stream_name ::= NK_ID */ + { 395, -1 }, /* (370) cgroup_name ::= NK_ID */ + { 388, -1 }, /* (371) index_name ::= NK_ID */ + { 413, -1 }, /* (372) expr_or_subquery ::= expression */ + { 406, -1 }, /* (373) expression ::= literal */ + { 406, -1 }, /* (374) expression ::= pseudo_column */ + { 406, -1 }, /* (375) expression ::= column_reference */ + { 406, -1 }, /* (376) expression ::= function_expression */ + { 406, -1 }, /* (377) expression ::= case_when_expression */ + { 406, -3 }, /* (378) expression ::= NK_LP expression NK_RP */ + { 406, -2 }, /* (379) expression ::= NK_PLUS expr_or_subquery */ + { 406, -2 }, /* (380) expression ::= NK_MINUS expr_or_subquery */ + { 406, -3 }, /* (381) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + { 406, -3 }, /* (382) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + { 406, -3 }, /* (383) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + { 406, -3 }, /* (384) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + { 406, -3 }, /* (385) expression ::= expr_or_subquery NK_REM expr_or_subquery */ + { 406, -3 }, /* (386) expression ::= column_reference NK_ARROW NK_STRING */ + { 406, -3 }, /* (387) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + { 406, -3 }, /* (388) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + { 367, -1 }, /* (389) expression_list ::= expr_or_subquery */ + { 367, -3 }, /* (390) expression_list ::= expression_list NK_COMMA expr_or_subquery */ + { 415, -1 }, /* (391) column_reference ::= column_name */ + { 415, -3 }, /* (392) column_reference ::= table_name NK_DOT column_name */ + { 414, -1 }, /* (393) pseudo_column ::= ROWTS */ + { 414, -1 }, /* (394) pseudo_column ::= TBNAME */ + { 414, -3 }, /* (395) pseudo_column ::= table_name NK_DOT TBNAME */ + { 414, -1 }, /* (396) pseudo_column ::= QSTART */ + { 414, -1 }, /* (397) pseudo_column ::= QEND */ + { 414, -1 }, /* (398) pseudo_column ::= QDURATION */ + { 414, -1 }, /* (399) pseudo_column ::= WSTART */ + { 414, -1 }, /* (400) pseudo_column ::= WEND */ + { 414, -1 }, /* (401) pseudo_column ::= WDURATION */ + { 414, -1 }, /* (402) pseudo_column ::= IROWTS */ + { 414, -1 }, /* (403) pseudo_column ::= ISFILLED */ + { 414, -1 }, /* (404) pseudo_column ::= QTAGS */ + { 416, -4 }, /* (405) function_expression ::= function_name NK_LP expression_list NK_RP */ + { 416, -4 }, /* (406) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ + { 416, -6 }, /* (407) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ + { 416, -1 }, /* (408) function_expression ::= literal_func */ + { 410, -3 }, /* (409) literal_func ::= noarg_func NK_LP NK_RP */ + { 410, -1 }, /* (410) literal_func ::= NOW */ + { 420, -1 }, /* (411) noarg_func ::= NOW */ + { 420, -1 }, /* (412) noarg_func ::= TODAY */ + { 420, -1 }, /* (413) noarg_func ::= TIMEZONE */ + { 420, -1 }, /* (414) noarg_func ::= DATABASE */ + { 420, -1 }, /* (415) noarg_func ::= CLIENT_VERSION */ + { 420, -1 }, /* (416) noarg_func ::= SERVER_VERSION */ + { 420, -1 }, /* (417) noarg_func ::= SERVER_STATUS */ + { 420, -1 }, /* (418) noarg_func ::= CURRENT_USER */ + { 420, -1 }, /* (419) noarg_func ::= USER */ + { 418, -1 }, /* (420) star_func ::= COUNT */ + { 418, -1 }, /* (421) star_func ::= FIRST */ + { 418, -1 }, /* (422) star_func ::= LAST */ + { 418, -1 }, /* (423) star_func ::= LAST_ROW */ + { 419, -1 }, /* (424) star_func_para_list ::= NK_STAR */ + { 419, -1 }, /* (425) star_func_para_list ::= other_para_list */ + { 421, -1 }, /* (426) other_para_list ::= star_func_para */ + { 421, -3 }, /* (427) other_para_list ::= other_para_list NK_COMMA star_func_para */ + { 422, -1 }, /* (428) star_func_para ::= expr_or_subquery */ + { 422, -3 }, /* (429) star_func_para ::= table_name NK_DOT NK_STAR */ + { 417, -4 }, /* (430) case_when_expression ::= CASE when_then_list case_when_else_opt END */ + { 417, -5 }, /* (431) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ + { 423, -1 }, /* (432) when_then_list ::= when_then_expr */ + { 423, -2 }, /* (433) when_then_list ::= when_then_list when_then_expr */ + { 426, -4 }, /* (434) when_then_expr ::= WHEN common_expression THEN common_expression */ + { 424, 0 }, /* (435) case_when_else_opt ::= */ + { 424, -2 }, /* (436) case_when_else_opt ::= ELSE common_expression */ + { 427, -3 }, /* (437) predicate ::= expr_or_subquery compare_op expr_or_subquery */ + { 427, -5 }, /* (438) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + { 427, -6 }, /* (439) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + { 427, -3 }, /* (440) predicate ::= expr_or_subquery IS NULL */ + { 427, -4 }, /* (441) predicate ::= expr_or_subquery IS NOT NULL */ + { 427, -3 }, /* (442) predicate ::= expr_or_subquery in_op in_predicate_value */ + { 428, -1 }, /* (443) compare_op ::= NK_LT */ + { 428, -1 }, /* (444) compare_op ::= NK_GT */ + { 428, -1 }, /* (445) compare_op ::= NK_LE */ + { 428, -1 }, /* (446) compare_op ::= NK_GE */ + { 428, -1 }, /* (447) compare_op ::= NK_NE */ + { 428, -1 }, /* (448) compare_op ::= NK_EQ */ + { 428, -1 }, /* (449) compare_op ::= LIKE */ + { 428, -2 }, /* (450) compare_op ::= NOT LIKE */ + { 428, -1 }, /* (451) compare_op ::= MATCH */ + { 428, -1 }, /* (452) compare_op ::= NMATCH */ + { 428, -1 }, /* (453) compare_op ::= CONTAINS */ + { 429, -1 }, /* (454) in_op ::= IN */ + { 429, -2 }, /* (455) in_op ::= NOT IN */ + { 430, -3 }, /* (456) in_predicate_value ::= NK_LP literal_list NK_RP */ + { 431, -1 }, /* (457) boolean_value_expression ::= boolean_primary */ + { 431, -2 }, /* (458) boolean_value_expression ::= NOT boolean_primary */ + { 431, -3 }, /* (459) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + { 431, -3 }, /* (460) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + { 432, -1 }, /* (461) boolean_primary ::= predicate */ + { 432, -3 }, /* (462) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ + { 425, -1 }, /* (463) common_expression ::= expr_or_subquery */ + { 425, -1 }, /* (464) common_expression ::= boolean_value_expression */ + { 433, 0 }, /* (465) from_clause_opt ::= */ + { 433, -2 }, /* (466) from_clause_opt ::= FROM table_reference_list */ + { 434, -1 }, /* (467) table_reference_list ::= table_reference */ + { 434, -3 }, /* (468) table_reference_list ::= table_reference_list NK_COMMA table_reference */ + { 435, -1 }, /* (469) table_reference ::= table_primary */ + { 435, -1 }, /* (470) table_reference ::= joined_table */ + { 436, -2 }, /* (471) table_primary ::= table_name alias_opt */ + { 436, -4 }, /* (472) table_primary ::= db_name NK_DOT table_name alias_opt */ + { 436, -2 }, /* (473) table_primary ::= subquery alias_opt */ + { 436, -1 }, /* (474) table_primary ::= parenthesized_joined_table */ + { 438, 0 }, /* (475) alias_opt ::= */ + { 438, -1 }, /* (476) alias_opt ::= table_alias */ + { 438, -2 }, /* (477) alias_opt ::= AS table_alias */ + { 440, -3 }, /* (478) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + { 440, -3 }, /* (479) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ + { 437, -6 }, /* (480) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ + { 441, 0 }, /* (481) join_type ::= */ + { 441, -1 }, /* (482) join_type ::= INNER */ + { 443, -12 }, /* (483) query_specification ::= SELECT 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 */ + { 444, 0 }, /* (484) set_quantifier_opt ::= */ + { 444, -1 }, /* (485) set_quantifier_opt ::= DISTINCT */ + { 444, -1 }, /* (486) set_quantifier_opt ::= ALL */ + { 445, -1 }, /* (487) select_list ::= select_item */ + { 445, -3 }, /* (488) select_list ::= select_list NK_COMMA select_item */ + { 453, -1 }, /* (489) select_item ::= NK_STAR */ + { 453, -1 }, /* (490) select_item ::= common_expression */ + { 453, -2 }, /* (491) select_item ::= common_expression column_alias */ + { 453, -3 }, /* (492) select_item ::= common_expression AS column_alias */ + { 453, -3 }, /* (493) select_item ::= table_name NK_DOT NK_STAR */ + { 408, 0 }, /* (494) where_clause_opt ::= */ + { 408, -2 }, /* (495) where_clause_opt ::= WHERE search_condition */ + { 446, 0 }, /* (496) partition_by_clause_opt ::= */ + { 446, -3 }, /* (497) partition_by_clause_opt ::= PARTITION BY partition_list */ + { 454, -1 }, /* (498) partition_list ::= partition_item */ + { 454, -3 }, /* (499) partition_list ::= partition_list NK_COMMA partition_item */ + { 455, -1 }, /* (500) partition_item ::= expr_or_subquery */ + { 455, -2 }, /* (501) partition_item ::= expr_or_subquery column_alias */ + { 455, -3 }, /* (502) partition_item ::= expr_or_subquery AS column_alias */ + { 450, 0 }, /* (503) twindow_clause_opt ::= */ + { 450, -6 }, /* (504) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ + { 450, -4 }, /* (505) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ + { 450, -6 }, /* (506) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ + { 450, -8 }, /* (507) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ + { 450, -7 }, /* (508) twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ + { 390, 0 }, /* (509) sliding_opt ::= */ + { 390, -4 }, /* (510) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ + { 449, 0 }, /* (511) fill_opt ::= */ + { 449, -4 }, /* (512) fill_opt ::= FILL NK_LP fill_mode NK_RP */ + { 449, -6 }, /* (513) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ + { 449, -6 }, /* (514) fill_opt ::= FILL NK_LP VALUE_F NK_COMMA literal_list NK_RP */ + { 456, -1 }, /* (515) fill_mode ::= NONE */ + { 456, -1 }, /* (516) fill_mode ::= PREV */ + { 456, -1 }, /* (517) fill_mode ::= NULL */ + { 456, -1 }, /* (518) fill_mode ::= NULL_F */ + { 456, -1 }, /* (519) fill_mode ::= LINEAR */ + { 456, -1 }, /* (520) fill_mode ::= NEXT */ + { 451, 0 }, /* (521) group_by_clause_opt ::= */ + { 451, -3 }, /* (522) group_by_clause_opt ::= GROUP BY group_by_list */ + { 457, -1 }, /* (523) group_by_list ::= expr_or_subquery */ + { 457, -3 }, /* (524) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ + { 452, 0 }, /* (525) having_clause_opt ::= */ + { 452, -2 }, /* (526) having_clause_opt ::= HAVING search_condition */ + { 447, 0 }, /* (527) range_opt ::= */ + { 447, -6 }, /* (528) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ + { 448, 0 }, /* (529) every_opt ::= */ + { 448, -4 }, /* (530) every_opt ::= EVERY NK_LP duration_literal NK_RP */ + { 458, -4 }, /* (531) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + { 459, -1 }, /* (532) query_simple ::= query_specification */ + { 459, -1 }, /* (533) query_simple ::= union_query_expression */ + { 463, -4 }, /* (534) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ + { 463, -3 }, /* (535) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ + { 464, -1 }, /* (536) query_simple_or_subquery ::= query_simple */ + { 464, -1 }, /* (537) query_simple_or_subquery ::= subquery */ + { 394, -1 }, /* (538) query_or_subquery ::= query_expression */ + { 394, -1 }, /* (539) query_or_subquery ::= subquery */ + { 460, 0 }, /* (540) order_by_clause_opt ::= */ + { 460, -3 }, /* (541) order_by_clause_opt ::= ORDER BY sort_specification_list */ + { 461, 0 }, /* (542) slimit_clause_opt ::= */ + { 461, -2 }, /* (543) slimit_clause_opt ::= SLIMIT NK_INTEGER */ + { 461, -4 }, /* (544) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + { 461, -4 }, /* (545) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 462, 0 }, /* (546) limit_clause_opt ::= */ + { 462, -2 }, /* (547) limit_clause_opt ::= LIMIT NK_INTEGER */ + { 462, -4 }, /* (548) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ + { 462, -4 }, /* (549) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 439, -3 }, /* (550) subquery ::= NK_LP query_expression NK_RP */ + { 439, -3 }, /* (551) subquery ::= NK_LP subquery NK_RP */ + { 442, -1 }, /* (552) search_condition ::= common_expression */ + { 465, -1 }, /* (553) sort_specification_list ::= sort_specification */ + { 465, -3 }, /* (554) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ + { 466, -3 }, /* (555) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ + { 467, 0 }, /* (556) ordering_specification_opt ::= */ + { 467, -1 }, /* (557) ordering_specification_opt ::= ASC */ + { 467, -1 }, /* (558) ordering_specification_opt ::= DESC */ + { 468, 0 }, /* (559) null_ordering_opt ::= */ + { 468, -2 }, /* (560) null_ordering_opt ::= NULLS FIRST */ + { 468, -2 }, /* (561) null_ordering_opt ::= NULLS LAST */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -3821,7 +3807,7 @@ static YYACTIONTYPE yy_reduce( break; case 42: /* priv_level ::= topic_name */ case 273: /* sma_func_name ::= function_name */ yytestcase(yyruleno==273); - case 475: /* alias_opt ::= table_alias */ yytestcase(yyruleno==475); + case 476: /* alias_opt ::= table_alias */ yytestcase(yyruleno==476); { yylhsminor.yy225 = yymsp[0].minor.yy225; } yymsp[0].minor.yy225 = yylhsminor.yy225; break; @@ -3856,30 +3842,30 @@ static YYACTIONTYPE yy_reduce( case 275: /* sma_func_name ::= FIRST */ yytestcase(yyruleno==275); case 276: /* sma_func_name ::= LAST */ yytestcase(yyruleno==276); case 277: /* sma_func_name ::= LAST_ROW */ yytestcase(yyruleno==277); - case 360: /* db_name ::= NK_ID */ yytestcase(yyruleno==360); - case 361: /* table_name ::= NK_ID */ yytestcase(yyruleno==361); - case 362: /* column_name ::= NK_ID */ yytestcase(yyruleno==362); - case 363: /* function_name ::= NK_ID */ yytestcase(yyruleno==363); - case 364: /* table_alias ::= NK_ID */ yytestcase(yyruleno==364); - case 365: /* column_alias ::= NK_ID */ yytestcase(yyruleno==365); - case 366: /* user_name ::= NK_ID */ yytestcase(yyruleno==366); - case 367: /* topic_name ::= NK_ID */ yytestcase(yyruleno==367); - case 368: /* stream_name ::= NK_ID */ yytestcase(yyruleno==368); - case 369: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==369); - case 370: /* index_name ::= NK_ID */ yytestcase(yyruleno==370); - case 410: /* noarg_func ::= NOW */ yytestcase(yyruleno==410); - case 411: /* noarg_func ::= TODAY */ yytestcase(yyruleno==411); - case 412: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==412); - case 413: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==413); - case 414: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==414); - case 415: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==415); - case 416: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==416); - case 417: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==417); - case 418: /* noarg_func ::= USER */ yytestcase(yyruleno==418); - case 419: /* star_func ::= COUNT */ yytestcase(yyruleno==419); - case 420: /* star_func ::= FIRST */ yytestcase(yyruleno==420); - case 421: /* star_func ::= LAST */ yytestcase(yyruleno==421); - case 422: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==422); + case 361: /* db_name ::= NK_ID */ yytestcase(yyruleno==361); + case 362: /* table_name ::= NK_ID */ yytestcase(yyruleno==362); + case 363: /* column_name ::= NK_ID */ yytestcase(yyruleno==363); + case 364: /* function_name ::= NK_ID */ yytestcase(yyruleno==364); + case 365: /* table_alias ::= NK_ID */ yytestcase(yyruleno==365); + case 366: /* column_alias ::= NK_ID */ yytestcase(yyruleno==366); + case 367: /* user_name ::= NK_ID */ yytestcase(yyruleno==367); + case 368: /* topic_name ::= NK_ID */ yytestcase(yyruleno==368); + case 369: /* stream_name ::= NK_ID */ yytestcase(yyruleno==369); + case 370: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==370); + case 371: /* index_name ::= NK_ID */ yytestcase(yyruleno==371); + case 411: /* noarg_func ::= NOW */ yytestcase(yyruleno==411); + case 412: /* noarg_func ::= TODAY */ yytestcase(yyruleno==412); + case 413: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==413); + case 414: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==414); + case 415: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==415); + case 416: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==416); + case 417: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==417); + case 418: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==418); + case 419: /* noarg_func ::= USER */ yytestcase(yyruleno==419); + case 420: /* star_func ::= COUNT */ yytestcase(yyruleno==420); + case 421: /* star_func ::= FIRST */ yytestcase(yyruleno==421); + case 422: /* star_func ::= LAST */ yytestcase(yyruleno==422); + case 423: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==423); { yylhsminor.yy225 = yymsp[0].minor.yy0; } yymsp[0].minor.yy225 = yylhsminor.yy225; break; @@ -3888,13 +3874,13 @@ static YYACTIONTYPE yy_reduce( case 76: /* exists_opt ::= */ yytestcase(yyruleno==76); case 294: /* analyze_opt ::= */ yytestcase(yyruleno==294); case 301: /* agg_func_opt ::= */ yytestcase(yyruleno==301); - case 483: /* set_quantifier_opt ::= */ yytestcase(yyruleno==483); + case 484: /* set_quantifier_opt ::= */ yytestcase(yyruleno==484); { yymsp[1].minor.yy103 = false; } break; case 55: /* force_opt ::= FORCE */ case 295: /* analyze_opt ::= ANALYZE */ yytestcase(yyruleno==295); case 302: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==302); - case 484: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==484); + case 485: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==485); { yymsp[0].minor.yy103 = true; } break; case 56: /* cmd ::= ALTER LOCAL NK_STRING */ @@ -4120,7 +4106,7 @@ static YYACTIONTYPE yy_reduce( yymsp[0].minor.yy110 = yylhsminor.yy110; break; case 121: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ - case 329: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==329); + case 330: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==330); { yylhsminor.yy110 = addNodeToList(pCxt, yymsp[-2].minor.yy110, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } yymsp[-2].minor.yy110 = yylhsminor.yy110; break; @@ -4140,12 +4126,12 @@ static YYACTIONTYPE yy_reduce( case 205: /* col_name_list ::= col_name */ yytestcase(yyruleno==205); case 256: /* tag_list_opt ::= tag_item */ yytestcase(yyruleno==256); case 270: /* func_list ::= func */ yytestcase(yyruleno==270); - case 358: /* literal_list ::= signed_literal */ yytestcase(yyruleno==358); - case 425: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==425); - case 431: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==431); - case 486: /* select_list ::= select_item */ yytestcase(yyruleno==486); - case 497: /* partition_list ::= partition_item */ yytestcase(yyruleno==497); - case 552: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==552); + case 359: /* literal_list ::= signed_literal */ yytestcase(yyruleno==359); + case 426: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==426); + case 432: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==432); + case 487: /* select_list ::= select_item */ yytestcase(yyruleno==487); + case 498: /* partition_list ::= partition_item */ yytestcase(yyruleno==498); + case 553: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==553); { yylhsminor.yy110 = createNodeList(pCxt, yymsp[0].minor.yy42); } yymsp[0].minor.yy110 = yylhsminor.yy110; break; @@ -4155,11 +4141,11 @@ static YYACTIONTYPE yy_reduce( case 206: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==206); case 257: /* tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ yytestcase(yyruleno==257); case 271: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==271); - case 359: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==359); - case 426: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==426); - case 487: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==487); - case 498: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==498); - case 553: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==553); + case 360: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==360); + case 427: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==427); + case 488: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==488); + case 499: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==499); + case 554: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==554); { yylhsminor.yy110 = addNodeToList(pCxt, yymsp[-2].minor.yy110, yymsp[0].minor.yy42); } yymsp[-2].minor.yy110 = yylhsminor.yy110; break; @@ -4189,8 +4175,8 @@ static YYACTIONTYPE yy_reduce( { pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy103, yymsp[0].minor.yy42); } break; case 134: /* cmd ::= ALTER TABLE alter_table_clause */ - case 331: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==331); - case 332: /* cmd ::= insert_query */ yytestcase(yyruleno==332); + case 332: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==332); + case 333: /* cmd ::= insert_query */ yytestcase(yyruleno==333); { pCxt->pRootNode = yymsp[0].minor.yy42; } break; case 135: /* cmd ::= ALTER STABLE alter_table_clause */ @@ -4238,7 +4224,7 @@ static YYACTIONTYPE yy_reduce( break; case 147: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ case 150: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==150); - case 432: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==432); + case 433: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==433); { yylhsminor.yy110 = addNodeToList(pCxt, yymsp[-1].minor.yy110, yymsp[0].minor.yy42); } yymsp[-1].minor.yy110 = yylhsminor.yy110; break; @@ -4255,9 +4241,9 @@ static YYACTIONTYPE yy_reduce( case 255: /* tag_list_opt ::= */ yytestcase(yyruleno==255); case 307: /* col_list_opt ::= */ yytestcase(yyruleno==307); case 309: /* tag_def_or_ref_opt ::= */ yytestcase(yyruleno==309); - case 495: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==495); - case 520: /* group_by_clause_opt ::= */ yytestcase(yyruleno==520); - case 539: /* order_by_clause_opt ::= */ yytestcase(yyruleno==539); + case 496: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==496); + case 521: /* group_by_clause_opt ::= */ yytestcase(yyruleno==521); + case 540: /* order_by_clause_opt ::= */ yytestcase(yyruleno==540); { yymsp[1].minor.yy110 = NULL; } break; case 153: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ @@ -4349,7 +4335,7 @@ static YYACTIONTYPE yy_reduce( break; case 184: /* tags_def_opt ::= tags_def */ case 310: /* tag_def_or_ref_opt ::= tags_def */ yytestcase(yyruleno==310); - case 424: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==424); + case 425: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==425); { yylhsminor.yy110 = yymsp[0].minor.yy110; } yymsp[0].minor.yy110 = yylhsminor.yy110; break; @@ -4403,12 +4389,12 @@ static YYACTIONTYPE yy_reduce( { yymsp[-1].minor.yy459.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy459.val = yymsp[0].minor.yy0; } break; case 198: /* duration_list ::= duration_literal */ - case 388: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==388); + case 389: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==389); { yylhsminor.yy110 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy42)); } yymsp[0].minor.yy110 = yylhsminor.yy110; break; case 199: /* duration_list ::= duration_list NK_COMMA duration_literal */ - case 389: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==389); + case 390: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==390); { yylhsminor.yy110 = addNodeToList(pCxt, yymsp[-2].minor.yy110, releaseRawExprNode(pCxt, yymsp[0].minor.yy42)); } yymsp[-2].minor.yy110 = yylhsminor.yy110; break; @@ -4552,18 +4538,18 @@ static YYACTIONTYPE yy_reduce( yymsp[-1].minor.yy42 = yylhsminor.yy42; break; case 250: /* like_pattern_opt ::= */ - case 319: /* subtable_opt ::= */ yytestcase(yyruleno==319); - case 434: /* case_when_else_opt ::= */ yytestcase(yyruleno==434); - case 464: /* from_clause_opt ::= */ yytestcase(yyruleno==464); - case 493: /* where_clause_opt ::= */ yytestcase(yyruleno==493); - case 502: /* twindow_clause_opt ::= */ yytestcase(yyruleno==502); - case 508: /* sliding_opt ::= */ yytestcase(yyruleno==508); - case 510: /* fill_opt ::= */ yytestcase(yyruleno==510); - case 524: /* having_clause_opt ::= */ yytestcase(yyruleno==524); - case 526: /* range_opt ::= */ yytestcase(yyruleno==526); - case 528: /* every_opt ::= */ yytestcase(yyruleno==528); - case 541: /* slimit_clause_opt ::= */ yytestcase(yyruleno==541); - case 545: /* limit_clause_opt ::= */ yytestcase(yyruleno==545); + case 320: /* subtable_opt ::= */ yytestcase(yyruleno==320); + case 435: /* case_when_else_opt ::= */ yytestcase(yyruleno==435); + case 465: /* from_clause_opt ::= */ yytestcase(yyruleno==465); + case 494: /* where_clause_opt ::= */ yytestcase(yyruleno==494); + case 503: /* twindow_clause_opt ::= */ yytestcase(yyruleno==503); + case 509: /* sliding_opt ::= */ yytestcase(yyruleno==509); + case 511: /* fill_opt ::= */ yytestcase(yyruleno==511); + case 525: /* having_clause_opt ::= */ yytestcase(yyruleno==525); + case 527: /* range_opt ::= */ yytestcase(yyruleno==527); + case 529: /* every_opt ::= */ yytestcase(yyruleno==529); + case 542: /* slimit_clause_opt ::= */ yytestcase(yyruleno==542); + case 546: /* limit_clause_opt ::= */ yytestcase(yyruleno==546); { yymsp[1].minor.yy42 = NULL; } break; case 251: /* like_pattern_opt ::= LIKE NK_STRING */ @@ -4707,108 +4693,112 @@ static YYACTIONTYPE yy_reduce( { ((SStreamOptions*)yymsp[-2].minor.yy42)->fillHistory = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy42 = yymsp[-2].minor.yy42; } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 320: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - case 509: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==509); - case 529: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==529); + case 319: /* stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ +{ ((SStreamOptions*)yymsp[-3].minor.yy42)->ignoreUpdate = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy42 = yymsp[-3].minor.yy42; } + yymsp[-3].minor.yy42 = yylhsminor.yy42; + break; + case 321: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + case 510: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==510); + case 530: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==530); { yymsp[-3].minor.yy42 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy42); } break; - case 321: /* cmd ::= KILL CONNECTION NK_INTEGER */ + case 322: /* cmd ::= KILL CONNECTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &yymsp[0].minor.yy0); } break; - case 322: /* cmd ::= KILL QUERY NK_STRING */ + case 323: /* cmd ::= KILL QUERY NK_STRING */ { pCxt->pRootNode = createKillQueryStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 323: /* cmd ::= KILL TRANSACTION NK_INTEGER */ + case 324: /* cmd ::= KILL TRANSACTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &yymsp[0].minor.yy0); } break; - case 324: /* cmd ::= BALANCE VGROUP */ + case 325: /* cmd ::= BALANCE VGROUP */ { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); } break; - case 325: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + case 326: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; - case 326: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ + case 327: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ { pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy110); } break; - case 327: /* cmd ::= SPLIT VGROUP NK_INTEGER */ + case 328: /* cmd ::= SPLIT VGROUP NK_INTEGER */ { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 328: /* dnode_list ::= DNODE NK_INTEGER */ + case 329: /* dnode_list ::= DNODE NK_INTEGER */ { yymsp[-1].minor.yy110 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } break; - case 330: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ + case 331: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ { pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy42, yymsp[0].minor.yy42); } break; - case 333: /* insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ + case 334: /* insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ { yymsp[-6].minor.yy42 = createInsertStmt(pCxt, yymsp[-4].minor.yy42, yymsp[-2].minor.yy110, yymsp[0].minor.yy42); } break; - case 334: /* insert_query ::= INSERT INTO full_table_name query_or_subquery */ + case 335: /* insert_query ::= INSERT INTO full_table_name query_or_subquery */ { yymsp[-3].minor.yy42 = createInsertStmt(pCxt, yymsp[-1].minor.yy42, NULL, yymsp[0].minor.yy42); } break; - case 335: /* literal ::= NK_INTEGER */ + case 336: /* literal ::= NK_INTEGER */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 336: /* literal ::= NK_FLOAT */ + case 337: /* literal ::= NK_FLOAT */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 337: /* literal ::= NK_STRING */ + case 338: /* literal ::= NK_STRING */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 338: /* literal ::= NK_BOOL */ + case 339: /* literal ::= NK_BOOL */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 339: /* literal ::= TIMESTAMP NK_STRING */ + case 340: /* literal ::= TIMESTAMP NK_STRING */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 340: /* literal ::= duration_literal */ - case 350: /* signed_literal ::= signed */ yytestcase(yyruleno==350); - case 371: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==371); - case 372: /* expression ::= literal */ yytestcase(yyruleno==372); - case 373: /* expression ::= pseudo_column */ yytestcase(yyruleno==373); - case 374: /* expression ::= column_reference */ yytestcase(yyruleno==374); - case 375: /* expression ::= function_expression */ yytestcase(yyruleno==375); - case 376: /* expression ::= case_when_expression */ yytestcase(yyruleno==376); - case 407: /* function_expression ::= literal_func */ yytestcase(yyruleno==407); - case 456: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==456); - case 460: /* boolean_primary ::= predicate */ yytestcase(yyruleno==460); - case 462: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==462); - case 463: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==463); - case 466: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==466); - case 468: /* table_reference ::= table_primary */ yytestcase(yyruleno==468); - case 469: /* table_reference ::= joined_table */ yytestcase(yyruleno==469); - case 473: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==473); - case 531: /* query_simple ::= query_specification */ yytestcase(yyruleno==531); - case 532: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==532); - case 535: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==535); - case 537: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==537); + case 341: /* literal ::= duration_literal */ + case 351: /* signed_literal ::= signed */ yytestcase(yyruleno==351); + case 372: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==372); + case 373: /* expression ::= literal */ yytestcase(yyruleno==373); + case 374: /* expression ::= pseudo_column */ yytestcase(yyruleno==374); + case 375: /* expression ::= column_reference */ yytestcase(yyruleno==375); + case 376: /* expression ::= function_expression */ yytestcase(yyruleno==376); + case 377: /* expression ::= case_when_expression */ yytestcase(yyruleno==377); + case 408: /* function_expression ::= literal_func */ yytestcase(yyruleno==408); + case 457: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==457); + case 461: /* boolean_primary ::= predicate */ yytestcase(yyruleno==461); + case 463: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==463); + case 464: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==464); + case 467: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==467); + case 469: /* table_reference ::= table_primary */ yytestcase(yyruleno==469); + case 470: /* table_reference ::= joined_table */ yytestcase(yyruleno==470); + case 474: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==474); + case 532: /* query_simple ::= query_specification */ yytestcase(yyruleno==532); + case 533: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==533); + case 536: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==536); + case 538: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==538); { yylhsminor.yy42 = yymsp[0].minor.yy42; } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 341: /* literal ::= NULL */ + case 342: /* literal ::= NULL */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 342: /* literal ::= NK_QUESTION */ + case 343: /* literal ::= NK_QUESTION */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 343: /* duration_literal ::= NK_VARIABLE */ + case 344: /* duration_literal ::= NK_VARIABLE */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 344: /* signed ::= NK_INTEGER */ + case 345: /* signed ::= NK_INTEGER */ { yylhsminor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 345: /* signed ::= NK_PLUS NK_INTEGER */ + case 346: /* signed ::= NK_PLUS NK_INTEGER */ { yymsp[-1].minor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } break; - case 346: /* signed ::= NK_MINUS NK_INTEGER */ + case 347: /* signed ::= NK_MINUS NK_INTEGER */ { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; @@ -4816,14 +4806,14 @@ static YYACTIONTYPE yy_reduce( } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 347: /* signed ::= NK_FLOAT */ + case 348: /* signed ::= NK_FLOAT */ { yylhsminor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 348: /* signed ::= NK_PLUS NK_FLOAT */ + case 349: /* signed ::= NK_PLUS NK_FLOAT */ { yymsp[-1].minor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } break; - case 349: /* signed ::= NK_MINUS NK_FLOAT */ + case 350: /* signed ::= NK_MINUS NK_FLOAT */ { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; @@ -4831,57 +4821,57 @@ static YYACTIONTYPE yy_reduce( } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 351: /* signed_literal ::= NK_STRING */ + case 352: /* signed_literal ::= NK_STRING */ { yylhsminor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 352: /* signed_literal ::= NK_BOOL */ + case 353: /* signed_literal ::= NK_BOOL */ { yylhsminor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 353: /* signed_literal ::= TIMESTAMP NK_STRING */ + case 354: /* signed_literal ::= TIMESTAMP NK_STRING */ { yymsp[-1].minor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } break; - case 354: /* signed_literal ::= duration_literal */ - case 356: /* signed_literal ::= literal_func */ yytestcase(yyruleno==356); - case 427: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==427); - case 489: /* select_item ::= common_expression */ yytestcase(yyruleno==489); - case 499: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==499); - case 536: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==536); - case 538: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==538); - case 551: /* search_condition ::= common_expression */ yytestcase(yyruleno==551); + case 355: /* signed_literal ::= duration_literal */ + case 357: /* signed_literal ::= literal_func */ yytestcase(yyruleno==357); + case 428: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==428); + case 490: /* select_item ::= common_expression */ yytestcase(yyruleno==490); + case 500: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==500); + case 537: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==537); + case 539: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==539); + case 552: /* search_condition ::= common_expression */ yytestcase(yyruleno==552); { yylhsminor.yy42 = releaseRawExprNode(pCxt, yymsp[0].minor.yy42); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 355: /* signed_literal ::= NULL */ + case 356: /* signed_literal ::= NULL */ { yylhsminor.yy42 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 357: /* signed_literal ::= NK_QUESTION */ + case 358: /* signed_literal ::= NK_QUESTION */ { yylhsminor.yy42 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 377: /* expression ::= NK_LP expression NK_RP */ - case 461: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==461); - case 550: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==550); + case 378: /* expression ::= NK_LP expression NK_RP */ + case 462: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==462); + case 551: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==551); { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy42)); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 378: /* expression ::= NK_PLUS expr_or_subquery */ + case 379: /* expression ::= NK_PLUS expr_or_subquery */ { SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy42)); } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 379: /* expression ::= NK_MINUS expr_or_subquery */ + case 380: /* expression ::= NK_MINUS expr_or_subquery */ { SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy42), NULL)); } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 380: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + case 381: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -4889,7 +4879,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 381: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + case 382: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -4897,7 +4887,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 382: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + case 383: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -4905,7 +4895,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 383: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + case 384: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -4913,7 +4903,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 384: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ + case 385: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -4921,14 +4911,14 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 385: /* expression ::= column_reference NK_ARROW NK_STRING */ + case 386: /* expression ::= column_reference NK_ARROW NK_STRING */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); yylhsminor.yy42 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy42), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 386: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + case 387: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -4936,7 +4926,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 387: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + case 388: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -4944,71 +4934,71 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 390: /* column_reference ::= column_name */ + case 391: /* column_reference ::= column_name */ { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy225, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy225)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 391: /* column_reference ::= table_name NK_DOT column_name */ + case 392: /* column_reference ::= table_name NK_DOT column_name */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy225, &yymsp[0].minor.yy225, createColumnNode(pCxt, &yymsp[-2].minor.yy225, &yymsp[0].minor.yy225)); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 392: /* pseudo_column ::= ROWTS */ - case 393: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==393); - case 395: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==395); - case 396: /* pseudo_column ::= QEND */ yytestcase(yyruleno==396); - case 397: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==397); - case 398: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==398); - case 399: /* pseudo_column ::= WEND */ yytestcase(yyruleno==399); - case 400: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==400); - case 401: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==401); - case 402: /* pseudo_column ::= ISFILLED */ yytestcase(yyruleno==402); - case 403: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==403); - case 409: /* literal_func ::= NOW */ yytestcase(yyruleno==409); + case 393: /* pseudo_column ::= ROWTS */ + case 394: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==394); + case 396: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==396); + case 397: /* pseudo_column ::= QEND */ yytestcase(yyruleno==397); + case 398: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==398); + case 399: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==399); + case 400: /* pseudo_column ::= WEND */ yytestcase(yyruleno==400); + case 401: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==401); + case 402: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==402); + case 403: /* pseudo_column ::= ISFILLED */ yytestcase(yyruleno==403); + case 404: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==404); + case 410: /* literal_func ::= NOW */ yytestcase(yyruleno==410); { yylhsminor.yy42 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 394: /* pseudo_column ::= table_name NK_DOT TBNAME */ + case 395: /* pseudo_column ::= table_name NK_DOT TBNAME */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy225, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy225)))); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 404: /* function_expression ::= function_name NK_LP expression_list NK_RP */ - case 405: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==405); + case 405: /* function_expression ::= function_name NK_LP expression_list NK_RP */ + case 406: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==406); { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy225, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy225, yymsp[-1].minor.yy110)); } yymsp[-3].minor.yy42 = yylhsminor.yy42; break; - case 406: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ + case 407: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy42), yymsp[-1].minor.yy448)); } yymsp[-5].minor.yy42 = yylhsminor.yy42; break; - case 408: /* literal_func ::= noarg_func NK_LP NK_RP */ + case 409: /* literal_func ::= noarg_func NK_LP NK_RP */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy225, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy225, NULL)); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 423: /* star_func_para_list ::= NK_STAR */ + case 424: /* star_func_para_list ::= NK_STAR */ { yylhsminor.yy110 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } yymsp[0].minor.yy110 = yylhsminor.yy110; break; - case 428: /* star_func_para ::= table_name NK_DOT NK_STAR */ - case 492: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==492); + case 429: /* star_func_para ::= table_name NK_DOT NK_STAR */ + case 493: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==493); { yylhsminor.yy42 = createColumnNode(pCxt, &yymsp[-2].minor.yy225, &yymsp[0].minor.yy0); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 429: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ + case 430: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy110, yymsp[-1].minor.yy42)); } yymsp[-3].minor.yy42 = yylhsminor.yy42; break; - case 430: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ + case 431: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy42), yymsp[-2].minor.yy110, yymsp[-1].minor.yy42)); } yymsp[-4].minor.yy42 = yylhsminor.yy42; break; - case 433: /* when_then_expr ::= WHEN common_expression THEN common_expression */ + case 434: /* when_then_expr ::= WHEN common_expression THEN common_expression */ { yymsp[-3].minor.yy42 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy42), releaseRawExprNode(pCxt, yymsp[0].minor.yy42)); } break; - case 435: /* case_when_else_opt ::= ELSE common_expression */ + case 436: /* case_when_else_opt ::= ELSE common_expression */ { yymsp[-1].minor.yy42 = releaseRawExprNode(pCxt, yymsp[0].minor.yy42); } break; - case 436: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ - case 441: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==441); + case 437: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ + case 442: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==442); { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -5016,7 +5006,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 437: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + case 438: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -5024,7 +5014,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-4].minor.yy42 = yylhsminor.yy42; break; - case 438: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + case 439: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -5032,71 +5022,71 @@ static YYACTIONTYPE yy_reduce( } yymsp[-5].minor.yy42 = yylhsminor.yy42; break; - case 439: /* predicate ::= expr_or_subquery IS NULL */ + case 440: /* predicate ::= expr_or_subquery IS NULL */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); yylhsminor.yy42 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy42), NULL)); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 440: /* predicate ::= expr_or_subquery IS NOT NULL */ + case 441: /* predicate ::= expr_or_subquery IS NOT NULL */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy42); yylhsminor.yy42 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy42), NULL)); } yymsp[-3].minor.yy42 = yylhsminor.yy42; break; - case 442: /* compare_op ::= NK_LT */ + case 443: /* compare_op ::= NK_LT */ { yymsp[0].minor.yy2 = OP_TYPE_LOWER_THAN; } break; - case 443: /* compare_op ::= NK_GT */ + case 444: /* compare_op ::= NK_GT */ { yymsp[0].minor.yy2 = OP_TYPE_GREATER_THAN; } break; - case 444: /* compare_op ::= NK_LE */ + case 445: /* compare_op ::= NK_LE */ { yymsp[0].minor.yy2 = OP_TYPE_LOWER_EQUAL; } break; - case 445: /* compare_op ::= NK_GE */ + case 446: /* compare_op ::= NK_GE */ { yymsp[0].minor.yy2 = OP_TYPE_GREATER_EQUAL; } break; - case 446: /* compare_op ::= NK_NE */ + case 447: /* compare_op ::= NK_NE */ { yymsp[0].minor.yy2 = OP_TYPE_NOT_EQUAL; } break; - case 447: /* compare_op ::= NK_EQ */ + case 448: /* compare_op ::= NK_EQ */ { yymsp[0].minor.yy2 = OP_TYPE_EQUAL; } break; - case 448: /* compare_op ::= LIKE */ + case 449: /* compare_op ::= LIKE */ { yymsp[0].minor.yy2 = OP_TYPE_LIKE; } break; - case 449: /* compare_op ::= NOT LIKE */ + case 450: /* compare_op ::= NOT LIKE */ { yymsp[-1].minor.yy2 = OP_TYPE_NOT_LIKE; } break; - case 450: /* compare_op ::= MATCH */ + case 451: /* compare_op ::= MATCH */ { yymsp[0].minor.yy2 = OP_TYPE_MATCH; } break; - case 451: /* compare_op ::= NMATCH */ + case 452: /* compare_op ::= NMATCH */ { yymsp[0].minor.yy2 = OP_TYPE_NMATCH; } break; - case 452: /* compare_op ::= CONTAINS */ + case 453: /* compare_op ::= CONTAINS */ { yymsp[0].minor.yy2 = OP_TYPE_JSON_CONTAINS; } break; - case 453: /* in_op ::= IN */ + case 454: /* in_op ::= IN */ { yymsp[0].minor.yy2 = OP_TYPE_IN; } break; - case 454: /* in_op ::= NOT IN */ + case 455: /* in_op ::= NOT IN */ { yymsp[-1].minor.yy2 = OP_TYPE_NOT_IN; } break; - case 455: /* in_predicate_value ::= NK_LP literal_list NK_RP */ + case 456: /* in_predicate_value ::= NK_LP literal_list NK_RP */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy110)); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 457: /* boolean_value_expression ::= NOT boolean_primary */ + case 458: /* boolean_value_expression ::= NOT boolean_primary */ { SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy42), NULL)); } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 458: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + case 459: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -5104,7 +5094,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 459: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + case 460: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ { SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy42); SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy42); @@ -5112,48 +5102,48 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 465: /* from_clause_opt ::= FROM table_reference_list */ - case 494: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==494); - case 525: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==525); + case 466: /* from_clause_opt ::= FROM table_reference_list */ + case 495: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==495); + case 526: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==526); { yymsp[-1].minor.yy42 = yymsp[0].minor.yy42; } break; - case 467: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ + case 468: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ { yylhsminor.yy42 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy42, yymsp[0].minor.yy42, NULL); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 470: /* table_primary ::= table_name alias_opt */ + case 471: /* table_primary ::= table_name alias_opt */ { yylhsminor.yy42 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy225, &yymsp[0].minor.yy225); } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 471: /* table_primary ::= db_name NK_DOT table_name alias_opt */ + case 472: /* table_primary ::= db_name NK_DOT table_name alias_opt */ { yylhsminor.yy42 = createRealTableNode(pCxt, &yymsp[-3].minor.yy225, &yymsp[-1].minor.yy225, &yymsp[0].minor.yy225); } yymsp[-3].minor.yy42 = yylhsminor.yy42; break; - case 472: /* table_primary ::= subquery alias_opt */ + case 473: /* table_primary ::= subquery alias_opt */ { yylhsminor.yy42 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy42), &yymsp[0].minor.yy225); } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 474: /* alias_opt ::= */ + case 475: /* alias_opt ::= */ { yymsp[1].minor.yy225 = nil_token; } break; - case 476: /* alias_opt ::= AS table_alias */ + case 477: /* alias_opt ::= AS table_alias */ { yymsp[-1].minor.yy225 = yymsp[0].minor.yy225; } break; - case 477: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - case 478: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==478); + case 478: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + case 479: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==479); { yymsp[-2].minor.yy42 = yymsp[-1].minor.yy42; } break; - case 479: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ + case 480: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ { yylhsminor.yy42 = createJoinTableNode(pCxt, yymsp[-4].minor.yy638, yymsp[-5].minor.yy42, yymsp[-2].minor.yy42, yymsp[0].minor.yy42); } yymsp[-5].minor.yy42 = yylhsminor.yy42; break; - case 480: /* join_type ::= */ + case 481: /* join_type ::= */ { yymsp[1].minor.yy638 = JOIN_TYPE_INNER; } break; - case 481: /* join_type ::= INNER */ + case 482: /* join_type ::= INNER */ { yymsp[0].minor.yy638 = JOIN_TYPE_INNER; } break; - case 482: /* query_specification ::= SELECT 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 483: /* query_specification ::= SELECT 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 */ { yymsp[-11].minor.yy42 = createSelectStmt(pCxt, yymsp[-10].minor.yy103, yymsp[-9].minor.yy110, yymsp[-8].minor.yy42); yymsp[-11].minor.yy42 = addWhereClause(pCxt, yymsp[-11].minor.yy42, yymsp[-7].minor.yy42); @@ -5166,82 +5156,82 @@ static YYACTIONTYPE yy_reduce( yymsp[-11].minor.yy42 = addFillClause(pCxt, yymsp[-11].minor.yy42, yymsp[-3].minor.yy42); } break; - case 485: /* set_quantifier_opt ::= ALL */ + case 486: /* set_quantifier_opt ::= ALL */ { yymsp[0].minor.yy103 = false; } break; - case 488: /* select_item ::= NK_STAR */ + case 489: /* select_item ::= NK_STAR */ { yylhsminor.yy42 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } yymsp[0].minor.yy42 = yylhsminor.yy42; break; - case 490: /* select_item ::= common_expression column_alias */ - case 500: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==500); + case 491: /* select_item ::= common_expression column_alias */ + case 501: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==501); { yylhsminor.yy42 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy42), &yymsp[0].minor.yy225); } yymsp[-1].minor.yy42 = yylhsminor.yy42; break; - case 491: /* select_item ::= common_expression AS column_alias */ - case 501: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==501); + case 492: /* select_item ::= common_expression AS column_alias */ + case 502: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==502); { yylhsminor.yy42 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy42), &yymsp[0].minor.yy225); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 496: /* partition_by_clause_opt ::= PARTITION BY partition_list */ - case 521: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==521); - case 540: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==540); + case 497: /* partition_by_clause_opt ::= PARTITION BY partition_list */ + case 522: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==522); + case 541: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==541); { yymsp[-2].minor.yy110 = yymsp[0].minor.yy110; } break; - case 503: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ + case 504: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ { yymsp[-5].minor.yy42 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy42), releaseRawExprNode(pCxt, yymsp[-1].minor.yy42)); } break; - case 504: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ + case 505: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ { yymsp[-3].minor.yy42 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy42)); } break; - case 505: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ + case 506: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ { yymsp[-5].minor.yy42 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy42), NULL, yymsp[-1].minor.yy42, yymsp[0].minor.yy42); } break; - case 506: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ + case 507: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ { yymsp[-7].minor.yy42 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy42), releaseRawExprNode(pCxt, yymsp[-3].minor.yy42), yymsp[-1].minor.yy42, yymsp[0].minor.yy42); } break; - case 507: /* twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ + case 508: /* twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ { yymsp[-6].minor.yy42 = createEventWindowNode(pCxt, yymsp[-3].minor.yy42, yymsp[0].minor.yy42); } break; - case 511: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ + case 512: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ { yymsp[-3].minor.yy42 = createFillNode(pCxt, yymsp[-1].minor.yy410, NULL); } break; - case 512: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ + case 513: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ { yymsp[-5].minor.yy42 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy110)); } break; - case 513: /* fill_opt ::= FILL NK_LP VALUE_F NK_COMMA literal_list NK_RP */ + case 514: /* fill_opt ::= FILL NK_LP VALUE_F NK_COMMA literal_list NK_RP */ { yymsp[-5].minor.yy42 = createFillNode(pCxt, FILL_MODE_VALUE_F, createNodeListNode(pCxt, yymsp[-1].minor.yy110)); } break; - case 514: /* fill_mode ::= NONE */ + case 515: /* fill_mode ::= NONE */ { yymsp[0].minor.yy410 = FILL_MODE_NONE; } break; - case 515: /* fill_mode ::= PREV */ + case 516: /* fill_mode ::= PREV */ { yymsp[0].minor.yy410 = FILL_MODE_PREV; } break; - case 516: /* fill_mode ::= NULL */ + case 517: /* fill_mode ::= NULL */ { yymsp[0].minor.yy410 = FILL_MODE_NULL; } break; - case 517: /* fill_mode ::= NULL_F */ + case 518: /* fill_mode ::= NULL_F */ { yymsp[0].minor.yy410 = FILL_MODE_NULL_F; } break; - case 518: /* fill_mode ::= LINEAR */ + case 519: /* fill_mode ::= LINEAR */ { yymsp[0].minor.yy410 = FILL_MODE_LINEAR; } break; - case 519: /* fill_mode ::= NEXT */ + case 520: /* fill_mode ::= NEXT */ { yymsp[0].minor.yy410 = FILL_MODE_NEXT; } break; - case 522: /* group_by_list ::= expr_or_subquery */ + case 523: /* group_by_list ::= expr_or_subquery */ { yylhsminor.yy110 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy42))); } yymsp[0].minor.yy110 = yylhsminor.yy110; break; - case 523: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ + case 524: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ { yylhsminor.yy110 = addNodeToList(pCxt, yymsp[-2].minor.yy110, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy42))); } yymsp[-2].minor.yy110 = yylhsminor.yy110; break; - case 527: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ + case 528: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ { yymsp[-5].minor.yy42 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy42), releaseRawExprNode(pCxt, yymsp[-1].minor.yy42)); } break; - case 530: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + case 531: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ { yylhsminor.yy42 = addOrderByClause(pCxt, yymsp[-3].minor.yy42, yymsp[-2].minor.yy110); yylhsminor.yy42 = addSlimitClause(pCxt, yylhsminor.yy42, yymsp[-1].minor.yy42); @@ -5249,50 +5239,50 @@ static YYACTIONTYPE yy_reduce( } yymsp[-3].minor.yy42 = yylhsminor.yy42; break; - case 533: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ + case 534: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ { yylhsminor.yy42 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy42, yymsp[0].minor.yy42); } yymsp[-3].minor.yy42 = yylhsminor.yy42; break; - case 534: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ + case 535: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ { yylhsminor.yy42 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy42, yymsp[0].minor.yy42); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 542: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ - case 546: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==546); + case 543: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ + case 547: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==547); { yymsp[-1].minor.yy42 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } break; - case 543: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - case 547: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==547); + case 544: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + case 548: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==548); { yymsp[-3].minor.yy42 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; - case 544: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - case 548: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==548); + case 545: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + case 549: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==549); { yymsp[-3].minor.yy42 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } break; - case 549: /* subquery ::= NK_LP query_expression NK_RP */ + case 550: /* subquery ::= NK_LP query_expression NK_RP */ { yylhsminor.yy42 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy42); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 554: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ + case 555: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ { yylhsminor.yy42 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy42), yymsp[-1].minor.yy106, yymsp[0].minor.yy599); } yymsp[-2].minor.yy42 = yylhsminor.yy42; break; - case 555: /* ordering_specification_opt ::= */ + case 556: /* ordering_specification_opt ::= */ { yymsp[1].minor.yy106 = ORDER_ASC; } break; - case 556: /* ordering_specification_opt ::= ASC */ + case 557: /* ordering_specification_opt ::= ASC */ { yymsp[0].minor.yy106 = ORDER_ASC; } break; - case 557: /* ordering_specification_opt ::= DESC */ + case 558: /* ordering_specification_opt ::= DESC */ { yymsp[0].minor.yy106 = ORDER_DESC; } break; - case 558: /* null_ordering_opt ::= */ + case 559: /* null_ordering_opt ::= */ { yymsp[1].minor.yy599 = NULL_ORDER_DEFAULT; } break; - case 559: /* null_ordering_opt ::= NULLS FIRST */ + case 560: /* null_ordering_opt ::= NULLS FIRST */ { yymsp[-1].minor.yy599 = NULL_ORDER_FIRST; } break; - case 560: /* null_ordering_opt ::= NULLS LAST */ + case 561: /* null_ordering_opt ::= NULLS LAST */ { yymsp[-1].minor.yy599 = NULL_ORDER_LAST; } break; default: diff --git a/source/libs/parser/test/parInitialCTest.cpp b/source/libs/parser/test/parInitialCTest.cpp index 51de121d1e..fab1fc4919 100644 --- a/source/libs/parser/test/parInitialCTest.cpp +++ b/source/libs/parser/test/parInitialCTest.cpp @@ -775,13 +775,13 @@ TEST_F(ParserInitialCTest, createStream) { }; auto setCreateStreamReq = [&](const char* pStream, const char* pSrcDb, const char* pSql, const char* pDstStb, - int8_t createStb = STREAM_CREATE_STABLE_TRUE, int8_t igExists = 0) { + int8_t igExists = 0) { snprintf(expect.name, sizeof(expect.name), "0.%s", pStream); snprintf(expect.sourceDB, sizeof(expect.sourceDB), "0.%s", pSrcDb); snprintf(expect.targetStbFullName, sizeof(expect.targetStbFullName), "0.test.%s", pDstStb); expect.igExists = igExists; expect.sql = strdup(pSql); - expect.createStb = createStb; + expect.createStb = STREAM_CREATE_STABLE_TRUE; expect.triggerType = STREAM_TRIGGER_AT_ONCE; expect.maxDelay = 0; expect.watermark = 0; @@ -789,15 +789,18 @@ TEST_F(ParserInitialCTest, createStream) { expect.igExpired = STREAM_DEFAULT_IGNORE_EXPIRED; }; - auto setStreamOptions = [&](int8_t triggerType = STREAM_TRIGGER_AT_ONCE, int64_t maxDelay = 0, int64_t watermark = 0, - int8_t igExpired = STREAM_DEFAULT_IGNORE_EXPIRED, - int8_t fillHistory = STREAM_DEFAULT_FILL_HISTORY) { - expect.triggerType = triggerType; - expect.maxDelay = maxDelay; - expect.watermark = watermark; - expect.fillHistory = fillHistory; - expect.igExpired = igExpired; - }; + auto setStreamOptions = + [&](int8_t createStb = STREAM_CREATE_STABLE_TRUE, int8_t triggerType = STREAM_TRIGGER_AT_ONCE, + int64_t maxDelay = 0, int64_t watermark = 0, int8_t igExpired = STREAM_DEFAULT_IGNORE_EXPIRED, + int8_t fillHistory = STREAM_DEFAULT_FILL_HISTORY, int8_t igUpdate = STREAM_DEFAULT_IGNORE_UPDATE) { + expect.createStb = createStb; + expect.triggerType = triggerType; + expect.maxDelay = maxDelay; + expect.watermark = watermark; + expect.fillHistory = fillHistory; + expect.igExpired = igExpired; + expect.igUpdate = igUpdate; + }; auto addTag = [&](const char* pFieldName, uint8_t type, int32_t bytes = 0) { SField field = {0}; @@ -844,6 +847,7 @@ TEST_F(ParserInitialCTest, createStream) { } ASSERT_EQ(req.checkpointFreq, expect.checkpointFreq); ASSERT_EQ(req.createStb, expect.createStb); + ASSERT_EQ(req.igUpdate, expect.igUpdate); tFreeSCMCreateStreamReq(&req); }); @@ -853,13 +857,13 @@ TEST_F(ParserInitialCTest, createStream) { setCreateStreamReq( "s1", "test", - "create stream if not exists s1 trigger max_delay 20s watermark 10s ignore expired 0 fill_history 1 into st3 " - "as select count(*) from t1 interval(10s)", - "st3", 1, 1); - setStreamOptions(STREAM_TRIGGER_MAX_DELAY, 20 * MILLISECOND_PER_SECOND, 10 * MILLISECOND_PER_SECOND, 0, 1); - run("CREATE STREAM IF NOT EXISTS s1 TRIGGER MAX_DELAY 20s WATERMARK 10s IGNORE EXPIRED 0 FILL_HISTORY 1 INTO st3 AS " - "SELECT COUNT(*) " - "FROM t1 INTERVAL(10S)"); + "create stream if not exists s1 trigger max_delay 20s watermark 10s ignore expired 0 fill_history 1 ignore " + "update 1 into st3 as select count(*) from t1 interval(10s)", + "st3", 1); + setStreamOptions(STREAM_CREATE_STABLE_TRUE, STREAM_TRIGGER_MAX_DELAY, 20 * MILLISECOND_PER_SECOND, + 10 * MILLISECOND_PER_SECOND, 0, 1, 1); + run("CREATE STREAM IF NOT EXISTS s1 TRIGGER MAX_DELAY 20s WATERMARK 10s IGNORE EXPIRED 0 FILL_HISTORY 1 IGNORE " + "UPDATE 1 INTO st3 AS SELECT COUNT(*) FROM t1 INTERVAL(10S)"); clearCreateStreamReq(); setCreateStreamReq("s1", "test", @@ -876,7 +880,8 @@ TEST_F(ParserInitialCTest, createStream) { setCreateStreamReq( "s1", "test", "create stream s1 into st1 tags(tag2) as select max(c1), c2 from t1 partition by tbname tag2 interval(10s)", - "st1", STREAM_CREATE_STABLE_FALSE); + "st1"); + setStreamOptions(STREAM_CREATE_STABLE_FALSE); run("CREATE STREAM s1 INTO st1 TAGS(tag2) AS SELECT MAX(c1), c2 FROM t1 PARTITION BY TBNAME tag2 INTERVAL(10S)"); clearCreateStreamReq(); } diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c index 208f548457..c9ee83a647 100644 --- a/source/libs/planner/src/planLogicCreater.c +++ b/source/libs/planner/src/planLogicCreater.c @@ -343,6 +343,13 @@ static int32_t createScanLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect pScan->node.groupAction = GROUP_ACTION_NONE; pScan->node.resultDataOrder = DATA_ORDER_LEVEL_IN_BLOCK; + if (pCxt->pPlanCxt->streamQuery) { + pScan->triggerType = pCxt->pPlanCxt->triggerType; + pScan->watermark = pCxt->pPlanCxt->watermark; + pScan->deleteMark = pCxt->pPlanCxt->deleteMark; + pScan->igExpired = pCxt->pPlanCxt->igExpired; + pScan->igCheckUpdate = pCxt->pPlanCxt->igCheckUpdate; + } // set columns to scan if (TSDB_CODE_SUCCESS == code) { @@ -719,6 +726,7 @@ static int32_t createWindowLogicNodeFinalize(SLogicPlanContext* pCxt, SSelectStm pWindow->watermark = pCxt->pPlanCxt->watermark; pWindow->deleteMark = pCxt->pPlanCxt->deleteMark; pWindow->igExpired = pCxt->pPlanCxt->igExpired; + pWindow->igCheckUpdate = pCxt->pPlanCxt->igCheckUpdate; } pWindow->inputTsOrder = ORDER_ASC; pWindow->outputTsOrder = ORDER_ASC; diff --git a/source/libs/planner/src/planOptimizer.c b/source/libs/planner/src/planOptimizer.c index 18aaabf448..16a5ef7bae 100644 --- a/source/libs/planner/src/planOptimizer.c +++ b/source/libs/planner/src/planOptimizer.c @@ -328,10 +328,6 @@ static void scanPathOptSetScanWin(SScanLogicNode* pScan) { pScan->sliding = ((SWindowLogicNode*)pParent)->sliding; pScan->intervalUnit = ((SWindowLogicNode*)pParent)->intervalUnit; pScan->slidingUnit = ((SWindowLogicNode*)pParent)->slidingUnit; - pScan->triggerType = ((SWindowLogicNode*)pParent)->triggerType; - pScan->watermark = ((SWindowLogicNode*)pParent)->watermark; - pScan->deleteMark = ((SWindowLogicNode*)pParent)->deleteMark; - pScan->igExpired = ((SWindowLogicNode*)pParent)->igExpired; } } diff --git a/source/libs/planner/src/planPhysiCreater.c b/source/libs/planner/src/planPhysiCreater.c index d111ad7da8..e9a2efaac7 100644 --- a/source/libs/planner/src/planPhysiCreater.c +++ b/source/libs/planner/src/planPhysiCreater.c @@ -582,6 +582,7 @@ static int32_t createTableScanPhysiNode(SPhysiPlanContext* pCxt, SSubplan* pSubp pTableScan->triggerType = pScanLogicNode->triggerType; pTableScan->watermark = pScanLogicNode->watermark; pTableScan->igExpired = pScanLogicNode->igExpired; + pTableScan->igCheckUpdate = pScanLogicNode->igCheckUpdate; pTableScan->assignBlockUid = pCxt->pPlanCxt->rSmaQuery ? true : false; int32_t code = createScanPhysiNodeFinalize(pCxt, pSubplan, pScanLogicNode, (SScanPhysiNode*)pTableScan, pPhyNode); diff --git a/source/libs/sync/src/syncRaftLog.c b/source/libs/sync/src/syncRaftLog.c index e6569d9974..9299651999 100644 --- a/source/libs/sync/src/syncRaftLog.c +++ b/source/libs/sync/src/syncRaftLog.c @@ -249,6 +249,7 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR int64_t ts2 = taosGetTimestampNs(); code = walReadVer(pWalHandle, index); + walReadReset(pWalHandle); int64_t ts3 = taosGetTimestampNs(); // code = walReadVerCached(pWalHandle, index); diff --git a/source/libs/tdb/src/db/tdbPage.c b/source/libs/tdb/src/db/tdbPage.c index f19c3f28c0..c6310f4985 100644 --- a/source/libs/tdb/src/db/tdbPage.c +++ b/source/libs/tdb/src/db/tdbPage.c @@ -484,77 +484,50 @@ static int tdbPageFree(SPage *pPage, int idx, SCell *pCell, int szCell) { return 0; } +typedef struct { + int32_t iCell; + int32_t offset; +} SCellIdx; +static int32_t tCellIdxCmprFn(const void *p1, const void *p2) { + if (((SCellIdx *)p1)->offset < ((SCellIdx *)p2)->offset) { + return -1; + } else if (((SCellIdx *)p1)->offset > ((SCellIdx *)p2)->offset) { + return 1; + } else { + return 0; + } +} static int tdbPageDefragment(SPage *pPage) { - int nFree; - int nCells; - SCell *pCell; - SCell *pNextCell; - SCell *pTCell; - int szCell; - int idx; - int iCell; + int32_t nFree = TDB_PAGE_NFREE(pPage); + int32_t nCell = TDB_PAGE_NCELLS(pPage); - nFree = TDB_PAGE_NFREE(pPage); - nCells = TDB_PAGE_NCELLS(pPage); - - if (pPage->pFreeEnd - pPage->pFreeStart >= nFree) { - tdbError("tdb/page-defragment: invalid free range, nFree: %d.", nFree); - return -1; + SCellIdx *aCellIdx = (SCellIdx *)tdbOsMalloc(sizeof(SCellIdx) * nCell); + if (aCellIdx == NULL) return -1; + for (int32_t iCell = 0; iCell < nCell; iCell++) { + aCellIdx[iCell].iCell = iCell; + aCellIdx[iCell].offset = TDB_PAGE_CELL_OFFSET_AT(pPage, iCell); } + taosSort(aCellIdx, nCell, sizeof(SCellIdx), tCellIdxCmprFn); - // Loop to compact the page content - // Here we use an O(n^2) algorithm to do the job since - // this is a low frequency job. - pNextCell = (u8 *)pPage->pPageFtr; - pCell = NULL; - for (iCell = 0;; iCell++) { - // compact over - if (iCell == nCells) { - pPage->pFreeEnd = pNextCell; - break; + SCell *pNextCell = (u8 *)pPage->pPageFtr; + for (int32_t iCell = nCell - 1; iCell >= 0; iCell--) { + SCell *pCell = TDB_PAGE_CELL_AT(pPage, aCellIdx[iCell].iCell); + int32_t szCell = pPage->xCellSize(pPage, pCell, 0, NULL, NULL); + + ASSERT(pNextCell - szCell >= pCell); + + pNextCell -= szCell; + if (pNextCell > pCell) { + memmove(pNextCell, pCell, szCell); + TDB_PAGE_CELL_OFFSET_AT_SET(pPage, aCellIdx[iCell].iCell, pNextCell - pPage->pData); } - - for (int i = 0; i < nCells; i++) { - if (TDB_PAGE_CELL_OFFSET_AT(pPage, i) < pNextCell - pPage->pData) { - pTCell = TDB_PAGE_CELL_AT(pPage, i); - if (pCell == NULL || pCell < pTCell) { - pCell = pTCell; - idx = i; - } - } else { - continue; - } - } - - if (NULL == pCell) { - tdbError("tdb/page-defragment: null ptr pCell."); - return -1; - } - - szCell = (*pPage->xCellSize)(pPage, pCell, 0, NULL, NULL); - - if (pCell + szCell > pNextCell) { - tdbError("tdb/page-defragment: invalid cell range, pCell: %p, szCell: %d, pNextCell: %p.", pCell, szCell, - pNextCell); - return -1; - } - - if (pCell + szCell < pNextCell) { - memmove(pNextCell - szCell, pCell, szCell); - } - - pCell = NULL; - pNextCell = pNextCell - szCell; - TDB_PAGE_CELL_OFFSET_AT_SET(pPage, idx, pNextCell - pPage->pData); } - - if (pPage->pFreeEnd - pPage->pFreeStart != nFree) { - tdbError("tdb/page-defragment: invalid free range, nFree: %d.", nFree); - return -1; - } - + pPage->pFreeEnd = pNextCell; TDB_PAGE_CCELLS_SET(pPage, pPage->pFreeEnd - pPage->pData); TDB_PAGE_FCELL_SET(pPage, 0); + tdbOsFree(aCellIdx); + + ASSERT(pPage->pFreeEnd - pPage->pFreeStart == nFree); return 0; } diff --git a/source/libs/tdb/test/CMakeLists.txt b/source/libs/tdb/test/CMakeLists.txt index 2621e02b02..fd4d7c101d 100644 --- a/source/libs/tdb/test/CMakeLists.txt +++ b/source/libs/tdb/test/CMakeLists.txt @@ -6,7 +6,11 @@ target_link_libraries(tdbTest tdb gtest gtest_main) add_executable(tdbUtilTest "tdbUtilTest.cpp") target_link_libraries(tdbUtilTest tdb gtest gtest_main) -# tdbUtilTest +# overflow pages testing add_executable(tdbExOVFLTest "tdbExOVFLTest.cpp") target_link_libraries(tdbExOVFLTest tdb gtest gtest_main) +# page defragment testing +add_executable(tdbPageDefragmentTest "tdbPageDefragmentTest.cpp") +target_link_libraries(tdbPageDefragmentTest tdb gtest gtest_main) + diff --git a/source/libs/tdb/test/tdbPageDefragmentTest.cpp b/source/libs/tdb/test/tdbPageDefragmentTest.cpp new file mode 100644 index 0000000000..7aeef94d14 --- /dev/null +++ b/source/libs/tdb/test/tdbPageDefragmentTest.cpp @@ -0,0 +1,722 @@ +#include + +#define ALLOW_FORBID_FUNC +#include "os.h" +#include "tdb.h" + +#include +#include +#include +#include +#include "tlog.h" + +typedef struct SPoolMem { + int64_t size; + struct SPoolMem *prev; + struct SPoolMem *next; +} SPoolMem; + +static SPoolMem *openPool() { + SPoolMem *pPool = (SPoolMem *)taosMemoryMalloc(sizeof(*pPool)); + + pPool->prev = pPool->next = pPool; + pPool->size = 0; + + return pPool; +} + +static void clearPool(SPoolMem *pPool) { + SPoolMem *pMem; + + do { + pMem = pPool->next; + + if (pMem == pPool) break; + + pMem->next->prev = pMem->prev; + pMem->prev->next = pMem->next; + pPool->size -= pMem->size; + + taosMemoryFree(pMem); + } while (1); + + assert(pPool->size == 0); +} + +static void closePool(SPoolMem *pPool) { + clearPool(pPool); + taosMemoryFree(pPool); +} + +static void *poolMalloc(void *arg, size_t size) { + void *ptr = NULL; + SPoolMem *pPool = (SPoolMem *)arg; + SPoolMem *pMem; + + pMem = (SPoolMem *)taosMemoryMalloc(sizeof(*pMem) + size); + if (pMem == NULL) { + assert(0); + } + + pMem->size = sizeof(*pMem) + size; + pMem->next = pPool->next; + pMem->prev = pPool; + + pPool->next->prev = pMem; + pPool->next = pMem; + pPool->size += pMem->size; + + ptr = (void *)(&pMem[1]); + return ptr; +} + +static void poolFree(void *arg, void *ptr) { + SPoolMem *pPool = (SPoolMem *)arg; + SPoolMem *pMem; + + pMem = &(((SPoolMem *)ptr)[-1]); + + pMem->next->prev = pMem->prev; + pMem->prev->next = pMem->next; + pPool->size -= pMem->size; + + taosMemoryFree(pMem); +} + +static int tKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kLen2) { + int k1, k2; + + std::string s1((char *)pKey1 + 3, kLen1 - 3); + std::string s2((char *)pKey2 + 3, kLen2 - 3); + k1 = stoi(s1); + k2 = stoi(s2); + + if (k1 < k2) { + return -1; + } else if (k1 > k2) { + return 1; + } else { + return 0; + } +} + +static int tDefaultKeyCmpr(const void *pKey1, int keyLen1, const void *pKey2, int keyLen2) { + int mlen; + int cret; + + ASSERT(keyLen1 > 0 && keyLen2 > 0 && pKey1 != NULL && pKey2 != NULL); + + mlen = keyLen1 < keyLen2 ? keyLen1 : keyLen2; + cret = memcmp(pKey1, pKey2, mlen); + if (cret == 0) { + if (keyLen1 < keyLen2) { + cret = -1; + } else if (keyLen1 > keyLen2) { + cret = 1; + } else { + cret = 0; + } + } + return cret; +} + +// TEST(TdbPageDefragmentTest, DISABLED_TbUpsertTest) { +// TEST(TdbPageDefragmentTest, TbUpsertTest) { +//} + +// TEST(TdbPageDefragmentTest, DISABLED_TbPGetTest) { +// TEST(TdbPageDefragmentTest, TbPGetTest) { +//} + +static void generateBigVal(char *val, int valLen) { + for (int i = 0; i < valLen; ++i) { + char c = char(i & 0xff); + if (c == 0) { + c = 1; + } + val[i] = c; + } +} + +static TDB *openEnv(char const *envName, int const pageSize, int const pageNum) { + TDB *pEnv = NULL; + + int ret = tdbOpen(envName, pageSize, pageNum, &pEnv, 0); + if (ret) { + pEnv = NULL; + } + + return pEnv; +} + +static void insertOfp(void) { + int ret = 0; + + taosRemoveDir("tdb"); + + // open Env + int const pageSize = 4096; + int const pageNum = 64; + TDB *pEnv = openEnv("tdb", pageSize, pageNum); + GTEST_ASSERT_NE(pEnv, nullptr); + + // open db + TTB *pDb = NULL; + tdb_cmpr_fn_t compFunc = tKeyCmpr; + // ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); + ret = tdbTbOpen("ofp_insert.db", 12, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + // open the pool + SPoolMem *pPool = openPool(); + + // start a transaction + TXN *txn = NULL; + + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + // generate value payload + // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[32605]; + int valLen = sizeof(val) / sizeof(val[0]); + generateBigVal(val, valLen); + + // insert the generated big data + // char const *key = "key1"; + char const *key = "key123456789"; + ret = tdbTbInsert(pDb, key, strlen(key), val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + + // commit current transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); +} + +TEST(TdbPageDefragmentTest, DISABLED_TbInsertTest) { + // TEST(TdbPageDefragmentTest, TbInsertTest) { + // ofp inserting + insertOfp(); +} + +TEST(TdbPageDefragmentTest, DISABLED_TbGetTest) { + // TEST(TdbPageDefragmentTest, TbGetTest) { + insertOfp(); + + // open Env + int const pageSize = 4096; + int const pageNum = 64; + TDB *pEnv = openEnv("tdb", pageSize, pageNum); + GTEST_ASSERT_NE(pEnv, nullptr); + + // open db + TTB *pDb = NULL; + tdb_cmpr_fn_t compFunc = tKeyCmpr; + // int ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); + int ret = tdbTbOpen("ofp_insert.db", 12, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + // generate value payload + // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[32605]; + int valLen = sizeof(val) / sizeof(val[0]); + generateBigVal(val, valLen); + + { // Query the data + void *pVal = NULL; + int vLen; + + // char const *key = "key1"; + char const *key = "key123456789"; + ret = tdbTbGet(pDb, key, strlen(key), &pVal, &vLen); + ASSERT(ret == 0); + GTEST_ASSERT_EQ(ret, 0); + + GTEST_ASSERT_EQ(vLen, valLen); + GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); + + tdbFree(pVal); + } +} + +TEST(TdbPageDefragmentTest, DISABLED_TbDeleteTest) { + // TEST(TdbPageDefragmentTest, TbDeleteTest) { + int ret = 0; + + taosRemoveDir("tdb"); + + // open Env + int const pageSize = 4096; + int const pageNum = 64; + TDB *pEnv = openEnv("tdb", pageSize, pageNum); + GTEST_ASSERT_NE(pEnv, nullptr); + + // open db + TTB *pDb = NULL; + tdb_cmpr_fn_t compFunc = tKeyCmpr; + ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + // open the pool + SPoolMem *pPool = openPool(); + + // start a transaction + TXN *txn; + + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + // generate value payload + // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[((4083 - 4 - 3 - 2) + 1) * 2]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + int valLen = sizeof(val) / sizeof(val[0]); + generateBigVal(val, valLen); + + { // insert the generated big data + ret = tdbTbInsert(pDb, "key1", strlen("key1"), val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + } + + { // query the data + void *pVal = NULL; + int vLen; + + ret = tdbTbGet(pDb, "key1", strlen("key1"), &pVal, &vLen); + ASSERT(ret == 0); + GTEST_ASSERT_EQ(ret, 0); + + GTEST_ASSERT_EQ(vLen, valLen); + GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); + + tdbFree(pVal); + } + /* open to debug committed file +tdbCommit(pEnv, &txn); +tdbTxnClose(&txn); + +++txnid; +tdbTxnOpen(&txn, txnid, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); +tdbBegin(pEnv, &txn); + */ + { // upsert the data + ret = tdbTbUpsert(pDb, "key1", strlen("key1"), "value1", strlen("value1"), txn); + GTEST_ASSERT_EQ(ret, 0); + } + + { // query the upserted data + void *pVal = NULL; + int vLen; + + ret = tdbTbGet(pDb, "key1", strlen("key1"), &pVal, &vLen); + ASSERT(ret == 0); + GTEST_ASSERT_EQ(ret, 0); + + GTEST_ASSERT_EQ(vLen, strlen("value1")); + GTEST_ASSERT_EQ(memcmp("value1", pVal, vLen), 0); + + tdbFree(pVal); + } + + { // delete the data + ret = tdbTbDelete(pDb, "key1", strlen("key1"), txn); + GTEST_ASSERT_EQ(ret, 0); + } + + { // query the deleted data + void *pVal = NULL; + int vLen = -1; + + ret = tdbTbGet(pDb, "key1", strlen("key1"), &pVal, &vLen); + ASSERT(ret == -1); + GTEST_ASSERT_EQ(ret, -1); + + GTEST_ASSERT_EQ(vLen, -1); + GTEST_ASSERT_EQ(pVal, nullptr); + + tdbFree(pVal); + } + + // commit current transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); +} + +TEST(TdbPageDefragmentTest, DISABLED_simple_insert1) { + // TEST(TdbPageDefragmentTest, simple_insert1) { + int ret; + TDB *pEnv; + TTB *pDb; + tdb_cmpr_fn_t compFunc; + int nData = 1; + TXN *txn; + int const pageSize = 4096; + + taosRemoveDir("tdb"); + + // Open Env + ret = tdbOpen("tdb", pageSize, 64, &pEnv, 0); + GTEST_ASSERT_EQ(ret, 0); + + // Create a database + compFunc = tKeyCmpr; + ret = tdbTbOpen("db.db", -1, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + { + char key[64]; + // char val[(4083 - 4 - 3 - 2)]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + int64_t poolLimit = 4096; // 1M pool limit + SPoolMem *pPool; + + // open the pool + pPool = openPool(); + + // start a transaction + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + for (int iData = 1; iData <= nData; iData++) { + sprintf(key, "key0"); + sprintf(val, "value%d", iData); + + // ret = tdbTbInsert(pDb, key, strlen(key), val, strlen(val), &txn); + // GTEST_ASSERT_EQ(ret, 0); + + // generate value payload + int valLen = sizeof(val) / sizeof(val[0]); + for (int i = 6; i < valLen; ++i) { + char c = char(i & 0xff); + if (c == 0) { + c = 1; + } + val[i] = c; + } + + ret = tdbTbInsert(pDb, "key1", strlen("key1"), val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + + // if pool is full, commit the transaction and start a new one + if (pPool->size >= poolLimit) { + // commit current transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + + // start a new transaction + clearPool(pPool); + + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + } + } + + // commit the transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + + { // Query the data + void *pVal = NULL; + int vLen; + + for (int i = 1; i <= nData; i++) { + sprintf(key, "key%d", i); + // sprintf(val, "value%d", i); + + ret = tdbTbGet(pDb, key, strlen(key), &pVal, &vLen); + ASSERT(ret == 0); + GTEST_ASSERT_EQ(ret, 0); + + GTEST_ASSERT_EQ(vLen, sizeof(val) / sizeof(val[0])); + GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); + } + + tdbFree(pVal); + } + + { // Iterate to query the DB data + TBC *pDBC; + void *pKey = NULL; + void *pVal = NULL; + int vLen, kLen; + int count = 0; + + ret = tdbTbcOpen(pDb, &pDBC, NULL); + GTEST_ASSERT_EQ(ret, 0); + + tdbTbcMoveToFirst(pDBC); + + for (;;) { + ret = tdbTbcNext(pDBC, &pKey, &kLen, &pVal, &vLen); + if (ret < 0) break; + + // std::cout.write((char *)pKey, kLen) /* << " " << kLen */ << " "; + // std::cout.write((char *)pVal, vLen) /* << " " << vLen */; + // std::cout << std::endl; + + count++; + } + + GTEST_ASSERT_EQ(count, nData); + + tdbTbcClose(pDBC); + + tdbFree(pKey); + tdbFree(pVal); + } + } + + ret = tdbTbDrop(pDb); + GTEST_ASSERT_EQ(ret, 0); + + // Close a database + tdbTbClose(pDb); + + // Close Env + ret = tdbClose(pEnv); + GTEST_ASSERT_EQ(ret, 0); +} + +// TEST(TdbPageDefragmentTest, DISABLED_seq_insert) { +TEST(TdbPageDefragmentTest, seq_insert) { + int ret = 0; + TDB *pEnv = NULL; + TTB *pDb = NULL; + tdb_cmpr_fn_t compFunc; + int nData = 64 * 1024; + TXN *txn = NULL; + int const pageSize = 1 * 1024 * 1024; + + taosRemoveDir("tdb"); + + // Open Env + ret = tdbOpen("tdb", pageSize, 64, &pEnv, 0); + GTEST_ASSERT_EQ(ret, 0); + + // Create a database + compFunc = tKeyCmpr; + ret = tdbTbOpen("db.db", -1, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + // 1, insert nData kv + { + char key[64]; + // char val[(4083 - 4 - 3 - 2)]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + int64_t poolLimit = 4096; // 1M pool limit + SPoolMem *pPool; + + // open the pool + pPool = openPool(); + + // start a transaction + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + for (int iData = 0; iData < nData; ++iData) { + sprintf(key, "key%d", iData); + sprintf(val, "value%d", iData); + + ret = tdbTbInsert(pDb, key, strlen(key), val, strlen(val), txn); + GTEST_ASSERT_EQ(ret, 0); + /* + // generate value payload + int valLen = sizeof(val) / sizeof(val[0]); + for (int i = 6; i < valLen; ++i) { + char c = char(i & 0xff); + if (c == 0) { + c = 1; + } + val[i] = c; + } + + ret = tdbTbInsert(pDb, key, strlen(key), val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + */ + // if pool is full, commit the transaction and start a new one + if (pPool->size >= poolLimit) { + // commit current transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + + // start a new transaction + clearPool(pPool); + + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + } + } + + // commit the transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + + // 2, delete nData/2 records + } + + // Close a database + tdbTbClose(pDb); + + // Close Env + ret = tdbClose(pEnv); + GTEST_ASSERT_EQ(ret, 0); +} + +// TEST(TdbPageDefragmentTest, DISABLED_seq_delete) { +TEST(TdbPageDefragmentTest, seq_delete) { + int ret = 0; + TDB *pEnv = NULL; + TTB *pDb = NULL; + tdb_cmpr_fn_t compFunc; + int nData = 64 * 1024; + TXN *txn = NULL; + int const pageSize = 1 * 1024 * 1024; + + // Open Env + ret = tdbOpen("tdb", pageSize, 64, &pEnv, 0); + GTEST_ASSERT_EQ(ret, 0); + + // Create a database + compFunc = tKeyCmpr; + ret = tdbTbOpen("db.db", -1, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + // 2, delete nData/2 records + { + char key[64]; + // char val[(4083 - 4 - 3 - 2)]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + int64_t poolLimit = 4096; // 1M pool limit + SPoolMem *pPool; + + // open the pool + pPool = openPool(); + + // start a transaction + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + for (int iData = 1; iData <= nData; iData++) { + if (iData % 2 == 0) continue; + + sprintf(key, "key%d", iData); + sprintf(val, "value%d", iData); + + { // delete the data + ret = tdbTbDelete(pDb, key, strlen(key), txn); + GTEST_ASSERT_EQ(ret, 0); + } + + /* + // generate value payload + int valLen = sizeof(val) / sizeof(val[0]); + for (int i = 6; i < valLen; ++i) { + char c = char(i & 0xff); + if (c == 0) { + c = 1; + } + val[i] = c; + } + + ret = tdbTbInsert(pDb, key, strlen(key), val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + */ + // if pool is full, commit the transaction and start a new one + if (pPool->size >= poolLimit) { + // commit current transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + + // start a new transaction + clearPool(pPool); + + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + } + } + + // commit the transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + } + + // Close a database + tdbTbClose(pDb); + + // Close Env + ret = tdbClose(pEnv); + GTEST_ASSERT_EQ(ret, 0); +} + +// TEST(TdbPageDefragmentTest, DISABLED_defragment_insert) { +TEST(TdbPageDefragmentTest, defragment_insert) { + int ret = 0; + TDB *pEnv = NULL; + TTB *pDb = NULL; + tdb_cmpr_fn_t compFunc; + int nData = 64 * 1024; + TXN *txn = NULL; + int const pageSize = 1 * 1024 * 1024; + + // Open Env + ret = tdbOpen("tdb", pageSize, 64, &pEnv, 0); + GTEST_ASSERT_EQ(ret, 0); + + // Create a database + compFunc = tKeyCmpr; + ret = tdbTbOpen("db.db", -1, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + // 3, insert 32k records + { + char key[64]; + // char val[(4083 - 4 - 3 - 2)]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + int64_t poolLimit = 4096; // 1M pool limit + SPoolMem *pPool; + + // open the pool + pPool = openPool(); + + // start a transaction + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + for (int iData = nData + 1; iData <= nData * 2; iData++) { + // if (iData % 2 == 0) continue; + sprintf(key, "key%d", iData); + sprintf(val, "value%d", iData); + + ret = tdbTbInsert(pDb, key, strlen(key), val, strlen(val), txn); + GTEST_ASSERT_EQ(ret, 0); + /* + // generate value payload + int valLen = sizeof(val) / sizeof(val[0]); + for (int i = 6; i < valLen; ++i) { + char c = char(i & 0xff); + if (c == 0) { + c = 1; + } + val[i] = c; + } + + ret = tdbTbInsert(pDb, key, strlen(key), val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + */ + // if pool is full, commit the transaction and start a new one + if (pPool->size >= poolLimit) { + // commit current transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + + // start a new transaction + clearPool(pPool); + + tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + } + } + + // commit the transaction + tdbCommit(pEnv, txn); + tdbPostCommit(pEnv, txn); + + // 2, delete nData/2 records + } + + // Close a database + tdbTbClose(pDb); + + // Close Env + ret = tdbClose(pEnv); + GTEST_ASSERT_EQ(ret, 0); +} diff --git a/source/libs/wal/src/walRead.c b/source/libs/wal/src/walRead.c index d068ede52d..e31616f53e 100644 --- a/source/libs/wal/src/walRead.c +++ b/source/libs/wal/src/walRead.c @@ -576,3 +576,12 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { return 0; } + +void walReadReset(SWalReader *pReader) { + taosThreadMutexLock(&pReader->mutex); + taosCloseFile(&pReader->pIdxFile); + taosCloseFile(&pReader->pLogFile); + pReader->curInvalid = 1; + pReader->curFileFirstVer = -1; + taosThreadMutexUnlock(&pReader->mutex); +} diff --git a/source/os/CMakeLists.txt b/source/os/CMakeLists.txt index 0d75634d14..db066a82b6 100644 --- a/source/os/CMakeLists.txt +++ b/source/os/CMakeLists.txt @@ -37,7 +37,9 @@ if(CHECK_STR2INT_ERROR) add_definitions(-DTD_CHECK_STR_TO_INT_ERROR) endif() target_link_libraries( - os PUBLIC pthread + os + PUBLIC pthread + PUBLIC zlibstatic ) if(TD_WINDOWS) target_link_libraries( @@ -67,4 +69,4 @@ ENDIF () if(${BUILD_TEST}) add_subdirectory(test) -endif(${BUILD_TEST}) \ No newline at end of file +endif(${BUILD_TEST}) diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c index 71b3125de8..8cc9885adb 100644 --- a/source/os/src/osFile.c +++ b/source/os/src/osFile.c @@ -15,6 +15,7 @@ #define ALLOW_FORBID_FUNC #include "os.h" #include "osSemaphore.h" +#include "zlib.h" #ifdef WINDOWS #include @@ -870,3 +871,48 @@ bool taosCheckAccessFile(const char *pathname, int32_t tdFileAccessOptions) { } bool taosCheckExistFile(const char *pathname) { return taosCheckAccessFile(pathname, TD_FILE_ACCESS_EXIST_OK); }; + +int32_t taosCompressFile(char *srcFileName, char *destFileName) { + int32_t compressSize = 163840; + int32_t ret = 0; + int32_t len = 0; + char *data = taosMemoryMalloc(compressSize); + gzFile dstFp = NULL; + + TdFilePtr pSrcFile = taosOpenFile(srcFileName, TD_FILE_READ | TD_FILE_STREAM); + if (pSrcFile == NULL) { + ret = -1; + goto cmp_end; + } + + TdFilePtr pFile = taosOpenFile(destFileName, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC); + if (pFile == NULL) { + ret = -2; + goto cmp_end; + } + + dstFp = gzdopen(pFile->fd, "wb6f"); + if (dstFp == NULL) { + ret = -3; + taosCloseFile(&pFile); + goto cmp_end; + } + + while (!feof(pSrcFile->fp)) { + len = (int32_t)fread(data, 1, compressSize, pSrcFile->fp); + (void)gzwrite(dstFp, data, len); + } + +cmp_end: + if (pSrcFile) { + taosCloseFile(&pSrcFile); + } + + if (dstFp) { + gzclose(dstFp); + } + + taosMemoryFree(data); + + return ret; +} diff --git a/source/util/src/terror.c b/source/util/src/terror.c index d63687c8d7..fecdb4d32a 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -88,6 +88,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_NEED_RETRY, "Retry needed") TAOS_DEFINE_ERROR(TSDB_CODE_OUT_OF_RPC_MEMORY_QUEUE, "Out of memory in rpc queue") TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_TIMESTAMP, "Invalid timestamp format") TAOS_DEFINE_ERROR(TSDB_CODE_MSG_DECODE_ERROR, "Msg decode error") +TAOS_DEFINE_ERROR(TSDB_CODE_MSG_ENCODE_ERROR, "Msg encode error") TAOS_DEFINE_ERROR(TSDB_CODE_NO_AVAIL_DISK, "No available disk") TAOS_DEFINE_ERROR(TSDB_CODE_NOT_FOUND, "Not found") TAOS_DEFINE_ERROR(TSDB_CODE_NO_DISKSPACE, "Out of disk space") diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index 62f074db5b..89dd51a892 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -115,7 +115,6 @@ static int32_t taosPushLogBuffer(SLogBuff *pLogBuf, const char *msg, int32_t m static SLogBuff *taosLogBuffNew(int32_t bufSize); static void taosCloseLogByFd(TdFilePtr pFile); static int32_t taosOpenLogFile(char *fn, int32_t maxLines, int32_t maxFileNum); -static int32_t taosCompressFile(char *srcFileName, char *destFileName); static FORCE_INLINE void taosUpdateDaylight() { struct tm Tm, *ptm; @@ -748,50 +747,6 @@ static void *taosAsyncOutputLog(void *param) { return NULL; } -int32_t taosCompressFile(char *srcFileName, char *destFileName) { - int32_t compressSize = 163840; - int32_t ret = 0; - int32_t len = 0; - char *data = taosMemoryMalloc(compressSize); - // gzFile dstFp = NULL; - - // srcFp = fopen(srcFileName, "r"); - TdFilePtr pSrcFile = taosOpenFile(srcFileName, TD_FILE_READ); - if (pSrcFile == NULL) { - ret = -1; - goto cmp_end; - } - - TdFilePtr pFile = taosOpenFile(destFileName, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC); - if (pFile == NULL) { - ret = -2; - goto cmp_end; - } - - // dstFp = gzdopen(fd, "wb6f"); - // if (dstFp == NULL) { - // ret = -3; - // close(fd); - // goto cmp_end; - // } - // - // while (!feof(srcFp)) { - // len = (int32_t)fread(data, 1, compressSize, srcFp); - // (void)gzwrite(dstFp, data, len); - // } - -cmp_end: - if (pSrcFile) { - taosCloseFile(&pSrcFile); - } - // if (dstFp) { - // gzclose(dstFp); - // } - taosMemoryFree(data); - - return ret; -} - bool taosAssertDebug(bool condition, const char *file, int32_t line, const char *format, ...) { if (condition) return false; diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 827ffe183c..e1baac4a0f 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -410,7 +410,7 @@ ,,y,script,./test.sh -f tmp/monitor.sim #system test - +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/balance_vgroups_r1.py -N 6 ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShell.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellError.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellNetChk.py diff --git a/tests/script/tsim/parser/regressiontest.sim b/tests/script/tsim/parser/regressiontest.sim index 1d84ae88cb..c08b1bbf27 100644 --- a/tests/script/tsim/parser/regressiontest.sim +++ b/tests/script/tsim/parser/regressiontest.sim @@ -15,7 +15,7 @@ $db = $dbPrefix . $i sql drop database if exists $db -x step1 step1: -sql create database $db vgroups 1; +sql create database $db vgroups 1 cachemodel 'last_row' sql use $db sql create table $tb (ts timestamp, c1 int) @@ -122,4 +122,74 @@ if $data01 != 199 then return -1 endi +sql drop table t1 + +$rowNum = 8200 +$ts0 = 1537146000000 +sql create table t1 (ts timestamp, c1 int) + +$i = 0 +$ts = $ts0 + +$x = 0 +while $x < $rowNum +$xs = $x * $delta +$ts = $ts0 + $xs +sql insert into t1 values ( $ts , $x ) +$x = $x + 1 +endw + +sql delete from t1 where ts<=1537146409500 + +sql flush database $db + +print =====================================>TD-22007 +sql select count(*) from t1 interval(10a) + +sql drop table t1 + +sql create table st1 (ts timestamp, k int) tags(a int); +sql insert into t1 using st1 tags(1) values('2020-1-1 10:10:10', 0); +sql insert into t2 using st1 tags(1) values('2020-1-1 10:10:11', 1); +sql insert into t3 using st1 tags(1) values('2020-1-1 10:10:12', 2); +sql insert into t4 using st1 tags(1) values('2020-1-1 10:10:13', 3); +sql insert into t5 using st1 tags(1) values('2020-1-1 10:10:14', 4); +sql insert into t6 using st1 tags(2) values('2020-1-1 10:10:15', 5); +sql insert into t7 using st1 tags(2) values('2020-1-1 10:10:16', 6); +sql insert into t8 using st1 tags(2) values('2020-1-1 10:10:17', 7); +sql insert into t9 using st1 tags(2) values('2020-1-1 10:10:18', 8); +sql insert into t10 using st1 tags(2) values('2020-1-1 10:10:19', 9); + +sql select count(*) from st1 +if $data00 != 10 then + return -1 +endi + +sql select last_row(*) from st1 group by a +if $rows != 2 then + return -1 +endi + +if $data00 != @20-01-01 10:10:19.000@ then + return -1 +endi + +if $data01 != 9 then + return -1 +endi + +if $data10 != @20-01-01 10:10:14.000@ then + return -1 +endi + +if $data11 != 4 then + return -1 +endi + +print ===============================================> TS-2613 +sql select * from information_schema.ins_databases limit 1 offset 1; +if $rows != 1 then + return -1 +endi + system sh/exec.sh -n dnode1 -s stop -x SIGINT diff --git a/tests/script/tsim/stream/basic3.sim b/tests/script/tsim/stream/basic3.sim index e598919e34..2df33541b4 100644 --- a/tests/script/tsim/stream/basic3.sim +++ b/tests/script/tsim/stream/basic3.sim @@ -81,6 +81,15 @@ if $rows == 0 then return -1 endi +sleep 3000 + +sql drop stream if exists streamd1; +sql drop stream if exists streamd2; +sql drop stream if exists streamd3; +sql drop stream if exists streamd4; +sql drop stream if exists streamd5; +sql drop stream if exists streamd6; + sql create stream streamd10 into streamd10 as select _wstart, _wend, count(*), first(ca), last(cb) as c2 from t1 interval(10s); sql desc streamd10; @@ -100,15 +109,6 @@ if $rows == 0 then return -1 endi -sleep 3000 - -sql drop stream if exists streamd1; -sql drop stream if exists streamd2; -sql drop stream if exists streamd3; -sql drop stream if exists streamd4; -sql drop stream if exists streamd5; -sql drop stream if exists streamd6; - _OVER: system sh/exec.sh -n dnode1 -s stop -x SIGINT diff --git a/tests/script/tsim/stream/ignoreCheckUpdate.sim b/tests/script/tsim/stream/ignoreCheckUpdate.sim new file mode 100644 index 0000000000..7f99c534c8 --- /dev/null +++ b/tests/script/tsim/stream/ignoreCheckUpdate.sim @@ -0,0 +1,285 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/exec.sh -n dnode1 -s start +sleep 50 +sql connect + +print step 1 start + +sql drop stream if exists streams0; +sql drop database if exists test; +sql create database test vgroups 1; +sql use test; +sql create table t1(ts timestamp, a int, b int , c int); + +print create stream streams0 trigger at_once ignore update 1 into streamt as select _wstart c1, count(*) c2, max(b) c3 from t1 interval(10s); + +sql create stream streams0 trigger at_once ignore update 1 into streamt as select _wstart c1, count(*) c2, max(b) c3 from t1 interval(10s); + +sql insert into t1 values(1648791213000,1,1,1); +sql insert into t1 values(1648791213000,2,2,2); + +$loop_count = 0 + +loop0: +sleep 300 +sql select * from streamt order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 2 then + print =====data01=$data01 + goto loop0 +endi + +if $data02 != 2 then + print =====data02=$data02 + goto loop0 +endi + + +sql insert into t1 values(1648791213000,3,3,3); + +$loop_count = 0 + +loop1: +sleep 300 +sql select * from streamt order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 3 then + print =====data01=$data01 + goto loop1 +endi + +if $data02 != 3 then + print =====data02=$data02 + goto loop1 +endi + +print step 1 end + +print step 2 start + +sql drop stream if exists streams1; +sql drop database if exists test1; +sql create database test1 vgroups 1; +sql use test1; +sql create table t1(ts timestamp, a int, b int , c int); + +print create stream streams1 trigger at_once ignore update 1 into streamt1 as select _wstart c1, count(*) c2, max(b) c3 from t1 session(ts, 10s); + +sql create stream streams1 trigger at_once ignore update 1 into streamt1 as select _wstart c1, count(*) c2, max(b) c3 from t1 session(ts, 10s); + +sql insert into t1 values(1648791213000,1,1,1); +sql insert into t1 values(1648791213000,2,2,2); + +$loop_count = 0 + +loop2: +sleep 300 +sql select * from streamt1 order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 2 then + print =====data01=$data01 + goto loop2 +endi + +if $data02 != 2 then + print =====data02=$data02 + goto loop2 +endi + + +sql insert into t1 values(1648791213000,3,3,3); + +$loop_count = 0 + +loop3: + +sleep 300 +sql select * from streamt1 order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 3 then + print =====data01=$data01 + goto loop3 +endi + +if $data02 != 3 then + print =====data02=$data02 + goto loop3 +endi + +print step 2 end + +print step 3 start + +sql drop stream if exists streams2; +sql drop database if exists test2; +sql create database test2 vgroups 1; +sql use test2; +sql create table t1(ts timestamp, a int, b int , c int); + +print create stream streams2 trigger at_once ignore update 1 into streamt2 as select _wstart c1, count(*) c2, max(b) c3 from t1 state_window(c); + +sql create stream streams2 trigger at_once ignore update 1 into streamt2 as select _wstart c1, count(*) c2, max(b) c3 from t1 state_window(c); + +sql insert into t1 values(1648791213000,1,1,1); +sql insert into t1 values(1648791213000,2,2,1); + +$loop_count = 0 + +loop2: +sleep 300 +sql select * from streamt2 order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 2 then + print =====data01=$data01 + goto loop2 +endi + +if $data02 != 2 then + print =====data02=$data02 + goto loop2 +endi + + +sql insert into t1 values(1648791213000,3,3,1); + +$loop_count = 0 + +loop3: + +sleep 300 +sql select * from streamt2 order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 3 then + print =====data01=$data01 + goto loop3 +endi + +if $data02 != 3 then + print =====data02=$data02 + goto loop3 +endi + +print step 3 end + +print step 4 start + +sql drop stream if exists streams3; +sql drop database if exists test3; +sql create database test3 vgroups 4; +sql use test3; +sql create stable st(ts timestamp,a int,b int,c int) tags(ta int,tb int,tc int); +sql create table t1 using st tags(1,1,1); +sql create table t2 using st tags(2,2,2); + +print create stream streams3 trigger at_once ignore update 1 into streamt3 as select _wstart c1, count(*) c2, max(b) c3 from st interval(10s); + +sql create stream streams3 trigger at_once ignore update 1 into streamt3 as select _wstart c1, count(*) c2, max(b) c3 from st interval(10s); + +sql insert into t1 values(1648791213000,1,1,1); +sql insert into t1 values(1648791213000,2,2,2); + +sql insert into t2 values(1648791213000,1,1,1); +sql insert into t2 values(1648791213000,2,2,2); + +$loop_count = 0 + +loop0: +sleep 300 +sql select * from streamt3 order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 4 then + print =====data01=$data01 + goto loop0 +endi + +if $data02 != 2 then + print =====data02=$data02 + goto loop0 +endi + + +sql insert into t1 values(1648791213000,3,3,3); + +$loop_count = 0 + +loop1: +sleep 300 +sql select * from streamt3 order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 5 then + print =====data01=$data01 + goto loop1 +endi + +if $data02 != 3 then + print =====data02=$data02 + goto loop1 +endi + +sql insert into t2 values(1648791213000,4,4,4); + +$loop_count = 0 + +loop1: +sleep 300 +sql select * from streamt3 order by 1,2,3; + +$loop_count = $loop_count + 1 +if $loop_count == 10 then + return -1 +endi + +if $data01 != 6 then + print =====data01=$data01 + goto loop1 +endi + +if $data02 != 4 then + print =====data02=$data02 + goto loop1 +endi + +print step 4 end + +system sh/stop_dnodes.sh diff --git a/tests/system-test/0-others/balance_vgroups_r1.py b/tests/system-test/0-others/balance_vgroups_r1.py new file mode 100644 index 0000000000..ae504cbab1 --- /dev/null +++ b/tests/system-test/0-others/balance_vgroups_r1.py @@ -0,0 +1,99 @@ +################################################################### +# Copyright (c) 2016 by TAOS Technologies, Inc. +# All rights reserved. +# +# This file is proprietary and confidential to TAOS Technologies. +# No part of this file may be reproduced, stored, transmitted, +# disclosed or used in any form or by any means other than as +# expressly provided by the written permission from Jianhui Tao +# +################################################################### + +# -*- coding: utf-8 -*- + + +from util import constant +from util.log import * +from util.cases import * +from util.sql import * +from util.common import * +from util.sqlset import * +from util.cluster import * +class TDTestCase: + def init(self, conn, logSql, replicaVar=1): + self.replicaVar = int(replicaVar) + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor()) + self.dnode_num=len(cluster.dnodes) + self.dbname = 'db_test' + self.setsql = TDSetSql() + self.stbname = f'{self.dbname}.stb' + self.rowNum = 5 + self.tbnum = 10 + self.ts = 1537146000000 + self.binary_str = 'taosdata' + self.nchar_str = '涛思数据' + self.column_dict = { + 'ts' : 'timestamp', + 'col1': 'tinyint', + 'col2': 'smallint', + 'col3': 'int', + 'col4': 'bigint', + 'col5': 'tinyint unsigned', + 'col6': 'smallint unsigned', + 'col7': 'int unsigned', + 'col8': 'bigint unsigned', + 'col9': 'float', + 'col10': 'double', + 'col11': 'bool', + 'col12': 'binary(20)', + 'col13': 'nchar(20)' + } + self.replica = [1,3] + + def insert_data(self,column_dict,tbname,row_num): + insert_sql = self.setsql.set_insertsql(column_dict,tbname,self.binary_str,self.nchar_str) + for i in range(row_num): + insert_list = [] + self.setsql.insert_values(column_dict,i,insert_sql,insert_list,self.ts) + def prepare_data(self,dbname,stbname,column_dict,tbnum,rowNum,replica): + tag_dict = { + 't0':'int' + } + tag_values = [ + f'1' + ] + tdSql.execute(f"create database if not exists {dbname} vgroups 1 replica {replica} ") + tdSql.execute(f'use {dbname}') + tdSql.execute(self.setsql.set_create_stable_sql(stbname,column_dict,tag_dict)) + for i in range(tbnum): + tdSql.execute(f"create table {stbname}_{i} using {stbname} tags({tag_values[0]})") + self.insert_data(self.column_dict,f'{stbname}_{i}',rowNum) + def redistribute_vgroups(self,replica,stbname,tbnum,rownum): + tdSql.query('show vgroups') + vnode_id = tdSql.queryResult[0][0] + if replica == 1: + for dnode_id in range(1,self.dnode_num+1) : + tdSql.execute(f'redistribute vgroup {vnode_id} dnode {dnode_id}') + tdSql.query(f'select count(*) from {stbname}') + tdSql.checkEqual(tdSql.queryResult[0][0],tbnum*rownum) + elif replica == 3: + for dnode_id in range(1,self.dnode_num-1): + tdSql.execute(f'redistribute vgroup {vnode_id} dnode {dnode_id} dnode {dnode_id+1} dnode {dnode_id+2}') + tdSql.query(f'select count(*) from {stbname}') + tdSql.checkEqual(tdSql.queryResult[0][0],tbnum*rownum) + + def run(self): + for replica in self.replica: + self.prepare_data(self.dbname,self.stbname,self.column_dict,self.tbnum,self.rowNum,replica) + self.redistribute_vgroups(replica,self.stbname,self.tbnum,self.rowNum) + tdSql.execute(f'drop database {self.dbname}') + + + + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) \ No newline at end of file diff --git a/tests/system-test/1-insert/insert_drop.py b/tests/system-test/1-insert/insert_drop.py index 029d013d5b..930c65d90e 100644 --- a/tests/system-test/1-insert/insert_drop.py +++ b/tests/system-test/1-insert/insert_drop.py @@ -31,6 +31,10 @@ class TDTestCase: tdSql.execute('create database if not exists test;') tdSql.execute('create table test.stb (ts timestamp, c11 int, c12 float ) TAGS(t11 int, t12 int );') tdSql.execute('create table test.tb using test.stb TAGS (1, 1);') + + # double comma insert check error + tdSql.error("insert into test.tb(ts, c11) values(now,,100)") + sql_list = list() for i in range(5): sql = f'insert into test.tb values (now-{i}m, {i}, {i});' diff --git a/tests/system-test/7-tmq/tmq_taosx.py b/tests/system-test/7-tmq/tmq_taosx.py index b2bf6eec0b..593c91a470 100644 --- a/tests/system-test/7-tmq/tmq_taosx.py +++ b/tests/system-test/7-tmq/tmq_taosx.py @@ -199,6 +199,11 @@ class TDTestCase: tdSql.checkData(0, 2, None) tdSql.checkData(1, 1, 1) tdSql.checkData(1, 2, '{"k1":1,"k2":"hello"}') + + tdSql.query("select * from information_schema.ins_tables where table_name = 'stt4'") + uid1 = tdSql.getData(0, 5) + uid2 = tdSql.getData(1, 5) + tdSql.checkNotEqual(uid1, uid2) return def checkWal1Vgroup(self):