From 7cb3112d77fcfca0872e3ef6f4b4c768ab83f5a8 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Thu, 27 Oct 2022 15:52:48 +0800 Subject: [PATCH 01/81] refactor(sync): modify function name --- include/libs/sync/syncTools.h | 4 ++-- source/dnode/mnode/impl/src/mndMain.c | 4 ++-- source/dnode/vnode/src/vnd/vnodeSync.c | 4 ++-- source/libs/sync/src/syncMain.c | 27 +++++++++++++------------- source/libs/sync/src/syncReplication.c | 2 +- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/include/libs/sync/syncTools.h b/include/libs/sync/syncTools.h index d5c015bfb2..1caf21b6a7 100644 --- a/include/libs/sync/syncTools.h +++ b/include/libs/sync/syncTools.h @@ -679,8 +679,8 @@ void syncReconfigFinishLog(const SyncReconfigFinish* pMsg); void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg); // on message ---------------------- -int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg); -int32_t syncNodeOnPingReplyCb(SSyncNode* ths, SyncPingReply* pMsg); +int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg); +int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg); int32_t syncNodeOnTimer(SSyncNode* ths, SyncTimeout* pMsg); int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg); diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index fbfa1b73be..94c4ba8c79 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -540,12 +540,12 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { } else if (pMsg->msgType == TDMT_SYNC_PING) { SyncPing *pSyncMsg = syncPingFromRpcMsg2(pMsg); - code = syncNodeOnPingCb(pSyncNode, pSyncMsg); + code = syncNodeOnPing(pSyncNode, pSyncMsg); syncPingDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_PING_REPLY) { SyncPingReply *pSyncMsg = syncPingReplyFromRpcMsg2(pMsg); - code = syncNodeOnPingReplyCb(pSyncNode, pSyncMsg); + code = syncNodeOnPingReply(pSyncNode, pSyncMsg); syncPingReplyDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_CLIENT_REQUEST) { diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index d3ae1015d0..7acf5b4003 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -301,13 +301,13 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { } else if (pMsg->msgType == TDMT_SYNC_PING) { SyncPing *pSyncMsg = syncPingFromRpcMsg2(pMsg); ASSERT(pSyncMsg != NULL); - code = syncNodeOnPingCb(pSyncNode, pSyncMsg); + code = syncNodeOnPing(pSyncNode, pSyncMsg); syncPingDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_PING_REPLY) { SyncPingReply *pSyncMsg = syncPingReplyFromRpcMsg2(pMsg); ASSERT(pSyncMsg != NULL); - code = syncNodeOnPingReplyCb(pSyncNode, pSyncMsg); + code = syncNodeOnPingReply(pSyncNode, pSyncMsg); syncPingReplyDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_CLIENT_REQUEST) { diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index f1c900de50..bf76762757 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -49,8 +49,8 @@ static int32_t syncNodeAppendNoop(SSyncNode* ths); static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId); // process message ---- -int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg); -int32_t syncNodeOnPingReplyCb(SSyncNode* ths, SyncPingReply* pMsg); +int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg); +int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg); // --------------------------------- static void syncNodeFreeCb(void* param) { @@ -1327,8 +1327,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo) { } // init callback - pSyncNode->FpOnPing = syncNodeOnPingCb; - pSyncNode->FpOnPingReply = syncNodeOnPingReplyCb; + pSyncNode->FpOnPing = syncNodeOnPing; + pSyncNode->FpOnPingReply = syncNodeOnPingReply; pSyncNode->FpOnClientRequest = syncNodeOnClientRequest; pSyncNode->FpOnTimeout = syncNodeOnTimer; pSyncNode->FpOnSnapshot = syncNodeOnSnapshot; @@ -3003,18 +3003,19 @@ static int32_t syncNodeAppendNoop(SSyncNode* ths) { } // on message ---- -int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg) { - // log state +int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg) { + sTrace("vgId:%d, recv sync-ping", ths->vgId); + SyncPingReply* pMsgReply = syncPingReplyBuild3(&ths->myRaftId, &pMsg->srcId, ths->vgId); SRpcMsg rpcMsg; syncPingReply2RpcMsg(pMsgReply, &rpcMsg); /* - // htonl - SMsgHead* pHead = rpcMsg.pCont; - pHead->contLen = htonl(pHead->contLen); - pHead->vgId = htonl(pHead->vgId); -*/ + // htonl + SMsgHead* pHead = rpcMsg.pCont; + pHead->contLen = htonl(pHead->contLen); + pHead->vgId = htonl(pHead->vgId); + */ syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg); syncPingReplyDestroy(pMsgReply); @@ -3022,9 +3023,9 @@ int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg) { return 0; } -int32_t syncNodeOnPingReplyCb(SSyncNode* ths, SyncPingReply* pMsg) { +int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg) { int32_t ret = 0; - syncPingReplyLog2("==syncNodeOnPingReplyCb==", pMsg); + sTrace("vgId:%d, recv sync-ping-reply", ths->vgId); return ret; } diff --git a/source/libs/sync/src/syncReplication.c b/source/libs/sync/src/syncReplication.c index 7296e30e02..af53123421 100644 --- a/source/libs/sync/src/syncReplication.c +++ b/source/libs/sync/src/syncReplication.c @@ -57,7 +57,7 @@ int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId) { SyncIndex logEndIndex = pSyncNode->pLogStore->syncLogEndIndex(pSyncNode->pLogStore); if (nextIndex < logStartIndex || nextIndex - 1 > logEndIndex) { char logBuf[128]; - snprintf(logBuf, sizeof(logBuf), "start snapshot for next-index:%" PRId64 ", start:%" PRId64 ", end:%" PRId64, + snprintf(logBuf, sizeof(logBuf), "maybe start snapshot for next-index:%" PRId64 ", start:%" PRId64 ", end:%" PRId64, nextIndex, logStartIndex, logEndIndex); syncNodeEventLog(pSyncNode, logBuf); From 04c06841495bc5859ebda47abe3e10c467484c1d Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Thu, 27 Oct 2022 16:21:54 +0800 Subject: [PATCH 02/81] refactor(sync): add SyncLocalCmd --- include/libs/sync/syncTools.h | 41 +++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/include/libs/sync/syncTools.h b/include/libs/sync/syncTools.h index 1caf21b6a7..b4eabfcbcd 100644 --- a/include/libs/sync/syncTools.h +++ b/include/libs/sync/syncTools.h @@ -678,24 +678,57 @@ void syncReconfigFinishPrint2(char* s, const SyncReconfigFinish* pMsg); void syncReconfigFinishLog(const SyncReconfigFinish* pMsg); void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg); +// --------------------------------------------- +typedef struct SyncLocalCmd { + uint32_t bytes; + int32_t vgId; + uint32_t msgType; + SRaftId srcId; + SRaftId destId; + + int8_t cmd; + SyncTerm sdNewTerm // step down new term + +} SyncLocalCmd; + +SyncLocalCmd* syncLocalCmdBuild(uint32_t dataLen, int32_t vgId); +void syncLocalCmdDestroy(SyncLocalCmd* pMsg); +void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen); +void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg); +char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len); +SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len); +void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg); +void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg); +SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg); +cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg); +char* syncLocalCmd2Str(const SyncLocalCmd* pMsg); + +// for debug ---------------------- +void syncLocalCmdPrint(const SyncLocalCmd* pMsg); +void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg); +void syncLocalCmdLog(const SyncLocalCmd* pMsg); +void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg); + // on message ---------------------- int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg); int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg); -int32_t syncNodeOnTimer(SSyncNode* ths, SyncTimeout* pMsg); -int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg); -int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg); -int32_t syncNodeOnClientRequest(SSyncNode* ths, SyncClientRequest* pMsg, SyncIndex* pRetIndex); int32_t syncNodeOnRequestVote(SSyncNode* ths, SyncRequestVote* pMsg); int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, SyncRequestVoteReply* pMsg); + int32_t syncNodeOnAppendEntries(SSyncNode* ths, SyncAppendEntries* pMsg); int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, SyncAppendEntriesReply* pMsg); + int32_t syncNodeOnSnapshot(SSyncNode* ths, SyncSnapshotSend* pMsg); int32_t syncNodeOnSnapshotReply(SSyncNode* ths, SyncSnapshotRsp* pMsg); int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg); int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg); +int32_t syncNodeOnClientRequest(SSyncNode* ths, SyncClientRequest* pMsg, SyncIndex* pRetIndex); +int32_t syncNodeOnTimer(SSyncNode* ths, SyncTimeout* pMsg); +int32_t syncNodeOnLocalCmd(SSyncNode* ths, SyncLocalCmd* pMsg); + // ----------------------------------------- typedef int32_t (*FpOnPingCb)(SSyncNode* ths, SyncPing* pMsg); typedef int32_t (*FpOnPingReplyCb)(SSyncNode* ths, SyncPingReply* pMsg); From 8b5d005db70f73dca410b6112cf0c7593b0ac65a Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Thu, 27 Oct 2022 17:16:46 +0800 Subject: [PATCH 03/81] refactor(sync): add SyncLocalCmd --- include/common/tmsgdef.h | 1 + include/libs/sync/syncTools.h | 8 +- source/libs/sync/src/syncMessage.c | 150 +++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+), 2 deletions(-) diff --git a/include/common/tmsgdef.h b/include/common/tmsgdef.h index be4bf0e4d2..571d14fe3c 100644 --- a/include/common/tmsgdef.h +++ b/include/common/tmsgdef.h @@ -269,6 +269,7 @@ enum { TD_DEF_MSG_TYPE(TDMT_SYNC_SET_VNODE_STANDBY, "set-vnode-standby", NULL, NULL) // no longer used TD_DEF_MSG_TYPE(TDMT_SYNC_HEARTBEAT, "sync-heartbeat", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_SYNC_HEARTBEAT_REPLY, "sync-heartbeat-reply", NULL, NULL) + TD_DEF_MSG_TYPE(TDMT_SYNC_LOCAL_CMD, "sync-local-cmd", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_SYNC_MAX_MSG, "sync-max", NULL, NULL) #if defined(TD_MSG_NUMBER_) diff --git a/include/libs/sync/syncTools.h b/include/libs/sync/syncTools.h index b4eabfcbcd..1c219f98bd 100644 --- a/include/libs/sync/syncTools.h +++ b/include/libs/sync/syncTools.h @@ -679,6 +679,10 @@ void syncReconfigFinishLog(const SyncReconfigFinish* pMsg); void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg); // --------------------------------------------- +typedef enum { + SYNC_STEP_DOWN = 0, +} ESyncLocalCmd; + typedef struct SyncLocalCmd { uint32_t bytes; int32_t vgId; @@ -686,8 +690,8 @@ typedef struct SyncLocalCmd { SRaftId srcId; SRaftId destId; - int8_t cmd; - SyncTerm sdNewTerm // step down new term + int32_t cmd; + SyncTerm sdNewTerm; // step down new term } SyncLocalCmd; diff --git a/source/libs/sync/src/syncMessage.c b/source/libs/sync/src/syncMessage.c index 7a8ea0c4d7..b62c564fcd 100644 --- a/source/libs/sync/src/syncMessage.c +++ b/source/libs/sync/src/syncMessage.c @@ -3095,3 +3095,153 @@ void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg) { taosMemoryFree(serialized); } } + +// --------------------------------------------- +SyncLocalCmd* syncLocalCmdBuild(uint32_t dataLen, int32_t vgId) { + uint32_t bytes = sizeof(SyncLocalCmd); + SyncLocalCmd* pMsg = taosMemoryMalloc(bytes); + memset(pMsg, 0, bytes); + pMsg->bytes = bytes; + pMsg->vgId = vgId; + pMsg->msgType = TDMT_SYNC_LOCAL_CMD; + return pMsg; +} + +void syncLocalCmdDestroy(SyncLocalCmd* pMsg) { + if (pMsg != NULL) { + taosMemoryFree(pMsg); + } +} + +void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen) { + ASSERT(pMsg->bytes <= bufLen); + memcpy(buf, pMsg, pMsg->bytes); +} + +void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg) { + memcpy(pMsg, buf, len); + ASSERT(len == pMsg->bytes); +} + +char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len) { + char* buf = taosMemoryMalloc(pMsg->bytes); + ASSERT(buf != NULL); + syncLocalCmdSerialize(pMsg, buf, pMsg->bytes); + if (len != NULL) { + *len = pMsg->bytes; + } + return buf; +} + +SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len) { + uint32_t bytes = *((uint32_t*)buf); + SyncLocalCmd* pMsg = taosMemoryMalloc(bytes); + ASSERT(pMsg != NULL); + syncLocalCmdDeserialize(buf, len, pMsg); + ASSERT(len == pMsg->bytes); + return pMsg; +} + +void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg) { + memset(pRpcMsg, 0, sizeof(*pRpcMsg)); + pRpcMsg->msgType = pMsg->msgType; + pRpcMsg->contLen = pMsg->bytes; + pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen); + syncLocalCmdSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen); +} + +void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg) { + syncLocalCmdDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg); +} + +SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg) { + SyncLocalCmd* pMsg = syncLocalCmdDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen); + ASSERT(pMsg != NULL); + return pMsg; +} + +cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg) { + char u64buf[128]; + cJSON* pRoot = cJSON_CreateObject(); + + if (pMsg != NULL) { + cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes); + cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId); + cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType); + + cJSON* pSrcId = cJSON_CreateObject(); + snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr); + cJSON_AddStringToObject(pSrcId, "addr", u64buf); + { + uint64_t u64 = pMsg->srcId.addr; + cJSON* pTmp = pSrcId; + char host[128]; + uint16_t port; + syncUtilU642Addr(u64, host, sizeof(host), &port); + cJSON_AddStringToObject(pTmp, "addr_host", host); + cJSON_AddNumberToObject(pTmp, "addr_port", port); + } + cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId); + cJSON_AddItemToObject(pRoot, "srcId", pSrcId); + + cJSON* pDestId = cJSON_CreateObject(); + snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr); + cJSON_AddStringToObject(pDestId, "addr", u64buf); + { + uint64_t u64 = pMsg->destId.addr; + cJSON* pTmp = pDestId; + char host[128]; + uint16_t port; + syncUtilU642Addr(u64, host, sizeof(host), &port); + cJSON_AddStringToObject(pTmp, "addr_host", host); + cJSON_AddNumberToObject(pTmp, "addr_port", port); + } + cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId); + cJSON_AddItemToObject(pRoot, "destId", pDestId); + + cJSON_AddNumberToObject(pRoot, "cmd", pMsg->cmd); + + snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->sdNewTerm); + cJSON_AddStringToObject(pRoot, "sd-new-term", u64buf); + } + + cJSON* pJson = cJSON_CreateObject(); + cJSON_AddItemToObject(pJson, "SyncSnapshotRsp", pRoot); + return pJson; +} + +char* syncLocalCmd2Str(const SyncLocalCmd* pMsg) { + cJSON* pJson = syncLocalCmd2Json(pMsg); + char* serialized = cJSON_Print(pJson); + cJSON_Delete(pJson); + return serialized; +} + +// for debug ---------------------- +void syncLocalCmdPrint(const SyncLocalCmd* pMsg) { + char* serialized = syncLocalCmd2Str(pMsg); + printf("syncLocalCmdPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized); + fflush(NULL); + taosMemoryFree(serialized); +} + +void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg) { + char* serialized = syncLocalCmd2Str(pMsg); + printf("syncLocalCmdPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized); + fflush(NULL); + taosMemoryFree(serialized); +} + +void syncLocalCmdLog(const SyncLocalCmd* pMsg) { + char* serialized = syncLocalCmd2Str(pMsg); + sTrace("syncLocalCmdLog | len:%d | %s", (int32_t)strlen(serialized), serialized); + taosMemoryFree(serialized); +} + +void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg) { + if (gRaftDetailLog) { + char* serialized = syncLocalCmd2Str(pMsg); + sTrace("syncLocalCmdLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized); + taosMemoryFree(serialized); + } +} \ No newline at end of file From 54dfc8cd524b6e11ba07d2b19076dae2641f16fc Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Thu, 27 Oct 2022 17:38:33 +0800 Subject: [PATCH 04/81] enh(sync): add test --- source/libs/sync/test/CMakeLists.txt | 14 +++ .../test/syncConfigChangeSnapshotTest.cpp | 2 +- .../libs/sync/test/syncConfigChangeTest.cpp | 2 +- source/libs/sync/test/syncEncodeTest.cpp | 2 +- source/libs/sync/test/syncIndexTest.cpp | 2 +- source/libs/sync/test/syncLocalCmdTest.cpp | 100 ++++++++++++++++++ source/libs/sync/test/syncRaftIdCheck.cpp | 2 +- source/libs/sync/test/syncRaftLogTest3.cpp | 16 +-- source/libs/sync/test/syncReplicateTest.cpp | 2 +- source/libs/sync/test/syncRespMgrTest.cpp | 6 +- source/libs/sync/test/syncTestTool.cpp | 4 +- 11 files changed, 133 insertions(+), 19 deletions(-) create mode 100644 source/libs/sync/test/syncLocalCmdTest.cpp diff --git a/source/libs/sync/test/CMakeLists.txt b/source/libs/sync/test/CMakeLists.txt index b9cc7a391d..26dd32942b 100644 --- a/source/libs/sync/test/CMakeLists.txt +++ b/source/libs/sync/test/CMakeLists.txt @@ -59,6 +59,7 @@ add_executable(syncRestoreFromSnapshot "") add_executable(syncRaftCfgIndexTest "") add_executable(syncHeartbeatTest "") add_executable(syncHeartbeatReplyTest "") +add_executable(syncLocalCmdTest "") target_sources(syncTest @@ -305,6 +306,10 @@ target_sources(syncHeartbeatReplyTest PRIVATE "syncHeartbeatReplyTest.cpp" ) +target_sources(syncLocalCmdTest + PRIVATE + "syncLocalCmdTest.cpp" +) target_include_directories(syncTest @@ -612,6 +617,11 @@ target_include_directories(syncHeartbeatReplyTest "${TD_SOURCE_DIR}/include/libs/sync" "${CMAKE_CURRENT_SOURCE_DIR}/../inc" ) +target_include_directories(syncLocalCmdTest + PUBLIC + "${TD_SOURCE_DIR}/include/libs/sync" + "${CMAKE_CURRENT_SOURCE_DIR}/../inc" +) target_link_libraries(syncTest @@ -858,6 +868,10 @@ target_link_libraries(syncHeartbeatReplyTest sync gtest_main ) +target_link_libraries(syncLocalCmdTest + sync + gtest_main +) enable_testing() diff --git a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp index 95677e592b..8f16be27e7 100644 --- a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp +++ b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp @@ -270,7 +270,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = 9999; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } diff --git a/source/libs/sync/test/syncConfigChangeTest.cpp b/source/libs/sync/test/syncConfigChangeTest.cpp index c04ab9b000..d1244546c9 100644 --- a/source/libs/sync/test/syncConfigChangeTest.cpp +++ b/source/libs/sync/test/syncConfigChangeTest.cpp @@ -191,7 +191,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = 9999; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } diff --git a/source/libs/sync/test/syncEncodeTest.cpp b/source/libs/sync/test/syncEncodeTest.cpp index 8b209c4c9e..9f1a81e7ed 100644 --- a/source/libs/sync/test/syncEncodeTest.cpp +++ b/source/libs/sync/test/syncEncodeTest.cpp @@ -186,7 +186,7 @@ int main(int argc, char **argv) { int32_t code = pSyncNode->pLogStore->syncLogGetEntry(pSyncNode->pLogStore, pEntry->index, &pEntry); ASSERT(code == 0); - syncEntryLog2((char *)"==pEntry2==", pEntry2); + syncEntryLog2((char *)"==pEntry==", pEntry); // step5 uint32_t len; diff --git a/source/libs/sync/test/syncIndexTest.cpp b/source/libs/sync/test/syncIndexTest.cpp index 93cd5f79f0..763117c0c9 100644 --- a/source/libs/sync/test/syncIndexTest.cpp +++ b/source/libs/sync/test/syncIndexTest.cpp @@ -13,7 +13,7 @@ void print(SHashObj *pNextIndex) { SRaftId *pRaftId = (SRaftId *)key; - printf("key:<" PRIu64 ", %d>, value:%" PRIu64 " \n", pRaftId->addr, pRaftId->vgId, *p); + printf("key:<%" PRIu64 ", %d>, value:%" PRIu64 " \n", pRaftId->addr, pRaftId->vgId, *p); p = (uint64_t *)taosHashIterate(pNextIndex, p); } } diff --git a/source/libs/sync/test/syncLocalCmdTest.cpp b/source/libs/sync/test/syncLocalCmdTest.cpp new file mode 100644 index 0000000000..256c13e267 --- /dev/null +++ b/source/libs/sync/test/syncLocalCmdTest.cpp @@ -0,0 +1,100 @@ +#include +#include +#include "syncIO.h" +#include "syncInt.h" +#include "syncMessage.h" +#include "syncUtil.h" + +void logTest() { + sTrace("--- sync log test: trace"); + sDebug("--- sync log test: debug"); + sInfo("--- sync log test: info"); + sWarn("--- sync log test: warn"); + sError("--- sync log test: error"); + sFatal("--- sync log test: fatal"); +} + +SyncAppendEntries *createMsg() { + SyncAppendEntries *pMsg = syncAppendEntriesBuild(20, 1000); + pMsg->srcId.addr = syncUtilAddr2U64("127.0.0.1", 1234); + pMsg->srcId.vgId = 100; + pMsg->destId.addr = syncUtilAddr2U64("127.0.0.1", 5678); + pMsg->destId.vgId = 100; + pMsg->prevLogIndex = 11; + pMsg->prevLogTerm = 22; + pMsg->commitIndex = 33; + pMsg->privateTerm = 44; + strcpy(pMsg->data, "hello world"); + return pMsg; +} + +void test1() { + SyncAppendEntries *pMsg = createMsg(); + syncAppendEntriesLog2((char *)"test1:", pMsg); + syncAppendEntriesDestroy(pMsg); +} + +void test2() { + SyncAppendEntries *pMsg = createMsg(); + uint32_t len = pMsg->bytes; + char *serialized = (char *)taosMemoryMalloc(len); + syncAppendEntriesSerialize(pMsg, serialized, len); + SyncAppendEntries *pMsg2 = syncAppendEntriesBuild(pMsg->dataLen, 1000); + syncAppendEntriesDeserialize(serialized, len, pMsg2); + syncAppendEntriesLog2((char *)"test2: syncAppendEntriesSerialize -> syncAppendEntriesDeserialize ", pMsg2); + + taosMemoryFree(serialized); + syncAppendEntriesDestroy(pMsg); + syncAppendEntriesDestroy(pMsg2); +} + +void test3() { + SyncAppendEntries *pMsg = createMsg(); + uint32_t len; + char *serialized = syncAppendEntriesSerialize2(pMsg, &len); + SyncAppendEntries *pMsg2 = syncAppendEntriesDeserialize2(serialized, len); + syncAppendEntriesLog2((char *)"test3: syncAppendEntriesSerialize3 -> syncAppendEntriesDeserialize2 ", pMsg2); + + taosMemoryFree(serialized); + syncAppendEntriesDestroy(pMsg); + syncAppendEntriesDestroy(pMsg2); +} + +void test4() { + SyncAppendEntries *pMsg = createMsg(); + SRpcMsg rpcMsg; + syncAppendEntries2RpcMsg(pMsg, &rpcMsg); + SyncAppendEntries *pMsg2 = (SyncAppendEntries *)taosMemoryMalloc(rpcMsg.contLen); + syncAppendEntriesFromRpcMsg(&rpcMsg, pMsg2); + syncAppendEntriesLog2((char *)"test4: syncAppendEntries2RpcMsg -> syncAppendEntriesFromRpcMsg ", pMsg2); + + rpcFreeCont(rpcMsg.pCont); + syncAppendEntriesDestroy(pMsg); + syncAppendEntriesDestroy(pMsg2); +} + +void test5() { + SyncAppendEntries *pMsg = createMsg(); + SRpcMsg rpcMsg; + syncAppendEntries2RpcMsg(pMsg, &rpcMsg); + SyncAppendEntries *pMsg2 = syncAppendEntriesFromRpcMsg2(&rpcMsg); + syncAppendEntriesLog2((char *)"test5: syncAppendEntries2RpcMsg -> syncAppendEntriesFromRpcMsg2 ", pMsg2); + + rpcFreeCont(rpcMsg.pCont); + syncAppendEntriesDestroy(pMsg); + syncAppendEntriesDestroy(pMsg2); +} + +int main() { + tsAsyncLog = 0; + sDebugFlag = DEBUG_TRACE + DEBUG_SCREEN + DEBUG_FILE; + logTest(); + + test1(); + test2(); + test3(); + test4(); + test5(); + + return 0; +} diff --git a/source/libs/sync/test/syncRaftIdCheck.cpp b/source/libs/sync/test/syncRaftIdCheck.cpp index 65da0f6631..e7ef69da20 100644 --- a/source/libs/sync/test/syncRaftIdCheck.cpp +++ b/source/libs/sync/test/syncRaftIdCheck.cpp @@ -15,7 +15,7 @@ int main(int argc, char** argv) { char host[128]; uint16_t port; syncUtilU642Addr(u64, host, sizeof(host), &port); - printf("" PRIu64 " -> %s:%d \n", u64, host, port); + printf("%" PRIu64 " -> %s:%d \n", u64, host, port); } else if (argc == 3) { uint64_t u64; diff --git a/source/libs/sync/test/syncRaftLogTest3.cpp b/source/libs/sync/test/syncRaftLogTest3.cpp index fd4cade31c..1171ef8785 100644 --- a/source/libs/sync/test/syncRaftLogTest3.cpp +++ b/source/libs/sync/test/syncRaftLogTest3.cpp @@ -97,8 +97,8 @@ void test1() { sTrace("lastIndex: %" PRId64, lastIndex); sTrace("lastTerm: %" PRIu64, lastTerm); sTrace("syncStartIndex: %" PRId64, syncStartIndex); - sTrace("" PRId64 "'s preIndex: %" PRId64, testIndex, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, testIndex, preTerm); + sTrace("testIndex: %" PRId64 " preIndex: %" PRId64, testIndex, preIndex); + sTrace("testIndex: %" PRId64 " preTerm: %" PRIu64, testIndex, preTerm); if (gAssert) { assert(lastIndex == -1); @@ -170,8 +170,8 @@ void test2() { SyncIndex preIndex = syncNodeGetPreIndex(pSyncNode, i); SyncTerm preTerm = syncNodeGetPreTerm(pSyncNode, i); - sTrace("" PRId64 "'s preIndex: %" PRId64, i, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, i, preTerm); + sTrace("i: %" PRId64 " preIndex: %" PRId64, i, preIndex); + sTrace("i: %" PRId64 " preTerm: %" PRIu64, i, preTerm); if (gAssert) { SyncIndex preIndexArr[12] = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; @@ -292,8 +292,8 @@ void test4() { SyncIndex preIndex = syncNodeGetPreIndex(pSyncNode, i); SyncTerm preTerm = syncNodeGetPreTerm(pSyncNode, i); - sTrace("" PRId64 "'s preIndex: %" PRId64, i, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, i, preTerm); + sTrace("i: %" PRId64 " preIndex: %" PRId64, i, preIndex); + sTrace("i: %" PRId64 " preTerm: %" PRIu64, i, preTerm); } logStoreDestory(pLogStore); @@ -354,8 +354,8 @@ void test5() { SyncIndex preIndex = syncNodeGetPreIndex(pSyncNode, i); SyncTerm preTerm = syncNodeGetPreTerm(pSyncNode, i); - sTrace("" PRId64 "'s preIndex: %" PRId64, i, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, i, preTerm); + sTrace("i: %" PRId64 " preIndex: %" PRId64, i, preIndex); + sTrace("i: %" PRId64 " preTerm: %" PRIu64, i, preTerm); if (gAssert) { SyncIndex preIndexArr[12] = {9999, 9999, 9999, 9999, 9999, 9999, 5, 6, 7, 8, 9, 10}; diff --git a/source/libs/sync/test/syncReplicateTest.cpp b/source/libs/sync/test/syncReplicateTest.cpp index d3ba4bc136..adb3deb22d 100644 --- a/source/libs/sync/test/syncReplicateTest.cpp +++ b/source/libs/sync/test/syncReplicateTest.cpp @@ -145,7 +145,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = 9999; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } diff --git a/source/libs/sync/test/syncRespMgrTest.cpp b/source/libs/sync/test/syncRespMgrTest.cpp index 35daff796f..cad6eec91d 100644 --- a/source/libs/sync/test/syncRespMgrTest.cpp +++ b/source/libs/sync/test/syncRespMgrTest.cpp @@ -58,18 +58,18 @@ void syncRespMgrGetTest(uint64_t i) { if (ret == 1) { printStub(&stub); } else if (ret == 0) { - printf("" PRId64 " notFound \n", i); + printf("%" PRId64 " notFound \n", i); } } void syncRespMgrGetAndDelTest(uint64_t i) { - printf("------syncRespMgrGetAndDelTest-------" PRIu64 "-- \n", i); + printf("------syncRespMgrGetAndDelTest-------%" PRIu64 "-- \n", i); SRespStub stub; int32_t ret = syncRespMgrGetAndDel(pMgr, i, &stub); if (ret == 1) { printStub(&stub); } else if (ret == 0) { - printf("" PRId64 " notFound \n", i); + printf("%" PRId64 " notFound \n", i); } } diff --git a/source/libs/sync/test/syncTestTool.cpp b/source/libs/sync/test/syncTestTool.cpp index 1cdecfe5b3..bdb4d7d2d8 100644 --- a/source/libs/sync/test/syncTestTool.cpp +++ b/source/libs/sync/test/syncTestTool.cpp @@ -154,7 +154,7 @@ int32_t SnapshotDoWrite(struct SSyncFSM* pFsm, void* pWriter, void* pBuf, int32_ void RestoreFinishCb(struct SSyncFSM* pFsm) { sTrace("==callback== ==RestoreFinishCb== pFsm:%p", pFsm); } void ReConfigCb(struct SSyncFSM* pFsm, const SRpcMsg* pMsg, SReConfigCbMeta* cbMeta) { - char* s = syncCfg2Str(&(cbMeta.newCfg)); + char* s = syncCfg2Str(&(cbMeta->newCfg)); sTrace("==callback== ==ReConfigCb== flag:0x%lX, index:%" PRId64 ", code:%d, currentTerm:%" PRIu64 ", term:%" PRIu64 ", newCfg:%s", cbMeta->flag, cbMeta->index, cbMeta->code, cbMeta->currentTerm, cbMeta->term, s); @@ -308,7 +308,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = TDMT_VND_SUBMIT; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } From d7c866ee123a49b221cae2c5efd07fc8357a1191 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Thu, 27 Oct 2022 17:59:16 +0800 Subject: [PATCH 05/81] enh(sync): add test --- include/libs/sync/syncTools.h | 4 +- source/libs/sync/src/syncMessage.c | 4 +- source/libs/sync/test/syncLocalCmdTest.cpp | 72 +++++++++++----------- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/include/libs/sync/syncTools.h b/include/libs/sync/syncTools.h index 1c219f98bd..eedc403493 100644 --- a/include/libs/sync/syncTools.h +++ b/include/libs/sync/syncTools.h @@ -680,7 +680,7 @@ void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg); // --------------------------------------------- typedef enum { - SYNC_STEP_DOWN = 0, + SYNC_LOCAL_CMD_STEP_DOWN = 100, } ESyncLocalCmd; typedef struct SyncLocalCmd { @@ -695,7 +695,7 @@ typedef struct SyncLocalCmd { } SyncLocalCmd; -SyncLocalCmd* syncLocalCmdBuild(uint32_t dataLen, int32_t vgId); +SyncLocalCmd* syncLocalCmdBuild(int32_t vgId); void syncLocalCmdDestroy(SyncLocalCmd* pMsg); void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen); void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg); diff --git a/source/libs/sync/src/syncMessage.c b/source/libs/sync/src/syncMessage.c index b62c564fcd..3c36633fe8 100644 --- a/source/libs/sync/src/syncMessage.c +++ b/source/libs/sync/src/syncMessage.c @@ -3097,7 +3097,7 @@ void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg) { } // --------------------------------------------- -SyncLocalCmd* syncLocalCmdBuild(uint32_t dataLen, int32_t vgId) { +SyncLocalCmd* syncLocalCmdBuild(int32_t vgId) { uint32_t bytes = sizeof(SyncLocalCmd); SyncLocalCmd* pMsg = taosMemoryMalloc(bytes); memset(pMsg, 0, bytes); @@ -3206,7 +3206,7 @@ cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg) { } cJSON* pJson = cJSON_CreateObject(); - cJSON_AddItemToObject(pJson, "SyncSnapshotRsp", pRoot); + cJSON_AddItemToObject(pJson, "SyncLocalCmd2Json", pRoot); return pJson; } diff --git a/source/libs/sync/test/syncLocalCmdTest.cpp b/source/libs/sync/test/syncLocalCmdTest.cpp index 256c13e267..de908bf9c1 100644 --- a/source/libs/sync/test/syncLocalCmdTest.cpp +++ b/source/libs/sync/test/syncLocalCmdTest.cpp @@ -14,78 +14,78 @@ void logTest() { sFatal("--- sync log test: fatal"); } -SyncAppendEntries *createMsg() { - SyncAppendEntries *pMsg = syncAppendEntriesBuild(20, 1000); +SyncLocalCmd *createMsg() { + SyncLocalCmd *pMsg = syncLocalCmdBuild(1000); pMsg->srcId.addr = syncUtilAddr2U64("127.0.0.1", 1234); pMsg->srcId.vgId = 100; pMsg->destId.addr = syncUtilAddr2U64("127.0.0.1", 5678); pMsg->destId.vgId = 100; - pMsg->prevLogIndex = 11; - pMsg->prevLogTerm = 22; - pMsg->commitIndex = 33; - pMsg->privateTerm = 44; - strcpy(pMsg->data, "hello world"); + pMsg->sdNewTerm = 123; + pMsg->cmd = SYNC_LOCAL_CMD_STEP_DOWN; + return pMsg; } void test1() { - SyncAppendEntries *pMsg = createMsg(); - syncAppendEntriesLog2((char *)"test1:", pMsg); - syncAppendEntriesDestroy(pMsg); + SyncLocalCmd *pMsg = createMsg(); + syncLocalCmdLog2((char *)"test1:", pMsg); + syncLocalCmdDestroy(pMsg); } void test2() { - SyncAppendEntries *pMsg = createMsg(); + SyncLocalCmd *pMsg = createMsg(); uint32_t len = pMsg->bytes; char *serialized = (char *)taosMemoryMalloc(len); - syncAppendEntriesSerialize(pMsg, serialized, len); - SyncAppendEntries *pMsg2 = syncAppendEntriesBuild(pMsg->dataLen, 1000); - syncAppendEntriesDeserialize(serialized, len, pMsg2); - syncAppendEntriesLog2((char *)"test2: syncAppendEntriesSerialize -> syncAppendEntriesDeserialize ", pMsg2); + syncLocalCmdSerialize(pMsg, serialized, len); + SyncLocalCmd *pMsg2 = syncLocalCmdBuild(1000); + syncLocalCmdDeserialize(serialized, len, pMsg2); + syncLocalCmdLog2((char *)"test2: syncLocalCmdSerialize -> syncLocalCmdDeserialize ", pMsg2); taosMemoryFree(serialized); - syncAppendEntriesDestroy(pMsg); - syncAppendEntriesDestroy(pMsg2); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); } void test3() { - SyncAppendEntries *pMsg = createMsg(); + SyncLocalCmd *pMsg = createMsg(); uint32_t len; - char *serialized = syncAppendEntriesSerialize2(pMsg, &len); - SyncAppendEntries *pMsg2 = syncAppendEntriesDeserialize2(serialized, len); - syncAppendEntriesLog2((char *)"test3: syncAppendEntriesSerialize3 -> syncAppendEntriesDeserialize2 ", pMsg2); + char *serialized = syncLocalCmdSerialize2(pMsg, &len); + SyncLocalCmd *pMsg2 = syncLocalCmdDeserialize2(serialized, len); + syncLocalCmdLog2((char *)"test3: syncLocalCmdSerialize3 -> syncLocalCmdDeserialize2 ", pMsg2); taosMemoryFree(serialized); - syncAppendEntriesDestroy(pMsg); - syncAppendEntriesDestroy(pMsg2); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); } void test4() { - SyncAppendEntries *pMsg = createMsg(); + SyncLocalCmd *pMsg = createMsg(); SRpcMsg rpcMsg; - syncAppendEntries2RpcMsg(pMsg, &rpcMsg); - SyncAppendEntries *pMsg2 = (SyncAppendEntries *)taosMemoryMalloc(rpcMsg.contLen); - syncAppendEntriesFromRpcMsg(&rpcMsg, pMsg2); - syncAppendEntriesLog2((char *)"test4: syncAppendEntries2RpcMsg -> syncAppendEntriesFromRpcMsg ", pMsg2); + syncLocalCmd2RpcMsg(pMsg, &rpcMsg); + SyncLocalCmd *pMsg2 = (SyncLocalCmd *)taosMemoryMalloc(rpcMsg.contLen); + syncLocalCmdFromRpcMsg(&rpcMsg, pMsg2); + syncLocalCmdLog2((char *)"test4: syncLocalCmd2RpcMsg -> syncLocalCmdFromRpcMsg ", pMsg2); rpcFreeCont(rpcMsg.pCont); - syncAppendEntriesDestroy(pMsg); - syncAppendEntriesDestroy(pMsg2); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); } void test5() { - SyncAppendEntries *pMsg = createMsg(); + SyncLocalCmd *pMsg = createMsg(); SRpcMsg rpcMsg; - syncAppendEntries2RpcMsg(pMsg, &rpcMsg); - SyncAppendEntries *pMsg2 = syncAppendEntriesFromRpcMsg2(&rpcMsg); - syncAppendEntriesLog2((char *)"test5: syncAppendEntries2RpcMsg -> syncAppendEntriesFromRpcMsg2 ", pMsg2); + syncLocalCmd2RpcMsg(pMsg, &rpcMsg); + SyncLocalCmd *pMsg2 = syncLocalCmdFromRpcMsg2(&rpcMsg); + syncLocalCmdLog2((char *)"test5: syncLocalCmd2RpcMsg -> syncLocalCmdFromRpcMsg2 ", pMsg2); rpcFreeCont(rpcMsg.pCont); - syncAppendEntriesDestroy(pMsg); - syncAppendEntriesDestroy(pMsg2); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); } int main() { + gRaftDetailLog = true; + tsAsyncLog = 0; sDebugFlag = DEBUG_TRACE + DEBUG_SCREEN + DEBUG_FILE; logTest(); From 438786501b20560eaf8b0a4fe1428a943a7a5e38 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Fri, 28 Oct 2022 15:31:34 +0800 Subject: [PATCH 06/81] refactor(sync): adjust elect timer ms --- source/libs/sync/inc/syncEnv.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/libs/sync/inc/syncEnv.h b/source/libs/sync/inc/syncEnv.h index 2a37e000e2..06da0eb3df 100644 --- a/source/libs/sync/inc/syncEnv.h +++ b/source/libs/sync/inc/syncEnv.h @@ -28,13 +28,13 @@ extern "C" { #include "trpc.h" #include "ttimer.h" -#define TIMER_MAX_MS 0x7FFFFFFF -#define ENV_TICK_TIMER_MS 1000 -#define PING_TIMER_MS 5000 -#define ELECT_TIMER_MS_MIN 5000 -#define ELECT_TIMER_MS_MAX (ELECT_TIMER_MS_MIN * 2) +#define TIMER_MAX_MS 0x7FFFFFFF +#define ENV_TICK_TIMER_MS 1000 +#define PING_TIMER_MS 5000 +#define ELECT_TIMER_MS_MIN 2500 +#define ELECT_TIMER_MS_MAX (ELECT_TIMER_MS_MIN * 2) #define ELECT_TIMER_MS_RANGE (ELECT_TIMER_MS_MAX - ELECT_TIMER_MS_MIN) -#define HEARTBEAT_TIMER_MS 900 +#define HEARTBEAT_TIMER_MS 1000 #define EMPTY_RAFT_ID ((SRaftId){.addr = 0, .vgId = 0}) From a7c2e0e6883f6bf9f80c33d1e078c501432bf102 Mon Sep 17 00:00:00 2001 From: huolibo Date: Fri, 28 Oct 2022 15:31:25 +0800 Subject: [PATCH 07/81] docs: what's updated on new version (2.0.41, 3.0.2) --- docs/en/14-reference/03-connector/04-java.mdx | 8 + docs/zh/08-connector/14-java.mdx | 238 ++++++++++-------- 2 files changed, 136 insertions(+), 110 deletions(-) diff --git a/docs/en/14-reference/03-connector/04-java.mdx b/docs/en/14-reference/03-connector/04-java.mdx index ecf632c624..abae520b43 100644 --- a/docs/en/14-reference/03-connector/04-java.mdx +++ b/docs/en/14-reference/03-connector/04-java.mdx @@ -878,7 +878,9 @@ The source code of the sample application is under `TDengine/examples/JDBC`: | taos-jdbcdriver version | major changes | | :---------------------: | :--------------------------------------------: | +| 3.0.1 - 3.0.2 | fix the resultSet data is parsed incorrectly sometimes. 3.0.1 is compiled on JDK 11, you are advised to use 3.0.2 in the JDK 8 environment | | 3.0.0 | Support for TDengine 3.0 | +| 2.0.41 | fix decode method of username and password in REST connection | | 2.0.39 - 2.0.40 | Add REST connection/request timeout parameters | | 2.0.38 | JDBC REST connections add bulk pull function | | 2.0.37 | Support json tags | @@ -910,6 +912,12 @@ The source code of the sample application is under `TDengine/examples/JDBC`: **Solution**: Use taos-jdbcdriver 2.* with your TDengine 2.* deployment. +5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar + +**Cause**:taos-jdbcdriver 3.0.1 is compiled on JDK 11. + +**Solution**: Use taos-jdbcdriver 3.0.2. + For additional troubleshooting, see [FAQ](../../../train-faq/faq). ## API Reference diff --git a/docs/zh/08-connector/14-java.mdx b/docs/zh/08-connector/14-java.mdx index d13e21ad54..74ab629101 100644 --- a/docs/zh/08-connector/14-java.mdx +++ b/docs/zh/08-connector/14-java.mdx @@ -68,38 +68,39 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对 ### 安装连接器 - + -目前 taos-jdbcdriver 已经发布到 [Sonatype Repository](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) 仓库,且各大仓库都已同步。 + 目前 taos-jdbcdriver 已经发布到 [Sonatype Repository](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) + 仓库,且各大仓库都已同步。 -- [sonatype](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) -- [mvnrepository](https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver) -- [maven.aliyun](https://maven.aliyun.com/mvn/search) + - [sonatype](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) + - [mvnrepository](https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver) + - [maven.aliyun](https://maven.aliyun.com/mvn/search) -Maven 项目中,在 pom.xml 中添加以下依赖: + Maven 项目中,在 pom.xml 中添加以下依赖: -```xml-dtd - - com.taosdata.jdbc - taos-jdbcdriver - 3.0.0 - -``` + ```xml-dtd + + com.taosdata.jdbc + taos-jdbcdriver + 3.0.0 + + ``` - - + + -可以通过下载 TDengine 的源码,自己编译最新版本的 Java connector + 可以通过下载 TDengine 的源码,自己编译最新版本的 Java connector -```shell -git clone https://github.com/taosdata/taos-connector-jdbc.git -cd taos-connector-jdbc -mvn clean install -Dmaven.test.skip=true -``` + ```shell + git clone https://github.com/taosdata/taos-connector-jdbc.git + cd taos-connector-jdbc + mvn clean install -Dmaven.test.skip=true + ``` -编译后,在 target 目录下会产生 taos-jdbcdriver-3.0.*-dist.jar 的 jar 包,并自动将编译的 jar 文件放在本地的 Maven 仓库中。 + 编译后,在 target 目录下会产生 taos-jdbcdriver-3.0.*-dist.jar 的 jar 包,并自动将编译的 jar 文件放在本地的 Maven 仓库中。 - + ## 建立连接 @@ -110,116 +111,125 @@ TDengine 的 JDBC URL 规范格式为: 对于建立连接,原生连接与 REST 连接有细微不同。 - + -```java -Class.forName("com.taosdata.jdbc.TSDBDriver"); -String jdbcUrl = "jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata"; -Connection conn = DriverManager.getConnection(jdbcUrl); -``` + ```java + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = "jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata"; + Connection conn = DriverManager.getConnection(jdbcUrl); + ``` -以上示例,使用了 JDBC 原生连接的 TSDBDriver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。 + 以上示例,使用了 JDBC 原生连接的 TSDBDriver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 test 的连接。这个 URL + 中指定用户名(user)为 root,密码(password)为 taosdata。 -**注意**:使用 JDBC 原生连接,taos-jdbcdriver 需要依赖客户端驱动(Linux 下是 libtaos.so;Windows 下是 taos.dll;macOS 下是 libtaos.dylib)。 + **注意**:使用 JDBC 原生连接,taos-jdbcdriver 需要依赖客户端驱动(Linux 下是 libtaos.so;Windows 下是 taos.dll;macOS 下是 libtaos.dylib)。 -url 中的配置参数如下: + url 中的配置参数如下: -- user:登录 TDengine 用户名,默认值 'root'。 -- password:用户登录密码,默认值 'taosdata'。 -- cfgdir:客户端配置文件目录路径,Linux OS 上默认值 `/etc/taos`,Windows OS 上默认值 `C:/TDengine/cfg`。 -- charset:客户端使用的字符集,默认值为系统字符集。 -- locale:客户端语言环境,默认值系统当前 locale。 -- timezone:客户端使用的时区,默认值为系统当前时区。 -- batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:true。开启批量拉取同时获取一批数据在查询数据量较大时批量拉取可以有效的提升查询性能。 -- batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败将继续执行下面的 SQL。false:不再执行失败 SQL 后的任何语句。默认值为:false。 + - user:登录 TDengine 用户名,默认值 'root'。 + - password:用户登录密码,默认值 'taosdata'。 + - cfgdir:客户端配置文件目录路径,Linux OS 上默认值 `/etc/taos`,Windows OS 上默认值 `C:/TDengine/cfg`。 + - charset:客户端使用的字符集,默认值为系统字符集。 + - locale:客户端语言环境,默认值系统当前 locale。 + - timezone:客户端使用的时区,默认值为系统当前时区。 + - batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:true。开启批量拉取同时获取一批数据在查询数据量较大时批量拉取可以有效的提升查询性能。 + - batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败将继续执行下面的 SQL。false:不再执行失败 SQL + 后的任何语句。默认值为:false。 -JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。 + JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。 -**使用 TDengine 客户端驱动配置文件建立连接 ** + **使用 TDengine 客户端驱动配置文件建立连接 ** -当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。如下所示: + 当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。如下所示: -1. 在 Java 应用中不指定 hostname 和 port + 1. 在 Java 应用中不指定 hostname 和 port -```java -public Connection getConn() throws Exception{ - Class.forName("com.taosdata.jdbc.TSDBDriver"); - String jdbcUrl = "jdbc:TAOS://:/test?user=root&password=taosdata"; - Properties connProps = new Properties(); - connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); - connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8"); - connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8"); - Connection conn = DriverManager.getConnection(jdbcUrl, connProps); - return conn; -} -``` + ```java + public Connection getConn() throws Exception{ + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = "jdbc:TAOS://:/test?user=root&password=taosdata"; + Properties connProps = new Properties(); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8"); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8"); + Connection conn = DriverManager.getConnection(jdbcUrl, connProps); + return conn; + } + ``` -2. 在配置文件中指定 firstEp 和 secondEp + 2. 在配置文件中指定 firstEp 和 secondEp -```shell -# first fully qualified domain name (FQDN) for TDengine system -firstEp cluster_node1:6030 + ```shell + # first fully qualified domain name (FQDN) for TDengine system + firstEp cluster_node1:6030 -# second fully qualified domain name (FQDN) for TDengine system, for cluster only -secondEp cluster_node2:6030 + # second fully qualified domain name (FQDN) for TDengine system, for cluster only + secondEp cluster_node2:6030 -# default system charset -# charset UTF-8 + # default system charset + # charset UTF-8 -# system locale -# locale en_US.UTF-8 -``` + # system locale + # locale en_US.UTF-8 + ``` -以上示例,jdbc 会使用客户端的配置文件,建立到 hostname 为 cluster_node1、端口为 6030、数据库名为 test 的连接。当集群中 firstEp 节点失效时,JDBC 会尝试使用 secondEp 连接集群。 + 以上示例,jdbc 会使用客户端的配置文件,建立到 hostname 为 cluster_node1、端口为 6030、数据库名为 test 的连接。当集群中 firstEp 节点失效时,JDBC 会尝试使用 secondEp + 连接集群。 -TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可以正常建立到集群的连接。 + TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可以正常建立到集群的连接。 -> **注意**:这里的配置文件指的是调用 JDBC Connector 的应用程序所在机器上的配置文件,Linux OS 上默认值 /etc/taos/taos.cfg ,Windows OS 上默认值 C://TDengine/cfg/taos.cfg。 + > **注意**:这里的配置文件指的是调用 JDBC Connector 的应用程序所在机器上的配置文件,Linux OS 上默认值 /etc/taos/taos.cfg ,Windows OS 上默认值 + C://TDengine/cfg/taos.cfg。 - - + + -```java -Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); -String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata"; -Connection conn = DriverManager.getConnection(jdbcUrl); -``` + ```java + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata"; + Connection conn = DriverManager.getConnection(jdbcUrl); + ``` -以上示例,使用了 JDBC REST 连接的 RestfulDriver,建立了到 hostname 为 taosdemo.com,端口为 6041,数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。 + 以上示例,使用了 JDBC REST 连接的 RestfulDriver,建立了到 hostname 为 taosdemo.com,端口为 6041,数据库名为 test 的连接。这个 URL 中指定用户名(user)为 + root,密码(password)为 taosdata。 -使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要: + 使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要: -1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”; -2. jdbcUrl 以“jdbc:TAOS-RS://”开头; -3. 使用 6041 作为连接端口。 + 1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”; + 2. jdbcUrl 以“jdbc:TAOS-RS://”开头; + 3. 使用 6041 作为连接端口。 -url 中的配置参数如下: + url 中的配置参数如下: -- user:登录 TDengine 用户名,默认值 'root'。 -- password:用户登录密码,默认值 'taosdata'。 -- batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:false。逐行拉取结果集使用 HTTP 方式进行数据传输。JDBC REST 连接支持批量拉取数据功能。taos-jdbcdriver 与 TDengine 之间通过 WebSocket 连接进行数据传输。相较于 HTTP,WebSocket 可以使 JDBC REST 连接支持大数据量查询,并提升查询性能。 -- charset: 当开启批量拉取数据时,指定解析字符串数据的字符集。 -- batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false:不再执行失败 SQL 后的任何语句。默认值为:false。 -- httpConnectTimeout: 连接超时时间,单位 ms, 默认值为 5000。 -- httpSocketTimeout: socket 超时时间,单位 ms,默认值为 5000。仅在 batchfetch 设置为 false 时生效。 -- messageWaitTimeout: 消息超时时间, 单位 ms, 默认值为 3000。 仅在 batchfetch 设置为 true 时生效。 -- useSSL: 连接中是否使用 SSL。 + - user:登录 TDengine 用户名,默认值 'root'。 + - password:用户登录密码,默认值 'taosdata'。 + - batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:false。逐行拉取结果集使用 HTTP 方式进行数据传输。JDBC REST + 连接支持批量拉取数据功能。taos-jdbcdriver 与 TDengine 之间通过 WebSocket 连接进行数据传输。相较于 HTTP,WebSocket 可以使 JDBC REST 连接支持大数据量查询,并提升查询性能。 + - charset: 当开启批量拉取数据时,指定解析字符串数据的字符集。 + - batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false:不再执行失败 SQL + 后的任何语句。默认值为:false。 + - httpConnectTimeout: 连接超时时间,单位 ms, 默认值为 5000。 + - httpSocketTimeout: socket 超时时间,单位 ms,默认值为 5000。仅在 batchfetch 设置为 false 时生效。 + - messageWaitTimeout: 消息超时时间, 单位 ms, 默认值为 3000。 仅在 batchfetch 设置为 true 时生效。 + - useSSL: 连接中是否使用 SSL。 -**注意**:部分配置项(比如:locale、timezone)在 REST 连接中不生效。 + **注意**:部分配置项(比如:locale、timezone)在 REST 连接中不生效。 -:::note + :::note -- 与原生连接方式不同,REST 接口是无状态的。在使用 JDBC REST 连接时,需要在 SQL 中指定表、超级表的数据库名称。例如: + - 与原生连接方式不同,REST 接口是无状态的。在使用 JDBC REST 连接时,需要在 SQL 中指定表、超级表的数据库名称。例如: -```sql -INSERT INTO test.t1 USING test.weather (ts, temperature) TAGS('California.SanFrancisco') VALUES(now, 24.6); -``` + ```sql + INSERT INTO test.t1 USING test.weather (ts, temperature) TAGS('California.SanFrancisco') VALUES(now, 24.6); + ``` -- 如果在 url 中指定了 dbname,那么,JDBC REST 连接会默认使用/rest/sql/dbname 作为 restful 请求的 url,在 SQL 中不需要指定 dbname。例如:url 为 jdbc:TAOS-RS://127.0.0.1:6041/test,那么,可以执行 sql:insert into t1 using weather(ts, temperature) tags('California.SanFrancisco') values(now, 24.6); + - 如果在 url 中指定了 dbname,那么,JDBC REST 连接会默认使用/rest/sql/dbname 作为 restful 请求的 url,在 SQL 中不需要指定 dbname。例如:url 为 + jdbc:TAOS-RS://127.0.0.1:6041/test,那么,可以执行 sql:insert into t1 using weather(ts, temperature) + tags('California.SanFrancisco') values(now, 24.6); -::: + ::: - + ### 指定 URL 和 Properties 获取连接 @@ -271,7 +281,7 @@ properties 中的配置参数如下: - TSDBDriver.HTTP_SOCKET_TIMEOUT: socket 超时时间,单位 ms,默认值为 5000。仅在 REST 连接且 batchfetch 设置为 false 时生效。 - TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms, 默认值为 3000。 仅在 REST 连接且 batchfetch 设置为 true 时生效。 - TSDBDriver.PROPERTY_KEY_USE_SSL: 连接中是否使用 SSL。仅在 REST 连接时生效。 - 此外对 JDBC 原生连接,通过指定 URL 和 Properties 还可以指定其他参数,比如日志级别、SQL 长度等。更多详细配置请参考[客户端配置](/reference/config/#仅客户端适用)。 +此外对 JDBC 原生连接,通过指定 URL 和 Properties 还可以指定其他参数,比如日志级别、SQL 长度等。更多详细配置请参考[客户端配置](/reference/config/#仅客户端适用)。 ### 配置参数的优先级 @@ -880,7 +890,9 @@ public static void main(String[] args) throws Exception { | taos-jdbcdriver 版本 | 主要变化 | | :------------------: | :----------------------------: | +| 3.0.1 - 3.0.2 | 修复一些情况下结果集数据解析错误的问题。3.0.1 在 JDK 11 环境编译,JDK 8 环境下建议使用 3.0.2 版本 | | 3.0.0 | 支持 TDengine 3.0 | +| 2.0.41 | 修正 REST 连接中用户名和密码转码方式 | | 2.0.39 - 2.0.40 | 增加 REST 连接/请求 超时设置 | | 2.0.38 | JDBC REST 连接增加批量拉取功能 | | 2.0.37 | 增加对 json tag 支持 | @@ -890,27 +902,33 @@ public static void main(String[] args) throws Exception { 1. 使用 Statement 的 `addBatch()` 和 `executeBatch()` 来执行“批量写入/更新”,为什么没有带来性能上的提升? - **原因**:TDengine 的 JDBC 实现中,通过 `addBatch` 方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。 +**原因**:TDengine 的 JDBC 实现中,通过 `addBatch` 方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。 - **解决方法**:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入方式 +**解决方法**:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入方式 2. java.lang.UnsatisfiedLinkError: no taos in java.library.path - **原因**:程序没有找到依赖的本地函数库 taos。 +**原因**:程序没有找到依赖的本地函数库 taos。 - **解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可,macOS 下需要建立软链 `ln -s /usr/local/lib/libtaos.dylib`。 +**解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可,macOS 下需要建立软链 `ln -s /usr/local/lib/libtaos.dylib`。 3. java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform - **原因**:目前 TDengine 只支持 64 位 JDK。 +**原因**:目前 TDengine 只支持 64 位 JDK。 - **解决方法**:重新安装 64 位 JDK。 +**解决方法**:重新安装 64 位 JDK。 4. java.lang.NoSuchMethodError: setByteArray - **原因**:taos-jdbcdriver 3.* 版本仅支持 TDengine 3.0 及以上版本。 +**原因**:taos-jdbcdriver 3.* 版本仅支持 TDengine 3.0 及以上版本。 - **解决方法**: 使用 taos-jdbcdriver 2.* 版本连接 TDengine 2.* 版本。 +**解决方法**: 使用 taos-jdbcdriver 2.* 版本连接 TDengine 2.* 版本。 + +5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar + +**原因**:taos-jdbcdriver 3.0.1 版本需要在 JDK 11+ 环境使用。 + +**解决方法**: 更换 taos-jdbcdriver 3.0.2 版本。 其它问题请参考 [FAQ](../../../train-faq/faq) From d625cb56b7a5936dfc0d7459239aaf33f2a30dce Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Fri, 28 Oct 2022 15:47:55 +0800 Subject: [PATCH 08/81] docs: fix few typos --- docs/en/14-reference/03-connector/04-java.mdx | 8 ++++---- docs/zh/08-connector/14-java.mdx | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/14-reference/03-connector/04-java.mdx b/docs/en/14-reference/03-connector/04-java.mdx index abae520b43..7b3440ebac 100644 --- a/docs/en/14-reference/03-connector/04-java.mdx +++ b/docs/en/14-reference/03-connector/04-java.mdx @@ -201,7 +201,7 @@ The configuration parameters in the URL are as follows: - httpConnectTimeout: REST connection timeout in milliseconds, the default value is 5000 ms. - httpSocketTimeout: socket timeout in milliseconds, the default value is 5000 ms. It only takes effect when batchfetch is false. - messageWaitTimeout: message transmission timeout in milliseconds, the default value is 3000 ms. It only takes effect when batchfetch is true. -- useSSL: connecting Securely Using SSL. true: using SSL conneciton, false: not using SSL connection. +- useSSL: connecting Securely Using SSL. true: using SSL connection, false: not using SSL connection. **Note**: Some configuration items (e.g., locale, timezone) do not work in the REST connection. @@ -268,7 +268,7 @@ The configuration parameters in properties are as follows. - TSDBDriver.HTTP_CONNECT_TIMEOUT: REST connection timeout in milliseconds, the default value is 5000 ms. It only takes effect when using JDBC REST connection. - TSDBDriver.HTTP_SOCKET_TIMEOUT: socket timeout in milliseconds, the default value is 5000 ms. It only takes effect when using JDBC REST connection and batchfetch is false. - TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: message transmission timeout in milliseconds, the default value is 3000 ms. It only takes effect when using JDBC REST connection and batchfetch is true. -- TSDBDriver.PROPERTY_KEY_USE_SSL: connecting Securely Using SSL. true: using SSL conneciton, false: not using SSL connection. It only takes effect when using JDBC REST connection. +- TSDBDriver.PROPERTY_KEY_USE_SSL: connecting Securely Using SSL. true: using SSL connection, false: not using SSL connection. It only takes effect when using JDBC REST connection. For JDBC native connections, you can specify other parameters, such as log level, SQL length, etc., by specifying URL and Properties. For more detailed configuration, please refer to [Client Configuration](/reference/config/#Client-Only). ### Priority of configuration parameters @@ -824,7 +824,7 @@ Example usage is as follows. //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` @@ -856,7 +856,7 @@ public static void main(String[] args) throws Exception { //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` diff --git a/docs/zh/08-connector/14-java.mdx b/docs/zh/08-connector/14-java.mdx index 74ab629101..1ee59d2df4 100644 --- a/docs/zh/08-connector/14-java.mdx +++ b/docs/zh/08-connector/14-java.mdx @@ -836,7 +836,7 @@ public abstract class ConsumerLoop { //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` @@ -868,7 +868,7 @@ public static void main(String[] args) throws Exception { //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` From 030195e72ac35b105545abdf4399fc6a78389405 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 28 Oct 2022 16:42:58 +0800 Subject: [PATCH 09/81] support macos --- source/libs/transport/src/transSvr.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/source/libs/transport/src/transSvr.c b/source/libs/transport/src/transSvr.c index 6819068b64..025eab3f3e 100644 --- a/source/libs/transport/src/transSvr.c +++ b/source/libs/transport/src/transSvr.c @@ -655,7 +655,7 @@ void uvOnAcceptCb(uv_stream_t* stream, int status) { uv_tcp_init(pObj->loop, cli); if (uv_accept(stream, (uv_stream_t*)cli) == 0) { -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) if (pObj->numOfWorkerReady < pObj->numOfThreads) { tError("worker-threads are not ready for all, need %d instead of %d.", pObj->numOfThreads, pObj->numOfWorkerReady); @@ -779,7 +779,7 @@ static bool addHandleToWorkloop(SWorkThrd* pThrd, char* pipeName) { return false; } -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) uv_pipe_init(pThrd->loop, pThrd->pipe, 1); #else uv_pipe_init(pThrd->loop, pThrd->pipe, 1); @@ -799,7 +799,7 @@ static bool addHandleToWorkloop(SWorkThrd* pThrd, char* pipeName) { QUEUE_INIT(&pThrd->conn); pThrd->asyncPool = transAsyncPoolCreate(pThrd->loop, 5, pThrd, uvWorkerAsyncCb); -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) uv_pipe_connect(&pThrd->connect_req, pThrd->pipe, pipeName, uvOnPipeConnectionCb); #else uv_read_start((uv_stream_t*)pThrd->pipe, uvAllocConnBufferCb, uvOnConnectionCb); @@ -976,17 +976,18 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads, uv_loop_init(srv->loop); char pipeName[PATH_MAX]; -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) int ret = uv_pipe_init(srv->loop, &srv->pipeListen, 0); if (ret != 0) { tError("failed to init pipe, errmsg: %s", uv_err_name(ret)); goto End; } - +#if defined(WINDOWS) snprintf(pipeName, sizeof(pipeName), "\\\\?\\pipe\\trans.rpc.%d-%" PRIu64, taosSafeRand(), GetCurrentProcessId()); - // char pipeName[PATH_MAX] = {0}; - // snprintf(pipeName, sizeof(pipeName), "%s%spipe.trans.rpc.%08d-%" PRIu64, tsTempDir, TD_DIRSEP, taosSafeRand(), - // taosGetSelfPthreadId()); +#elif defined(DARWIN) + snprintf(pipeName, sizeof(pipeName), "%s%spipe.trans.rpc.%08d-%" PRIu64, tsTempDir, TD_DIRSEP, taosSafeRand(), + taosGetSelfPthreadId()); +#endif ret = uv_pipe_bind(&srv->pipeListen, pipeName); if (ret != 0) { @@ -1059,8 +1060,8 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads, goto End; } } - #endif + if (false == taosValidIpAndPort(srv->ip, srv->port)) { terrno = TAOS_SYSTEM_ERROR(errno); tError("invalid ip/port, %d:%d, reason:%s", srv->ip, srv->port, terrstr()); From 6c19e886df8b44f97cdc95f13adb3f270cad3388 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 17:58:59 +0800 Subject: [PATCH 10/81] fix(query): move the init function for different reader. --- source/dnode/vnode/src/tsdb/tsdbRead.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index f83755fc4f..5e5e287cf9 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -3601,16 +3601,6 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl if (code != TSDB_CODE_SUCCESS) { return code; } - - code = doOpenReaderImpl(pNextReader); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - - code = doOpenReaderImpl(pReader); - if (code != TSDB_CODE_SUCCESS) { - return code; - } } } @@ -3741,9 +3731,14 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { if (pReader->innerReader[0] != NULL && pReader->step == 0) { bool ret = doTsdbNextDataBlock(pReader->innerReader[0]); - resetDataBlockScanInfo(pReader->innerReader[0]->status.pTableMap, pReader->innerReader[0]->window.ekey); - pReader->step = EXTERNAL_ROWS_PREV; + // prepare for the main scan + int32_t code = doOpenReaderImpl(pReader); + if (code != TSDB_CODE_SUCCESS) { + return code; + } + + pReader->step = EXTERNAL_ROWS_PREV; if (ret) { return ret; } @@ -3759,7 +3754,12 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { } if (pReader->innerReader[1] != NULL && pReader->step == EXTERNAL_ROWS_MAIN) { - resetDataBlockScanInfo(pReader->innerReader[1]->status.pTableMap, pReader->window.ekey); + // prepare for the next row scan + int32_t code = doOpenReaderImpl(pReader->innerReader[1]); + if (code != TSDB_CODE_SUCCESS) { + return code; + } + bool ret1 = doTsdbNextDataBlock(pReader->innerReader[1]); pReader->step = EXTERNAL_ROWS_NEXT; if (ret1) { From 4a01bc53c7b8e8d891932d4c23958cd7503b8a16 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 28 Oct 2022 18:29:59 +0800 Subject: [PATCH 11/81] rm log --- source/libs/index/src/indexTfile.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/libs/index/src/indexTfile.c b/source/libs/index/src/indexTfile.c index 4fdf6d9e57..e002ff9c32 100644 --- a/source/libs/index/src/indexTfile.c +++ b/source/libs/index/src/indexTfile.c @@ -617,8 +617,6 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) { indexError("failed to write data: %s, offset: %d len: %d", v->colVal, v->offset, (int)taosArrayGetSize(v->tableId)); } else { - indexInfo("success to write data: %s, offset: %d len: %d", v->colVal, v->offset, - (int)taosArrayGetSize(v->tableId)); } } fstBuilderDestroy(tw->fb); From 9ccf7addb3200732b3bef7d6e0d23430c8ddcd9b Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 18:46:08 +0800 Subject: [PATCH 12/81] other:merge 3.0 --- source/dnode/vnode/src/sma/smaRollup.c | 10 +- source/libs/executor/inc/executorimpl.h | 1 + source/libs/executor/src/scanoperator.c | 269 +++++++++++++++++++++++- 3 files changed, 271 insertions(+), 9 deletions(-) diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index 19a0fbd629..af21ba83b7 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -701,6 +701,8 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma #endif for (int32_t i = 0; i < taosArrayGetSize(pResList); ++i) { SSDataBlock *output = taosArrayGetP(pResList, i); + smaError("uid:%ld, groupid:%ld", output->info.uid, output->info.groupId); + STsdb *sinkTsdb = (pItem->level == TSDB_RETENTION_L1 ? pSma->pRSmaTsdb[0] : pSma->pRSmaTsdb[1]); SSubmitReq *pReq = NULL; @@ -713,13 +715,13 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma if (pReq && tdProcessSubmitReq(sinkTsdb, output->info.version, pReq) < 0) { taosMemoryFreeClear(pReq); - smaError("vgId:%d, process submit req for rsma table %" PRIi64 " level %" PRIi8 " failed since %s", - SMA_VID(pSma), suid, pItem->level, terrstr()); + smaError("vgId:%d, process submit req for rsma suid:%"PRIu64", uid:%" PRIu64 " level %" PRIi8 " failed since %s", + SMA_VID(pSma), suid, output->info.groupId, pItem->level, terrstr()); goto _err; } - smaDebug("vgId:%d, process submit req for rsma table %" PRIi64 " level %" PRIi8 " ver %" PRIi64 " len %" PRIu32, - SMA_VID(pSma), suid, pItem->level, output->info.version, htonl(pReq->header.contLen)); + smaDebug("vgId:%d, process submit req for rsma suid:%" PRIu64 ",uid:%"PRIu64", level %" PRIi8 " ver %" PRIi64 " len %" PRIu32, + SMA_VID(pSma), suid, output->info.groupId, pItem->level, output->info.version, htonl(pReq->header.contLen)); taosMemoryFreeClear(pReq); } diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 975f8bb162..fc9524e828 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -371,6 +371,7 @@ typedef struct STableMergeScanInfo { SQueryTableDataCond cond; int32_t scanFlag; // table scan flag to denote if it is a repeat/reverse/main scan int32_t dataBlockLoadFlag; + STsdbReader* pReader; // if the upstream is an interval operator, the interval info is also kept here to get the time // window to check if current data block needs to be loaded. diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index e8a67cdc35..fec9217bdb 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -621,12 +621,14 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { binfo.capacity = binfo.rows; blockDataEnsureCapacity(pBlock, binfo.rows); pBlock->info = binfo; - ASSERT(binfo.uid != 0); - uint64_t* groupId = taosHashGet(pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } + ASSERT(binfo.uid != 0); + pBlock->info.groupId = getTableGroupId(&pTaskInfo->tableqinfoList, pBlock->info.uid); + ASSERT(pBlock->info.groupId != 0); +// uint64_t* groupId = taosHashGet(pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); +// if (groupId) { +// pBlock->info.groupId = *groupId; +// } uint32_t status = 0; int32_t code = loadDataBlock(pOperator, pTableScanInfo, pBlock, &status); @@ -765,6 +767,7 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { SSDataBlock* result = doTableScanGroup(pOperator); if (result != NULL) { + ASSERT(result->info.uid != 0); return result; } @@ -4189,6 +4192,130 @@ int32_t createMultipleDataReaders(SQueryTableDataCond* pQueryCond, SReadHandle* return TSDB_CODE_SUCCESS; } +int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* pHandle, + STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, + STsdbReader** ppReader, const char* idstr) { + STsdbReader* pReader = NULL; + void* pStart = taosArrayGet(pTableListInfo->pTableList, tableStartIdx); + int32_t num = tableEndIdx - tableStartIdx + 1; + + int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, num, &pReader, idstr); + if (code != 0) { + return code; + } + + *ppReader = pReader; + return TSDB_CODE_SUCCESS; +} + +static int32_t loadDataBlockFromOneTable2(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, + SSDataBlock* pBlock, uint32_t* status) { + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + STableMergeScanInfo* pInfo = pOperator->info; + + uint64_t uid = pBlock->info.uid; + + SFileBlockLoadRecorder* pCost = &pTableScanInfo->readRecorder; + + pCost->totalBlocks += 1; + pCost->totalRows += pBlock->info.rows; + + *status = pInfo->dataBlockLoadFlag; + if (pTableScanInfo->pFilterNode != NULL || + overlapWithTimeWindow(&pTableScanInfo->interval, &pBlock->info, pTableScanInfo->cond.order)) { + (*status) = FUNC_DATA_REQUIRED_DATA_LOAD; + } + + SDataBlockInfo* pBlockInfo = &pBlock->info; + taosMemoryFreeClear(pBlock->pBlockAgg); + + if (*status == FUNC_DATA_REQUIRED_FILTEROUT) { + qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), + pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); + pCost->filterOutBlocks += 1; + return TSDB_CODE_SUCCESS; + } else if (*status == FUNC_DATA_REQUIRED_NOT_LOAD) { + qDebug("%s data block skipped, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), + pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); + pCost->skipBlocks += 1; + + // clear all data in pBlock that are set when handing the previous block + for (int32_t i = 0; i < taosArrayGetSize(pBlock->pDataBlock); ++i) { + SColumnInfoData* pcol = taosArrayGet(pBlock->pDataBlock, i); + pcol->pData = NULL; + } + + return TSDB_CODE_SUCCESS; + } else if (*status == FUNC_DATA_REQUIRED_STATIS_LOAD) { + pCost->loadBlockStatis += 1; + + bool allColumnsHaveAgg = true; + SColumnDataAgg** pColAgg = NULL; + STsdbReader* reader = pTableScanInfo->pReader; + tsdbRetrieveDatablockSMA(reader, &pColAgg, &allColumnsHaveAgg); + + if (allColumnsHaveAgg == true) { + int32_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); + + // todo create this buffer during creating operator + if (pBlock->pBlockAgg == NULL) { + pBlock->pBlockAgg = taosMemoryCalloc(numOfCols, POINTER_BYTES); + } + + for (int32_t i = 0; i < numOfCols; ++i) { + SColMatchItem* pColMatchInfo = taosArrayGet(pTableScanInfo->matchInfo.pList, i); + if (!pColMatchInfo->needOutput) { + continue; + } + pBlock->pBlockAgg[pColMatchInfo->dstSlotId] = pColAgg[i]; + } + + return TSDB_CODE_SUCCESS; + } else { // failed to load the block sma data, data block statistics does not exist, load data block instead + *status = FUNC_DATA_REQUIRED_DATA_LOAD; + } + } + + ASSERT(*status == FUNC_DATA_REQUIRED_DATA_LOAD); + + pCost->totalCheckedRows += pBlock->info.rows; + pCost->loadBlocks += 1; + + STsdbReader* reader = pTableScanInfo->pReader; + SArray* pCols = tsdbRetrieveDataBlock(reader, NULL); + if (pCols == NULL) { + return terrno; + } + + relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); + + // currently only the tbname pseudo column + if (pTableScanInfo->pseudoSup.numOfExprs > 0) { + int32_t code = addTagPseudoColumnData(&pTableScanInfo->readHandle, pTableScanInfo->pseudoSup.pExprInfo, + pTableScanInfo->pseudoSup.numOfExprs, pBlock, GET_TASKID(pTaskInfo)); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } + } + + if (pTableScanInfo->pFilterNode != NULL) { + int64_t st = taosGetTimestampMs(); + doFilter(pTableScanInfo->pFilterNode, pBlock, &pTableScanInfo->matchInfo, NULL); + + double el = (taosGetTimestampUs() - st) / 1000.0; + pTableScanInfo->readRecorder.filterTime += el; + + if (pBlock->info.rows == 0) { + pCost->filterOutBlocks += 1; + qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d, elapsed time:%.2f ms", + GET_TASKID(pTaskInfo), pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows, el); + } else { + qDebug("%s data block filter applied, elapsed time:%.2f ms", GET_TASKID(pTaskInfo), el); + } + } + return TSDB_CODE_SUCCESS; +} + // todo refactor static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, int32_t readerIdx, SSDataBlock* pBlock, uint32_t* status) { @@ -4314,6 +4441,138 @@ typedef struct STableMergeScanSortSourceParam { SSDataBlock* inputBlock; } STableMergeScanSortSourceParam; +static SSDataBlock* getTableDataBlockTemp(void* param) { + STableMergeScanSortSourceParam* source = param; + SOperatorInfo* pOperator = source->pOperator; + STableMergeScanInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + int32_t readIdx = source->readerIdx; + SSDataBlock* pBlock = source->inputBlock; + STableMergeScanInfo* pTableScanInfo = pOperator->info; + + SQueryTableDataCond* pQueryCond = taosArrayGet(pTableScanInfo->queryConds, readIdx); + + blockDataCleanup(pBlock); + + int64_t st = taosGetTimestampUs(); + + void* pStart = taosArrayGet(pInfo->tableListInfo->pTableList, readIdx + pInfo->tableStartIndex); + + SReadHandle* pHandle = &pInfo->readHandle; + tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, 1, &pInfo->pReader, GET_TASKID(pTaskInfo)); + + STsdbReader* reader = pInfo->pReader; + while (tsdbNextDataBlock(reader)) { + if (isTaskKilled(pOperator->pTaskInfo)) { + T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); + } + + // process this data block based on the probabilities + bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); + if (!processThisBlock) { + continue; + } + + blockDataCleanup(pBlock); + SDataBlockInfo binfo = pBlock->info; + tsdbRetrieveDataBlockInfo(reader, &binfo); + + blockDataEnsureCapacity(pBlock, binfo.rows); + pBlock->info.type = binfo.type; + pBlock->info.uid = binfo.uid; + pBlock->info.window = binfo.window; + pBlock->info.rows = binfo.rows; + + if (tsdbIsAscendingOrder(pInfo->pReader)) { + pQueryCond->twindows.skey = pBlock->info.window.ekey + 1; + } else { + pQueryCond->twindows.ekey = pBlock->info.window.skey - 1; + } + + uint32_t status = 0; + int32_t code = loadDataBlockFromOneTable(pOperator, pTableScanInfo, readIdx, pBlock, &status); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pOperator->pTaskInfo->env, code); + } + + // current block is filter out according to filter condition, continue load the next block + if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { + continue; + } + + uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); + if (groupId) { + pBlock->info.groupId = *groupId; + } + + pOperator->resultInfo.totalRows += pBlock->info.rows; // pTableScanInfo->readRecorder.totalRows; + pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; + + tsdbReaderClose(pInfo->pReader); + pInfo->pReader = NULL; + return pBlock; + } + tsdbReaderClose(pInfo->pReader); + pInfo->pReader = NULL; + return NULL; +} +static SSDataBlock* getTableDataBlock2(void* param) { + STableMergeScanSortSourceParam* source = param; + SOperatorInfo* pOperator = source->pOperator; + int64_t uid = source->uid; + SSDataBlock* pBlock = source->inputBlock; + STableMergeScanInfo* pTableScanInfo = pOperator->info; + + int64_t st = taosGetTimestampUs(); + + blockDataCleanup(pBlock); + + STsdbReader* reader = pTableScanInfo->pReader; + while (tsdbTableNextDataBlock(reader, uid)) { + if (isTaskKilled(pOperator->pTaskInfo)) { + T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); + } + + // process this data block based on the probabilities + bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); + if (!processThisBlock) { + continue; + } + + blockDataCleanup(pBlock); + SDataBlockInfo binfo = pBlock->info; + tsdbRetrieveDataBlockInfo(reader, &binfo); + + blockDataEnsureCapacity(pBlock, binfo.rows); + pBlock->info.type = binfo.type; + pBlock->info.uid = binfo.uid; + pBlock->info.window = binfo.window; + pBlock->info.rows = binfo.rows; + + uint32_t status = 0; + int32_t code = loadDataBlockFromOneTable2(pOperator, pTableScanInfo, pBlock, &status); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pOperator->pTaskInfo->env, code); + } + + // current block is filter out according to filter condition, continue load the next block + if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { + continue; + } + + uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); + if (groupId) { + pBlock->info.groupId = *groupId; + } + + pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; + pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; + + return pBlock; + } + return NULL; +} + static SSDataBlock* getTableDataBlock(void* param) { STableMergeScanSortSourceParam* source = param; SOperatorInfo* pOperator = source->pOperator; From df786f1516cfb3692694e5cf4e2027bc49be06ff Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 28 Oct 2022 19:27:06 +0800 Subject: [PATCH 13/81] use sys mem --- source/libs/transport/src/transSvr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/transport/src/transSvr.c b/source/libs/transport/src/transSvr.c index 025eab3f3e..b829251ccd 100644 --- a/source/libs/transport/src/transSvr.c +++ b/source/libs/transport/src/transSvr.c @@ -1037,7 +1037,7 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads, srv->pThreadObj[i] = thrd; uv_os_sock_t fds[2]; - if (uv_socketpair(AF_UNIX, SOCK_STREAM, fds, UV_NONBLOCK_PIPE, UV_NONBLOCK_PIPE) != 0) { + if (uv_socketpair(SOCK_STREAM, 0, fds, UV_NONBLOCK_PIPE, UV_NONBLOCK_PIPE) != 0) { goto End; } From 335cb6513edc8044e31efaf6e19218b82885ba8c Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 19:32:57 +0800 Subject: [PATCH 14/81] other:merge 3.0 --- source/dnode/vnode/src/sma/smaRollup.c | 1 + source/libs/executor/inc/executorimpl.h | 33 ++++++++++--------- source/libs/executor/src/executil.c | 7 +++- source/libs/executor/src/scanoperator.c | 9 +++-- source/libs/executor/src/timewindowoperator.c | 2 ++ 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index af21ba83b7..0ed9ec210f 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -671,6 +671,7 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma while (1) { uint64_t ts; bool hasMore = false; +// ASSERT(0); int32_t code = qExecTaskOpt(taskInfo, pResList, &ts, &hasMore, NULL); if (code < 0) { if (code == TSDB_CODE_QRY_IN_EXEC) { diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index fc9524e828..50c62b9017 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -340,21 +340,23 @@ typedef struct STableScanInfo { } STableScanInfo; typedef struct STableMergeScanInfo { - STableListInfo* tableListInfo; - int32_t tableStartIndex; - int32_t tableEndIndex; - bool hasGroupId; - uint64_t groupId; - SArray* dataReaders; // array of tsdbReaderT* - SReadHandle readHandle; - int32_t bufPageSize; - uint32_t sortBufSize; // max buffer size for in-memory sort - SArray* pSortInfo; - SSortHandle* pSortHandle; - SSDataBlock* pSortInputBlock; - int64_t startTs; // sort start time - SArray* sortSourceParams; - SLimitInfo limitInfo; + STableListInfo* tableListInfo; + int32_t tableStartIndex; + int32_t tableEndIndex; + bool hasGroupId; + uint64_t groupId; + SArray* dataReaders; // array of tsdbReaderT* + SArray* queryConds; // array of queryTableDataCond + STsdbReader* pReader; + SReadHandle readHandle; + int32_t bufPageSize; + uint32_t sortBufSize; // max buffer size for in-memory sort + SArray* pSortInfo; + SSortHandle* pSortHandle; + SSDataBlock* pSortInputBlock; + int64_t startTs; // sort start time + SArray* sortSourceParams; + SLimitInfo limitInfo; SFileBlockLoadRecorder readRecorder; int64_t numOfRows; SScanInfo scanInfo; @@ -371,7 +373,6 @@ typedef struct STableMergeScanInfo { SQueryTableDataCond cond; int32_t scanFlag; // table scan flag to denote if it is a repeat/reverse/main scan int32_t dataBlockLoadFlag; - STsdbReader* pReader; // if the upstream is an interval operator, the interval info is also kept here to get the time // window to check if current data block needs to be loaded. diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index dbef032041..56158e567e 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1681,9 +1681,14 @@ int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t STableKeyInfo keyInfo = {.uid = uid, .groupId = gid}; taosArrayPush(pTableList->pTableList, &keyInfo); - if (pTableList->oneTableForEachGroup || pTableList->numOfOuputGroups > 1) { + if (!pTableList->oneTableForEachGroup) { + if (pTableList->map == NULL) { + pTableList->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); + } + taosHashPut(pTableList->map, &uid, sizeof(uid), &keyInfo.groupId, sizeof(keyInfo.groupId)); } + return TSDB_CODE_SUCCESS; } diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index fec9217bdb..32d2684a0a 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -624,11 +624,6 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { ASSERT(binfo.uid != 0); pBlock->info.groupId = getTableGroupId(&pTaskInfo->tableqinfoList, pBlock->info.uid); - ASSERT(pBlock->info.groupId != 0); -// uint64_t* groupId = taosHashGet(pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); -// if (groupId) { -// pBlock->info.groupId = *groupId; -// } uint32_t status = 0; int32_t code = loadDataBlock(pOperator, pTableScanInfo, pBlock, &status); @@ -1570,6 +1565,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock if (groupIdPre) { pInfo->pRes->info.groupId = *groupIdPre; } else { + ASSERT(0); pInfo->pRes->info.groupId = 0; } @@ -4438,6 +4434,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc typedef struct STableMergeScanSortSourceParam { SOperatorInfo* pOperator; int32_t readerIdx; + int64_t uid; SSDataBlock* inputBlock; } STableMergeScanSortSourceParam; @@ -4514,8 +4511,10 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { } tsdbReaderClose(pInfo->pReader); pInfo->pReader = NULL; + return NULL; } + static SSDataBlock* getTableDataBlock2(void* param) { STableMergeScanSortSourceParam* source = param; SOperatorInfo* pOperator = source->pOperator; diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 8e1b15f315..45e3c959ce 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -5384,6 +5384,8 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { maxTs = TMAX(maxTs, pBlock->info.window.ekey); minTs = TMIN(minTs, pBlock->info.window.skey); + qDebug("-------------------------groupId:%ld", pBlock->info.groupId); + doStreamIntervalAggImpl(pOperator, pBlock, pBlock->info.groupId, pUpdatedMap); } pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, maxTs); From 5b7855eb879c7cbc43344445d00c01d4d96a56ba Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 19:35:31 +0800 Subject: [PATCH 15/81] other:merge 3.0 --- source/libs/executor/src/scanoperator.c | 135 ------------------------ 1 file changed, 135 deletions(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 32d2684a0a..e854d479fc 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -4434,144 +4434,9 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc typedef struct STableMergeScanSortSourceParam { SOperatorInfo* pOperator; int32_t readerIdx; - int64_t uid; SSDataBlock* inputBlock; } STableMergeScanSortSourceParam; -static SSDataBlock* getTableDataBlockTemp(void* param) { - STableMergeScanSortSourceParam* source = param; - SOperatorInfo* pOperator = source->pOperator; - STableMergeScanInfo* pInfo = pOperator->info; - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - int32_t readIdx = source->readerIdx; - SSDataBlock* pBlock = source->inputBlock; - STableMergeScanInfo* pTableScanInfo = pOperator->info; - - SQueryTableDataCond* pQueryCond = taosArrayGet(pTableScanInfo->queryConds, readIdx); - - blockDataCleanup(pBlock); - - int64_t st = taosGetTimestampUs(); - - void* pStart = taosArrayGet(pInfo->tableListInfo->pTableList, readIdx + pInfo->tableStartIndex); - - SReadHandle* pHandle = &pInfo->readHandle; - tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, 1, &pInfo->pReader, GET_TASKID(pTaskInfo)); - - STsdbReader* reader = pInfo->pReader; - while (tsdbNextDataBlock(reader)) { - if (isTaskKilled(pOperator->pTaskInfo)) { - T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); - } - - // process this data block based on the probabilities - bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); - if (!processThisBlock) { - continue; - } - - blockDataCleanup(pBlock); - SDataBlockInfo binfo = pBlock->info; - tsdbRetrieveDataBlockInfo(reader, &binfo); - - blockDataEnsureCapacity(pBlock, binfo.rows); - pBlock->info.type = binfo.type; - pBlock->info.uid = binfo.uid; - pBlock->info.window = binfo.window; - pBlock->info.rows = binfo.rows; - - if (tsdbIsAscendingOrder(pInfo->pReader)) { - pQueryCond->twindows.skey = pBlock->info.window.ekey + 1; - } else { - pQueryCond->twindows.ekey = pBlock->info.window.skey - 1; - } - - uint32_t status = 0; - int32_t code = loadDataBlockFromOneTable(pOperator, pTableScanInfo, readIdx, pBlock, &status); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pOperator->pTaskInfo->env, code); - } - - // current block is filter out according to filter condition, continue load the next block - if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { - continue; - } - - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - - pOperator->resultInfo.totalRows += pBlock->info.rows; // pTableScanInfo->readRecorder.totalRows; - pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; - - tsdbReaderClose(pInfo->pReader); - pInfo->pReader = NULL; - return pBlock; - } - tsdbReaderClose(pInfo->pReader); - pInfo->pReader = NULL; - - return NULL; -} - -static SSDataBlock* getTableDataBlock2(void* param) { - STableMergeScanSortSourceParam* source = param; - SOperatorInfo* pOperator = source->pOperator; - int64_t uid = source->uid; - SSDataBlock* pBlock = source->inputBlock; - STableMergeScanInfo* pTableScanInfo = pOperator->info; - - int64_t st = taosGetTimestampUs(); - - blockDataCleanup(pBlock); - - STsdbReader* reader = pTableScanInfo->pReader; - while (tsdbTableNextDataBlock(reader, uid)) { - if (isTaskKilled(pOperator->pTaskInfo)) { - T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); - } - - // process this data block based on the probabilities - bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); - if (!processThisBlock) { - continue; - } - - blockDataCleanup(pBlock); - SDataBlockInfo binfo = pBlock->info; - tsdbRetrieveDataBlockInfo(reader, &binfo); - - blockDataEnsureCapacity(pBlock, binfo.rows); - pBlock->info.type = binfo.type; - pBlock->info.uid = binfo.uid; - pBlock->info.window = binfo.window; - pBlock->info.rows = binfo.rows; - - uint32_t status = 0; - int32_t code = loadDataBlockFromOneTable2(pOperator, pTableScanInfo, pBlock, &status); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pOperator->pTaskInfo->env, code); - } - - // current block is filter out according to filter condition, continue load the next block - if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { - continue; - } - - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - - pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; - pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; - - return pBlock; - } - return NULL; -} - static SSDataBlock* getTableDataBlock(void* param) { STableMergeScanSortSourceParam* source = param; SOperatorInfo* pOperator = source->pOperator; From d1097b7c2d77e724f69f2e4118086e299f5bc408 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 19:37:43 +0800 Subject: [PATCH 16/81] other:merge 3.0 --- source/libs/executor/inc/executorimpl.h | 34 ++++---- source/libs/executor/src/scanoperator.c | 108 ------------------------ 2 files changed, 17 insertions(+), 125 deletions(-) diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 50c62b9017..c7a6ae5774 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -340,23 +340,23 @@ typedef struct STableScanInfo { } STableScanInfo; typedef struct STableMergeScanInfo { - STableListInfo* tableListInfo; - int32_t tableStartIndex; - int32_t tableEndIndex; - bool hasGroupId; - uint64_t groupId; - SArray* dataReaders; // array of tsdbReaderT* - SArray* queryConds; // array of queryTableDataCond - STsdbReader* pReader; - SReadHandle readHandle; - int32_t bufPageSize; - uint32_t sortBufSize; // max buffer size for in-memory sort - SArray* pSortInfo; - SSortHandle* pSortHandle; - SSDataBlock* pSortInputBlock; - int64_t startTs; // sort start time - SArray* sortSourceParams; - SLimitInfo limitInfo; + STableListInfo* tableListInfo; + int32_t tableStartIndex; + int32_t tableEndIndex; + bool hasGroupId; + uint64_t groupId; + SArray* dataReaders; // array of tsdbReaderT* + SReadHandle readHandle; + int32_t bufPageSize; + uint32_t sortBufSize; // max buffer size for in-memory sort + SArray* pSortInfo; + SSortHandle* pSortHandle; + SSDataBlock* pSortInputBlock; + int64_t startTs; // sort start time + SArray* sortSourceParams; + SLimitInfo limitInfo; + + SFileBlockLoadRecorder readRecorder; int64_t numOfRows; SScanInfo scanInfo; diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index e854d479fc..7795eff410 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -4204,114 +4204,6 @@ int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* return TSDB_CODE_SUCCESS; } -static int32_t loadDataBlockFromOneTable2(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, - SSDataBlock* pBlock, uint32_t* status) { - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - STableMergeScanInfo* pInfo = pOperator->info; - - uint64_t uid = pBlock->info.uid; - - SFileBlockLoadRecorder* pCost = &pTableScanInfo->readRecorder; - - pCost->totalBlocks += 1; - pCost->totalRows += pBlock->info.rows; - - *status = pInfo->dataBlockLoadFlag; - if (pTableScanInfo->pFilterNode != NULL || - overlapWithTimeWindow(&pTableScanInfo->interval, &pBlock->info, pTableScanInfo->cond.order)) { - (*status) = FUNC_DATA_REQUIRED_DATA_LOAD; - } - - SDataBlockInfo* pBlockInfo = &pBlock->info; - taosMemoryFreeClear(pBlock->pBlockAgg); - - if (*status == FUNC_DATA_REQUIRED_FILTEROUT) { - qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), - pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); - pCost->filterOutBlocks += 1; - return TSDB_CODE_SUCCESS; - } else if (*status == FUNC_DATA_REQUIRED_NOT_LOAD) { - qDebug("%s data block skipped, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), - pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); - pCost->skipBlocks += 1; - - // clear all data in pBlock that are set when handing the previous block - for (int32_t i = 0; i < taosArrayGetSize(pBlock->pDataBlock); ++i) { - SColumnInfoData* pcol = taosArrayGet(pBlock->pDataBlock, i); - pcol->pData = NULL; - } - - return TSDB_CODE_SUCCESS; - } else if (*status == FUNC_DATA_REQUIRED_STATIS_LOAD) { - pCost->loadBlockStatis += 1; - - bool allColumnsHaveAgg = true; - SColumnDataAgg** pColAgg = NULL; - STsdbReader* reader = pTableScanInfo->pReader; - tsdbRetrieveDatablockSMA(reader, &pColAgg, &allColumnsHaveAgg); - - if (allColumnsHaveAgg == true) { - int32_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); - - // todo create this buffer during creating operator - if (pBlock->pBlockAgg == NULL) { - pBlock->pBlockAgg = taosMemoryCalloc(numOfCols, POINTER_BYTES); - } - - for (int32_t i = 0; i < numOfCols; ++i) { - SColMatchItem* pColMatchInfo = taosArrayGet(pTableScanInfo->matchInfo.pList, i); - if (!pColMatchInfo->needOutput) { - continue; - } - pBlock->pBlockAgg[pColMatchInfo->dstSlotId] = pColAgg[i]; - } - - return TSDB_CODE_SUCCESS; - } else { // failed to load the block sma data, data block statistics does not exist, load data block instead - *status = FUNC_DATA_REQUIRED_DATA_LOAD; - } - } - - ASSERT(*status == FUNC_DATA_REQUIRED_DATA_LOAD); - - pCost->totalCheckedRows += pBlock->info.rows; - pCost->loadBlocks += 1; - - STsdbReader* reader = pTableScanInfo->pReader; - SArray* pCols = tsdbRetrieveDataBlock(reader, NULL); - if (pCols == NULL) { - return terrno; - } - - relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); - - // currently only the tbname pseudo column - if (pTableScanInfo->pseudoSup.numOfExprs > 0) { - int32_t code = addTagPseudoColumnData(&pTableScanInfo->readHandle, pTableScanInfo->pseudoSup.pExprInfo, - pTableScanInfo->pseudoSup.numOfExprs, pBlock, GET_TASKID(pTaskInfo)); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } - } - - if (pTableScanInfo->pFilterNode != NULL) { - int64_t st = taosGetTimestampMs(); - doFilter(pTableScanInfo->pFilterNode, pBlock, &pTableScanInfo->matchInfo, NULL); - - double el = (taosGetTimestampUs() - st) / 1000.0; - pTableScanInfo->readRecorder.filterTime += el; - - if (pBlock->info.rows == 0) { - pCost->filterOutBlocks += 1; - qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d, elapsed time:%.2f ms", - GET_TASKID(pTaskInfo), pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows, el); - } else { - qDebug("%s data block filter applied, elapsed time:%.2f ms", GET_TASKID(pTaskInfo), el); - } - } - return TSDB_CODE_SUCCESS; -} - // todo refactor static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, int32_t readerIdx, SSDataBlock* pBlock, uint32_t* status) { From 6ff3668ecc8cab49b10b1c1aeca794e48a4c7b91 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 19:38:37 +0800 Subject: [PATCH 17/81] refactor: update the log. --- source/dnode/vnode/src/sma/smaRollup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index 0ed9ec210f..cd50450379 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -702,7 +702,7 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma #endif for (int32_t i = 0; i < taosArrayGetSize(pResList); ++i) { SSDataBlock *output = taosArrayGetP(pResList, i); - smaError("uid:%ld, groupid:%ld", output->info.uid, output->info.groupId); + smaDebug("uid:%ld, groupid:%ld", output->info.uid, output->info.groupId); STsdb *sinkTsdb = (pItem->level == TSDB_RETENTION_L1 ? pSma->pRSmaTsdb[0] : pSma->pRSmaTsdb[1]); SSubmitReq *pReq = NULL; From c52dc709f169696c8d154baf064d6c4d44af1032 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 19:39:25 +0800 Subject: [PATCH 18/81] refactor: remove some codes. --- source/libs/executor/src/scanoperator.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 7795eff410..18add21881 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -4188,22 +4188,6 @@ int32_t createMultipleDataReaders(SQueryTableDataCond* pQueryCond, SReadHandle* return TSDB_CODE_SUCCESS; } -int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* pHandle, - STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, - STsdbReader** ppReader, const char* idstr) { - STsdbReader* pReader = NULL; - void* pStart = taosArrayGet(pTableListInfo->pTableList, tableStartIdx); - int32_t num = tableEndIdx - tableStartIdx + 1; - - int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, num, &pReader, idstr); - if (code != 0) { - return code; - } - - *ppReader = pReader; - return TSDB_CODE_SUCCESS; -} - // todo refactor static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, int32_t readerIdx, SSDataBlock* pBlock, uint32_t* status) { From cb0adb0e9bd6e6256f14d68125f9a44a2c6c5adb Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 19:40:55 +0800 Subject: [PATCH 19/81] refactor: remove some codes. --- source/libs/executor/src/scanoperator.c | 1 - source/libs/executor/src/timewindowoperator.c | 1 - 2 files changed, 2 deletions(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 18add21881..c2a0ccc8de 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1565,7 +1565,6 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock if (groupIdPre) { pInfo->pRes->info.groupId = *groupIdPre; } else { - ASSERT(0); pInfo->pRes->info.groupId = 0; } diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 45e3c959ce..49a7112eba 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -5384,7 +5384,6 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { maxTs = TMAX(maxTs, pBlock->info.window.ekey); minTs = TMIN(minTs, pBlock->info.window.skey); - qDebug("-------------------------groupId:%ld", pBlock->info.groupId); doStreamIntervalAggImpl(pOperator, pBlock, pBlock->info.groupId, pUpdatedMap); } From 9b99c697852d12e566a7bba36f7722751e62f411 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 19:56:32 +0800 Subject: [PATCH 20/81] fix(query): support partition by + limit push down. --- include/common/tcommon.h | 8 - source/dnode/vnode/inc/vnode.h | 12 +- source/dnode/vnode/src/inc/tsdb.h | 4 +- source/dnode/vnode/src/inc/vnodeInt.h | 3 - source/dnode/vnode/src/sma/smaRollup.c | 1 - source/dnode/vnode/src/tsdb/tsdbCacheRead.c | 21 +- source/dnode/vnode/src/tsdb/tsdbRead.c | 107 ++-- source/libs/executor/inc/executil.h | 21 +- source/libs/executor/inc/executorimpl.h | 2 +- source/libs/executor/src/cachescanoperator.c | 46 +- source/libs/executor/src/executil.c | 109 +++- source/libs/executor/src/executor.c | 46 +- source/libs/executor/src/executorimpl.c | 206 +++--- source/libs/executor/src/scanoperator.c | 640 +++++-------------- 14 files changed, 516 insertions(+), 710 deletions(-) diff --git a/include/common/tcommon.h b/include/common/tcommon.h index 2b45a5d206..3bfbb85958 100644 --- a/include/common/tcommon.h +++ b/include/common/tcommon.h @@ -164,14 +164,6 @@ typedef enum EStreamType { STREAM_FILL_OVER, } EStreamType; -typedef struct { - SArray* pGroupList; - SArray* pTableList; - SHashObj* map; // speedup acquire the tableQueryInfo by table uid - bool needSortTableByGroupId; - uint64_t suid; -} STableListInfo; - #pragma pack(push, 1) typedef struct SColumnDataAgg { int16_t colId; diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index bed6e93e5a..fcb9b4ab44 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -152,13 +152,13 @@ typedef struct STsdbReader STsdbReader; #define CACHESCAN_RETRIEVE_LAST_ROW 0x4 #define CACHESCAN_RETRIEVE_LAST 0x8 -int32_t tsdbSetTableId(STsdbReader *pReader, int64_t uid); -int32_t tsdbReaderOpen(SVnode *pVnode, SQueryTableDataCond *pCond, SArray *pTableList, STsdbReader **ppReader, - const char *idstr); +int32_t tsdbSetTableList(STsdbReader* pReader, const void* pTableList, int32_t num); +int32_t tsdbReaderOpen(SVnode *pVnode, SQueryTableDataCond *pCond, void *pTableList, int32_t numOfTables, + STsdbReader **ppReader, const char *idstr); void tsdbReaderClose(STsdbReader *pReader); bool tsdbNextDataBlock(STsdbReader *pReader); -bool tsdbTableNextDataBlock(STsdbReader *pReader, int64_t uid); +bool tsdbTableNextDataBlock(STsdbReader *pReader, uint64_t uid); void tsdbRetrieveDataBlockInfo(STsdbReader *pReader, SDataBlockInfo *pDataBlockInfo); int32_t tsdbRetrieveDatablockSMA(STsdbReader *pReader, SColumnDataAgg ***pBlockStatis, bool *allHave); SArray *tsdbRetrieveDataBlock(STsdbReader *pTsdbReadHandle, SArray *pColumnIdList); @@ -170,8 +170,8 @@ void *tsdbGetIdx(SMeta *pMeta); void *tsdbGetIvtIdx(SMeta *pMeta); uint64_t getReaderMaxVersion(STsdbReader *pReader); -int32_t tsdbCacherowsReaderOpen(void *pVnode, int32_t type, SArray *pTableIdList, int32_t numOfCols, uint64_t suid, - void **pReader); +int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, void* pTableIdList, int32_t numOfTables, + int32_t numOfCols, uint64_t suid, void** pReader); int32_t tsdbRetrieveCacheRows(void *pReader, SSDataBlock *pResBlock, const int32_t *slotIds, SArray *pTableUids); void *tsdbCacherowsReaderClose(void *pReader); int32_t tsdbGetTableSchema(SVnode *pVnode, int64_t uid, STSchema **pSchema, int64_t *suid); diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index e5b8a1f327..c4e7ff92b7 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -716,7 +716,9 @@ typedef struct SCacheRowsReader { int32_t numOfCols; int32_t type; int32_t tableIndex; // currently returned result tables - SArray *pTableList; // table id list + + STableKeyInfo *pTableList; // table id list + int32_t numOfTables; SSttBlockLoadInfo *pLoadInfo; STsdbReadSnap *pReadSnap; SDataFReader *pDataFReader; diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index a5dc4431ab..94178727be 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -162,10 +162,7 @@ int tsdbInsertData(STsdb* pTsdb, int64_t version, SSubmitReq* pMsg, SSub int32_t tsdbInsertTableData(STsdb* pTsdb, int64_t version, SSubmitMsgIter* pMsgIter, SSubmitBlk* pBlock, SSubmitBlkRsp* pRsp); int32_t tsdbDeleteTableData(STsdb* pTsdb, int64_t version, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKEY eKey); -STsdbReader tsdbQueryCacheLastT(STsdb* tsdb, SQueryTableDataCond* pCond, STableListInfo* tableList, uint64_t qId, - void* pMemRef); int32_t tsdbSetKeepCfg(STsdb* pTsdb, STsdbCfg* pCfg); -int32_t tsdbGetStbIdList(SMeta* pMeta, int64_t suid, SArray* list); // tq int tqInit(); diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index cd50450379..4b9b4f9242 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -671,7 +671,6 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma while (1) { uint64_t ts; bool hasMore = false; -// ASSERT(0); int32_t code = qExecTaskOpt(taskInfo, pResList, &ts, &hasMore, NULL); if (code < 0) { if (code == TSDB_CODE_QRY_IN_EXEC) { diff --git a/source/dnode/vnode/src/tsdb/tsdbCacheRead.c b/source/dnode/vnode/src/tsdb/tsdbCacheRead.c index b8f49f38e4..dbc02363ea 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCacheRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbCacheRead.c @@ -97,10 +97,9 @@ static void saveOneRow(SArray* pRow, SSDataBlock* pBlock, SCacheRowsReader* pRea } } -int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, SArray* pTableIdList, int32_t numOfCols, uint64_t suid, - void** pReader) { +int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, void* pTableIdList, int32_t numOfTables, int32_t numOfCols, + uint64_t suid, void** pReader) { *pReader = NULL; - SCacheRowsReader* p = taosMemoryCalloc(1, sizeof(SCacheRowsReader)); if (p == NULL) { return TSDB_CODE_OUT_OF_MEMORY; @@ -111,14 +110,15 @@ int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, SArray* pTableIdList p->numOfCols = numOfCols; p->suid = suid; - if (taosArrayGetSize(pTableIdList) == 0) { + if (numOfTables == 0) { *pReader = p; return TSDB_CODE_SUCCESS; } - STableKeyInfo* pKeyInfo = taosArrayGet(pTableIdList, 0); + STableKeyInfo* pKeyInfo = &((STableKeyInfo*)pTableIdList)[0]; p->pSchema = metaGetTbTSchema(p->pVnode->pMeta, pKeyInfo->uid, -1, 1); p->pTableList = pTableIdList; + p->numOfTables = numOfTables; p->transferBuf = taosMemoryCalloc(p->pSchema->numOfCols, POINTER_BYTES); if (p->transferBuf == NULL) { @@ -205,7 +205,6 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 SLRUCache* lruCache = pr->pVnode->pTsdb->lruCache; LRUHandle* h = NULL; SArray* pRow = NULL; - size_t numOfTables = taosArrayGetSize(pr->pTableList); bool hasRes = false; SArray* pLastCols = NULL; @@ -243,8 +242,8 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 // retrieve the only one last row of all tables in the uid list. if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_SINGLE)) { - for (int32_t i = 0; i < numOfTables; ++i) { - STableKeyInfo* pKeyInfo = taosArrayGet(pr->pTableList, i); + for (int32_t i = 0; i < pr->numOfTables; ++i) { + STableKeyInfo* pKeyInfo = &pr->pTableList[i]; code = doExtractCacheRow(pr, lruCache, pKeyInfo->uid, &pRow, &h); if (code != TSDB_CODE_SUCCESS) { @@ -308,8 +307,8 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 } } else if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_ALL)) { - for (int32_t i = pr->tableIndex; i < numOfTables; ++i) { - STableKeyInfo* pKeyInfo = (STableKeyInfo*)taosArrayGet(pr->pTableList, i); + for (int32_t i = pr->tableIndex; i < pr->numOfTables; ++i) { + STableKeyInfo* pKeyInfo = &pr->pTableList[i]; code = doExtractCacheRow(pr, lruCache, pKeyInfo->uid, &pRow, &h); if (code != TSDB_CODE_SUCCESS) { return code; @@ -334,7 +333,7 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 code = TSDB_CODE_INVALID_PARA; } -_end: + _end: tsdbDataFReaderClose(&pr->pDataFReaderLast); tsdbDataFReaderClose(&pr->pDataFReader); diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 5a495f263e..8ebee92d15 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -270,24 +270,27 @@ static void resetDataBlockScanInfo(SHashObj* pTableMap, int64_t ts) { } } +static void clearBlockScanInfo(STableBlockScanInfo* p) { + p->iterInit = false; + p->iiter.hasVal = false; + + if (p->iter.iter != NULL) { + p->iter.iter = tsdbTbDataIterDestroy(p->iter.iter); + } + + if (p->iiter.iter != NULL) { + p->iiter.iter = tsdbTbDataIterDestroy(p->iiter.iter); + } + + p->delSkyline = taosArrayDestroy(p->delSkyline); + p->pBlockList = taosArrayDestroy(p->pBlockList); + tMapDataClear(&p->mapData); +} + static void destroyBlockScanInfo(SHashObj* pTableMap) { STableBlockScanInfo* p = NULL; - while ((p = taosHashIterate(pTableMap, p)) != NULL) { - p->iterInit = false; - p->iiter.hasVal = false; - - if (p->iter.iter != NULL) { - p->iter.iter = tsdbTbDataIterDestroy(p->iter.iter); - } - - if (p->iiter.iter != NULL) { - p->iiter.iter = tsdbTbDataIterDestroy(p->iiter.iter); - } - - p->delSkyline = taosArrayDestroy(p->delSkyline); - p->pBlockList = taosArrayDestroy(p->pBlockList); - tMapDataClear(&p->mapData); + clearBlockScanInfo(p); } taosHashCleanup(pTableMap); @@ -423,7 +426,7 @@ static bool filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader) { return true; } -_err: + _err: return false; } @@ -525,7 +528,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd *ppReader = pReader; return code; -_end: + _end: tsdbReaderClose(pReader); *ppReader = NULL; return code; @@ -577,7 +580,7 @@ static int32_t doLoadBlockIndex(STsdbReader* pReader, SDataFReader* pFileReader, pReader->cost.headFileLoadTime += (et1 - st) / 1000.0; -_end: + _end: taosArrayDestroy(aBlockIdx); return code; } @@ -951,7 +954,7 @@ static int32_t copyBlockDataToSDataBlock(STsdbReader* pReader, STableBlockScanIn int32_t unDumpedRows = asc ? pBlock->nRow - pDumpInfo->rowIndex : pDumpInfo->rowIndex + 1; tsdbDebug("%p copy file block to sdatablock, global index:%d, table index:%d, brange:%" PRId64 "-%" PRId64 - ", rows:%d, remain:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", + ", rows:%d, remain:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", pReader, pBlockIter->index, pBlockInfo->tbBlockIdx, pBlock->minKey.ts, pBlock->maxKey.ts, remain, unDumpedRows, pBlock->minVer, pBlock->maxVer, elapsedTime, pReader->idStr); @@ -978,7 +981,7 @@ static int32_t doLoadFileBlockData(STsdbReader* pReader, SDataBlockIter* pBlockI code = tsdbReadDataBlock(pReader->pFileReader, pBlock, pBlockData); if (code != TSDB_CODE_SUCCESS) { tsdbError("%p error occurs in loading file block, global index:%d, table index:%d, brange:%" PRId64 "-%" PRId64 - ", rows:%d, code:%s %s", + ", rows:%d, code:%s %s", pReader, pBlockIter->index, pBlockInfo->tbBlockIdx, pBlock->minKey.ts, pBlock->maxKey.ts, pBlock->nRow, tstrerror(code), pReader->idStr); return code; @@ -987,7 +990,7 @@ static int32_t doLoadFileBlockData(STsdbReader* pReader, SDataBlockIter* pBlockI double elapsedTime = (taosGetTimestampUs() - st) / 1000.0; tsdbDebug("%p load file block into buffer, global index:%d, index in table block list:%d, brange:%" PRId64 "-%" PRId64 - ", rows:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", + ", rows:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", pReader, pBlockIter->index, pBlockInfo->tbBlockIdx, pBlock->minKey.ts, pBlock->maxKey.ts, pBlock->nRow, pBlock->minVer, pBlock->maxVer, elapsedTime, pReader->idStr); @@ -1402,8 +1405,8 @@ static bool fileBlockShouldLoad(STsdbReader* pReader, SFileDataBlockInfo* pBlock // log the reason why load the datablock for profile if (loadDataBlock) { tsdbDebug("%p uid:%" PRIu64 - " need to load the datablock, overlapwithneighborblock:%d, hasDup:%d, partiallyRequired:%d, " - "overlapWithKey:%d, greaterThanBuf:%d, overlapWithDel:%d, overlapWithlastBlock:%d, %s", + " need to load the datablock, overlapwithneighborblock:%d, hasDup:%d, partiallyRequired:%d, " + "overlapWithKey:%d, greaterThanBuf:%d, overlapWithDel:%d, overlapWithlastBlock:%d, %s", pReader, pBlockInfo->uid, info.overlapWithNeighborBlock, info.hasDupTs, info.partiallyRequired, info.overlapWithKeyInBuf, info.moreThanCapcity, info.overlapWithDelInfo, info.overlapWithLastBlock, pReader->idStr); @@ -1438,7 +1441,7 @@ 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 " %s", pReader, elapsedTime, pBlock->info.rows, pBlock->info.window.skey, pBlock->info.window.ekey, pReader->idStr); @@ -2036,7 +2039,7 @@ static int32_t initMemDataIterator(STableBlockScanInfo* pBlockScanInfo, STsdbRea pBlockScanInfo->iter.hasVal = (tsdbTbDataIterGet(pBlockScanInfo->iter.iter) != NULL); tsdbDebug("%p uid:%" PRId64 ", check data in mem from skey:%" PRId64 ", order:%d, ts range in buf:%" PRId64 - "-%" PRId64 " %s", + "-%" PRId64 " %s", pReader, pBlockScanInfo->uid, startKey.ts, pReader->order, d->minKey, d->maxKey, pReader->idStr); } else { tsdbError("%p uid:%" PRId64 ", failed to create iterator for imem, code:%s, %s", pReader, pBlockScanInfo->uid, @@ -2057,7 +2060,7 @@ static int32_t initMemDataIterator(STableBlockScanInfo* pBlockScanInfo, STsdbRea pBlockScanInfo->iiter.hasVal = (tsdbTbDataIterGet(pBlockScanInfo->iiter.iter) != NULL); tsdbDebug("%p uid:%" PRId64 ", check data in imem from skey:%" PRId64 ", order:%d, ts range in buf:%" PRId64 - "-%" PRId64 " %s", + "-%" PRId64 " %s", pReader, pBlockScanInfo->uid, startKey.ts, pReader->order, di->minKey, di->maxKey, pReader->idStr); } else { tsdbError("%p uid:%" PRId64 ", failed to create iterator for mem, code:%s, %s", pReader, pBlockScanInfo->uid, @@ -2292,7 +2295,7 @@ static int32_t buildComposedDataBlock(STsdbReader* pReader) { } } -_end: + _end: pResBlock->info.uid = (pBlockScanInfo != NULL) ? pBlockScanInfo->uid : 0; blockDataUpdateTsWindow(pResBlock, 0); @@ -2304,7 +2307,7 @@ _end: if (pResBlock->info.rows > 0) { tsdbDebug("%p uid:%" PRIu64 ", composed data block created, brange:%" PRIu64 "-%" PRIu64 - " rows:%d, elapsed time:%.2f ms %s", + " rows:%d, elapsed time:%.2f ms %s", pReader, pResBlock->info.uid, pResBlock->info.window.skey, pResBlock->info.window.ekey, pResBlock->info.rows, el, pReader->idStr); } @@ -2385,13 +2388,13 @@ int32_t initDelSkylineIterator(STableBlockScanInfo* pBlockScanInfo, STsdbReader* taosArrayDestroy(pDelData); pBlockScanInfo->iter.index = - ASCENDING_TRAVERSE(pReader->order) ? 0 : taosArrayGetSize(pBlockScanInfo->delSkyline) - 1; + ASCENDING_TRAVERSE(pReader->order) ? 0 : taosArrayGetSize(pBlockScanInfo->delSkyline) - 1; pBlockScanInfo->iiter.index = pBlockScanInfo->iter.index; pBlockScanInfo->fileDelIndex = pBlockScanInfo->iter.index; pBlockScanInfo->lastBlockDelIndex = pBlockScanInfo->iter.index; return code; -_err: + _err: taosArrayDestroy(pDelData); return code; } @@ -2722,7 +2725,7 @@ static int32_t buildBlockFromFiles(STsdbReader* pReader) { SDataBlockIter* pBlockIter = &pReader->status.blockIter; if (pBlockIter->numOfBlocks == 0) { - _begin: + _begin: code = doLoadLastBlockSequentially(pReader); if (code != TSDB_CODE_SUCCESS) { return code; @@ -2811,8 +2814,8 @@ static STsdb* getTsdbByRetentions(SVnode* pVnode, TSKEY winSKey, SRetention* ret int8_t precision = pVnode->config.tsdbCfg.precision; int64_t now = taosGetTimestamp(precision); int64_t offset = tsQueryRsmaTolerance * ((precision == TSDB_TIME_PRECISION_MILLI) ? 1L - : (precision == TSDB_TIME_PRECISION_MICRO) ? 1000L - : 1000000L); + : (precision == TSDB_TIME_PRECISION_MICRO) ? 1000L + : 1000000L); for (int8_t i = 0; i < TSDB_RETENTION_MAX; ++i) { SRetention* pRetention = retentions + level; @@ -3452,13 +3455,23 @@ int32_t buildDataBlockFromBufImpl(STableBlockScanInfo* pBlockScanInfo, int64_t e return TSDB_CODE_SUCCESS; } -// todo refactor, use arraylist instead -int32_t tsdbSetTableId(STsdbReader* pReader, int64_t uid) { +// TODO refactor: with createDataBlockScanInfo +int32_t tsdbSetTableList(STsdbReader* pReader, const void* pTableList, int32_t num) { ASSERT(pReader != NULL); + + STableBlockScanInfo* p = NULL; + while ((p = taosHashIterate(pReader->status.pTableMap, p)) != NULL) { + clearBlockScanInfo(p); + } + taosHashClear(pReader->status.pTableMap); - STableBlockScanInfo info = {.lastKey = 0, .uid = uid}; - taosHashPut(pReader->status.pTableMap, &info.uid, sizeof(uint64_t), &info, sizeof(info)); + STableKeyInfo* pList = (STableKeyInfo*) pTableList; + for(int32_t i = 0; i < num; ++i) { + STableBlockScanInfo info = {.lastKey = 0, .uid = pList[i].uid}; + taosHashPut(pReader->status.pTableMap, &info.uid, sizeof(uint64_t), &info, sizeof(info)); + } + return TDB_CODE_SUCCESS; } @@ -3494,8 +3507,8 @@ static int32_t doOpenReaderImpl(STsdbReader* pReader) { } // ====================================== EXPOSED APIs ====================================== -int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTableList, STsdbReader** ppReader, - const char* idstr) { +int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, void* pTableList, int32_t numOfTables, + STsdbReader** ppReader, const char* idstr) { STimeWindow window = pCond->twindows; if (pCond->type == TIMEWINDOW_RANGE_EXTERNAL) { pCond->twindows.skey += 1; @@ -3554,8 +3567,8 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl if (pReader->pSchema == NULL) { tsdbError("failed to get table schema, suid:%" PRIu64 ", ver:-1, %s", pReader->suid, pReader->idStr); } - } else if (taosArrayGetSize(pTableList) > 0) { - STableKeyInfo* pKey = taosArrayGet(pTableList, 0); + } else if (numOfTables > 0) { + STableKeyInfo* pKey = pTableList; pReader->pSchema = metaGetTbTSchema(pReader->pTsdb->pVnode->pMeta, pKey->uid, -1, 1); if (pReader->pSchema == NULL) { tsdbError("failed to get table schema, uid:%" PRIu64 ", ver:-1, %s", pKey->uid, pReader->idStr); @@ -3564,8 +3577,7 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl STsdbReader* p = pReader->innerReader[0] != NULL ? pReader->innerReader[0] : pReader; - int32_t numOfTables = taosArrayGetSize(pTableList); - pReader->status.pTableMap = createDataBlockScanInfo(p, pTableList->pData, numOfTables); + pReader->status.pTableMap = createDataBlockScanInfo(p, pTableList, numOfTables); if (pReader->status.pTableMap == NULL) { tsdbReaderClose(pReader); *ppReader = NULL; @@ -3622,7 +3634,7 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl tsdbDebug("%p total numOfTable:%d in this query %s", pReader, numOfTables, pReader->idStr); return code; -_err: + _err: tsdbError("failed to create data reader, code:%s %s", tstrerror(code), idstr); return code; } @@ -3775,7 +3787,7 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { return false; } -bool tsdbTableNextDataBlock(STsdbReader* pReader, int64_t uid) { +bool tsdbTableNextDataBlock(STsdbReader* pReader, uint64_t uid) { STableBlockScanInfo* pBlockScanInfo = taosHashGet(pReader->status.pTableMap, &uid, sizeof(uid)); if (pBlockScanInfo == NULL) { // no data block for the table of given uid return false; @@ -3964,7 +3976,7 @@ int32_t tsdbReaderReset(STsdbReader* pReader, SQueryTableDataCond* pCond) { } tsdbDebug("%p reset reader, suid:%" PRIu64 ", numOfTables:%d, skey:%" PRId64 ", query range:%" PRId64 " - %" PRId64 - " in query %s", + " in query %s", pReader, pReader->suid, numOfTables, pCond->twindows.skey, pReader->window.skey, pReader->window.ekey, pReader->idStr); @@ -4155,7 +4167,7 @@ int32_t tsdbTakeReadSnap(STsdb* pTsdb, STsdbReadSnap** ppSnap, const char* idStr } tsdbTrace("vgId:%d, take read snapshot, %s", TD_VID(pTsdb->pVnode), idStr); -_exit: + _exit: return code; } @@ -4174,4 +4186,3 @@ void tsdbUntakeReadSnap(STsdb* pTsdb, STsdbReadSnap* pSnap, const char* idStr) { } tsdbTrace("vgId:%d, untake read snapshot, %s", TD_VID(pTsdb->pVnode), idStr); } -bool tsdbIsAscendingOrder(STsdbReader* pReader) { return ASCENDING_TRAVERSE(pReader->order); } diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index 0cfef7dc24..1965a8cbf6 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -28,7 +28,7 @@ do { \ ASSERT((_c) != -1); \ longjmp((_obj), (_c)); \ - } while (0); + } while (0) #define SET_RES_WINDOW_KEY(_k, _ori, _len, _uid) \ do { \ @@ -95,6 +95,25 @@ typedef struct SColMatchInfo { int32_t matchType; // determinate the source according to col id or slot id } SColMatchInfo; +// If the numOfOutputGroups is 1, the data blocks that belongs to different groups will be provided randomly +// The numOfOutputGroups is specified by physical plan. and will not be affect by numOfGroups +typedef struct STableListInfo { + bool oneTableForEachGroup; + int32_t numOfOuputGroups; // the data block will be generated one by one + int32_t* groupOffset; // keep the offset value for each group in the tableList + SArray* pTableList; + SHashObj* map; // speedup acquire the tableQueryInfo by table uid + uint64_t suid; +} STableListInfo; + +void destroyTableList(STableListInfo* pTableList); +int32_t getNumOfOutputGroups(const STableListInfo* pTableList); +bool oneTableForEachGroup(const STableListInfo* pTableList); +uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid); +int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t gid); +int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalIndex, STableKeyInfo** pKeyInfo, int32_t* num); +uint64_t getTotalTables(const STableListInfo* pTableList); + struct SqlFunctionCtx; size_t getResultRowSize(struct SqlFunctionCtx* pCtx, int32_t numOfOutput); diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 8769e8ac2f..e4f6b42224 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -1077,7 +1077,7 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN void copyUpdateDataBlock(SSDataBlock* pDest, SSDataBlock* pSource, int32_t tsColIndex); bool groupbyTbname(SNodeList* pGroupList); -int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* groupKey); +int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort); void* destroySqlFunctionCtx(SqlFunctionCtx* pCtx, int32_t numOfOutput); int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, SStreamState* pState, SSDataBlock* pBlock, SExprSupp* pSup, SGroupResInfo* pGroupResInfo); diff --git a/source/libs/executor/src/cachescanoperator.c b/source/libs/executor/src/cachescanoperator.c index f645e71c6e..d37efbe941 100644 --- a/source/libs/executor/src/cachescanoperator.c +++ b/source/libs/executor/src/cachescanoperator.c @@ -48,6 +48,10 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe int32_t numOfCols = 0; code = extractColMatchInfo(pScanNode->scan.pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } + removeRedundantTsCol(pScanNode, &pInfo->matchInfo); code = extractCacheScanSlotId(pInfo->matchInfo.pList, pTaskInfo, &pInfo->pSlotIds); @@ -61,11 +65,15 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); pInfo->pUidList = taosArrayInit(4, sizeof(int64_t)); - // partition by tbname - if (taosArrayGetSize(pTableList->pGroupList) == taosArrayGetSize(pTableList->pTableList)) { + // partition by tbname, todo opt perf + if (oneTableForEachGroup(pTableList) || (getTotalTables(pTableList) == 1)) { pInfo->retrieveType = CACHESCAN_RETRIEVE_TYPE_ALL | (pScanNode->ignoreNull ? CACHESCAN_RETRIEVE_LAST : CACHESCAN_RETRIEVE_LAST_ROW); - code = tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pTableList->pTableList, + + STableKeyInfo* pList = taosArrayGet(pTableList->pTableList, 0); + size_t num = taosArrayGetSize(pTableList->pTableList); + + code = tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, taosArrayGetSize(pInfo->matchInfo.pList), pTableList->suid, &pInfo->pLastrowReader); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -98,7 +106,7 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe pOperator->cost.openCost = 0; return pOperator; -_error: + _error: pTaskInfo->code = code; destroyLastrowScanOperator(pInfo); taosMemoryFree(pOperator); @@ -167,16 +175,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { } } - if (pTableList->map != NULL) { - int64_t* groupId = taosHashGet(pTableList->map, &pInfo->pRes->info.uid, sizeof(int64_t)); - if (groupId != NULL) { - pInfo->pRes->info.groupId = *groupId; - } - } else { - ASSERT(taosArrayGetSize(pTableList->pTableList) == 1); - STableKeyInfo* pKeyInfo = taosArrayGet(pTableList->pTableList, 0); - pInfo->pRes->info.groupId = pKeyInfo->groupId; - } + pInfo->pRes->info.groupId = getTableGroupId(pTableList, pInfo->pRes->info.uid); pInfo->indexOfBufferedRes += 1; return pInfo->pRes; @@ -185,18 +184,25 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { return NULL; } } else { - size_t totalGroups = taosArrayGetSize(pTableList->pGroupList); + size_t totalGroups = getNumOfOutputGroups(pTableList); while (pInfo->currentGroupIndex < totalGroups) { - SArray* pGroupTableList = taosArrayGetP(pTableList->pGroupList, pInfo->currentGroupIndex); - tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pGroupTableList, + STableKeyInfo* pList = NULL; + int32_t num = 0; + + int32_t code = getTablesOfGroup(pTableList, pInfo->currentGroupIndex, &pList, &num); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } + + tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, taosArrayGetSize(pInfo->matchInfo.pList), pTableList->suid, &pInfo->pLastrowReader); taosArrayClear(pInfo->pUidList); - int32_t code = tsdbRetrieveCacheRows(pInfo->pLastrowReader, pInfo->pRes, pInfo->pSlotIds, pInfo->pUidList); + code = tsdbRetrieveCacheRows(pInfo->pLastrowReader, pInfo->pRes, pInfo->pSlotIds, pInfo->pUidList); if (code != TSDB_CODE_SUCCESS) { - longjmp(pTaskInfo->env, code); + T_LONG_JMP(pTaskInfo->env, code); } pInfo->currentGroupIndex += 1; @@ -206,7 +212,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { if (pInfo->pseudoExprSup.numOfExprs > 0) { SExprSupp* pSup = &pInfo->pseudoExprSup; - STableKeyInfo* pKeyInfo = taosArrayGet(pGroupTableList, 0); + STableKeyInfo* pKeyInfo = &((STableKeyInfo*)pTableList)[0]; pInfo->pRes->info.groupId = pKeyInfo->groupId; if (taosArrayGetSize(pInfo->pUidList) > 0) { diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index a1eb3af391..6c5705650c 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -337,8 +337,8 @@ static EDealRes getColumn(SNode** pNode, void* pContext) { taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), pNode, sizeof((*pNode))); pSColumnNode->slotId = pData->index++; SColumnInfo cInfo = {.colId = pSColumnNode->colId, - .type = pSColumnNode->node.resType.type, - .bytes = pSColumnNode->node.resType.bytes}; + .type = pSColumnNode->node.resType.type, + .bytes = pSColumnNode->node.resType.bytes}; #if TAG_FILTER_DEBUG qDebug("tagfilter build column info, slotId:%d, colId:%d, type:%d", pSColumnNode->slotId, cInfo.colId, cInfo.type); #endif @@ -507,7 +507,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, int64_t suid, SArray* // int64_t st2 = taosGetTimestampUs(); // qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); -end: + end: taosHashCleanup(tags); taosHashCleanup(ctx.colHash); taosArrayDestroy(ctx.cInfoList); @@ -544,6 +544,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis code = TSDB_CODE_OUT_OF_MEMORY; goto end; } + ctx.index = 0; ctx.cInfoList = taosArrayInit(4, sizeof(SColumnInfo)); if (ctx.cInfoList == NULL) { @@ -606,6 +607,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } else { void* tag = taosHashGet(tags, uid, sizeof(int64_t)); ASSERT(tag); + STagVal tagVal = {0}; tagVal.cid = pColInfo->info.colId; const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal); @@ -636,6 +638,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } } } + pResBlock->info.rows = rows; // int64_t st1 = taosGetTimestampUs(); @@ -661,10 +664,12 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } break; } + default: code = TSDB_CODE_OPS_NOT_SUPPORT; goto end; } + if (nodeType(pNode) == QUERY_NODE_COLUMN) { SColumnNode* pSColumnNode = (SColumnNode*)pNode; SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, pSColumnNode->slotId); @@ -674,10 +679,12 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } else { code = scalarCalculate(pNode, pBlockList, &output); } + if (code != TSDB_CODE_SUCCESS) { releaseColInfoData(output.columnData); goto end; } + taosArrayPush(groupData, &output.columnData); } @@ -696,6 +703,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis code = TSDB_CODE_OUT_OF_MEMORY; goto end; } + for (int i = 0; i < rows; i++) { STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); @@ -739,7 +747,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis // int64_t st2 = taosGetTimestampUs(); // qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); -end: + end: taosMemoryFreeClear(keyBuf); taosHashCleanup(tags); taosHashCleanup(ctx.colHash); @@ -817,38 +825,86 @@ static int32_t removeInvalidTable(SArray* uids, SHashObj* tags) { taosArrayDestroy(validUid); return 0; } + +static int32_t nameComparFn(const void* p1, const void* p2) { + const char* pName1 = *(const char**) p1; + const char* pName2 = *(const char**) p2; + + int32_t ret = strcmp(pName1, pName2); + if (ret == 0) { + return 0; + } else { + return (ret > 0)? 1:-1; + } +} + +static SArray* getTableNameList(const SNodeListNode* pList) { + int32_t len = LIST_LENGTH(pList->pNodeList); + SListCell* cell = pList->pNodeList->pHead; + + SArray* pTbList = taosArrayInit(len, POINTER_BYTES); + for (int i = 0; i < pList->pNodeList->length; i++) { + SValueNode* valueNode = (SValueNode*) cell->pNode; + if (!IS_VAR_DATA_TYPE(valueNode->node.resType.type)) { + terrno = TSDB_CODE_INVALID_PARA; + taosArrayDestroy(pTbList); + return NULL; + } + + char* name = varDataVal(valueNode->datum.p); + taosArrayPush(pTbList, &name); + cell = cell->pNext; + } + + size_t numOfTables = taosArrayGetSize(pTbList); + + // order the name + taosArraySort(pTbList, nameComparFn); + + // remove the duplicates + SArray* pNewList = taosArrayInit(taosArrayGetSize(pTbList), sizeof(void*)); + taosArrayPush(pNewList, taosArrayGet(pTbList, 0)); + + for (int32_t i = 1; i < numOfTables; ++i) { + char** name = taosArrayGetLast(pNewList); + char** nameInOldList = taosArrayGet(pTbList, i); + if (strcmp(*name, *nameInOldList) == 0) { + continue; + } + + taosArrayPush(pNewList, nameInOldList); + } + + taosArrayDestroy(pTbList); + return pNewList; +} + static int32_t optimizeTbnameInCondImpl(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond) { if (nodeType(pTagCond) != QUERY_NODE_OPERATOR) { return -1; } + SOperatorNode* pNode = (SOperatorNode*)pTagCond; if (pNode->opType != OP_TYPE_IN) { return -1; } + if ((pNode->pLeft != NULL && nodeType(pNode->pLeft) == QUERY_NODE_COLUMN && ((SColumnNode*)pNode->pLeft)->colType == COLUMN_TYPE_TBNAME) && (pNode->pRight != NULL && nodeType(pNode->pRight) == QUERY_NODE_NODE_LIST)) { SNodeListNode* pList = (SNodeListNode*)pNode->pRight; int32_t len = LIST_LENGTH(pList->pNodeList); - if (len <= 0) return -1; - - SListCell* cell = pList->pNodeList->pHead; - - SArray* pTbList = taosArrayInit(len, sizeof(void*)); - for (int i = 0; i < pList->pNodeList->length; i++) { - SValueNode* valueNode = (SValueNode*)cell->pNode; - if (!IS_VAR_DATA_TYPE(valueNode->node.resType.type)) { - taosArrayDestroy(pTbList); - return -1; - } - char* name = varDataVal(valueNode->datum.p); - taosArrayPush(pTbList, &name); - cell = cell->pNext; + if (len <= 0) { + return -1; } - for (int i = 0; i < taosArrayGetSize(pTbList); i++) { - char* name = taosArrayGetP(pTbList, i); + SArray* pTbList = getTableNameList(pList); + int32_t numOfTables = taosArrayGetSize(pTbList); + + for (int i = 0; i < numOfTables; i++) { + char* name = taosArrayGetP(pTbList, i); + uint64_t uid = 0; if (metaGetTableUidByName(metaHandle, name, &uid) == 0) { ETableType tbType = TSDB_TABLE_MAX; @@ -863,11 +919,14 @@ static int32_t optimizeTbnameInCondImpl(void* metaHandle, int64_t suid, SArray* terrno = 0; } } + taosArrayDestroy(pTbList); return 0; } + return -1; } + int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, SNode* pTagIndexCond, STableListInfo* pListInfo) { int32_t code = TSDB_CODE_SUCCESS; @@ -946,14 +1005,6 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, } taosArrayDestroy(res); - - pListInfo->pGroupList = taosArrayInit(4, POINTER_BYTES); - if (pListInfo->pGroupList == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } - - // put into list as default group, remove it if grouping sorting is required later - taosArrayPush(pListInfo->pGroupList, &pListInfo->pTableList); return code; } @@ -1686,4 +1737,4 @@ void destroyTableList(STableListInfo* pTableqinfoList) { pTableqinfoList->pTableList = NULL; pTableqinfoList->map = NULL; -} +} \ No newline at end of file diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index 9546c3895e..7f04623612 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -293,9 +293,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo qDebug("add %d tables id into query list, %s", (int32_t)taosArrayGetSize(tableIdList), pTaskInfo->id.str); } - if (pListInfo->map == NULL) { - pListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); - } + // traverse to the stream scanner node to add this table id SOperatorInfo* pInfo = pTaskInfo->pRoot; @@ -307,8 +305,10 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo SStreamScanInfo* pScanInfo = pInfo->info; if (isAdd) { // add new table id SArray* qa = filterUnqualifiedTables(pScanInfo, tableIdList, GET_TASKID(pTaskInfo)); + int32_t numOfQualifiedTables = taosArrayGetSize(qa); + + qDebug(" %d qualified child tables added into stream scanner", numOfQualifiedTables); - qDebug(" %d qualified child tables added into stream scanner", (int32_t)taosArrayGetSize(qa)); code = tqReaderAddTbUidList(pScanInfo->tqReader, qa); if (code != TSDB_CODE_SUCCESS) { taosArrayDestroy(qa); @@ -328,7 +328,9 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo } } - for (int32_t i = 0; i < taosArrayGetSize(qa); ++i) { + STableListInfo* pTableListInfo = &pTaskInfo->tableqinfoList; + + for (int32_t i = 0; i < numOfQualifiedTables; ++i) { uint64_t* uid = taosArrayGet(qa, i); STableKeyInfo keyInfo = {.uid = *uid, .groupId = 0}; @@ -358,8 +360,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo if (!exists) { #endif - taosArrayPush(pTaskInfo->tableqinfoList.pTableList, &keyInfo); - taosHashPut(pTaskInfo->tableqinfoList.map, uid, sizeof(*uid), &keyInfo.groupId, sizeof(keyInfo.groupId)); + addTableIntoTableList(pTableListInfo, keyInfo.uid, keyInfo.groupId); } if (keyBuf != NULL) { @@ -439,7 +440,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId, qDebug("subplan task create completed, TID:0x%" PRIx64 " QID:0x%" PRIx64, taskId, pSubplan->id.queryId); -_error: + _error: // if failed to add ref for all tables in this query, abort current query return code; } @@ -935,7 +936,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT /*if (pTaskInfo->streamInfo.lastStatus.type != TMQ_OFFSET__SNAPSHOT_DATA ||*/ /*pTaskInfo->streamInfo.lastStatus.uid != uid || pTaskInfo->streamInfo.lastStatus.ts != ts) {*/ STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info; - int32_t tableSz = taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList); + int32_t numOfTables = getTotalTables(&pTaskInfo->tableqinfoList); #ifndef NDEBUG qDebug("switch to next table %" PRId64 " (cursor %d), %" PRId64 " rows returned", uid, @@ -944,7 +945,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT #endif bool found = false; - for (int32_t i = 0; i < tableSz; i++) { + for (int32_t i = 0; i < numOfTables; i++) { STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, i); if (pTableInfo->uid == uid) { found = true; @@ -957,14 +958,17 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT ASSERT(found); if (pTableScanInfo->dataReader == NULL) { - if (tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &pTableScanInfo->cond, - pTaskInfo->tableqinfoList.pTableList, &pTableScanInfo->dataReader, NULL) < 0 || - pTableScanInfo->dataReader == NULL) { + STableKeyInfo* pList = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, 0); + int32_t num = getTotalTables(&pTaskInfo->tableqinfoList); + + if (tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &pTableScanInfo->cond, pList, num, + &pTableScanInfo->dataReader, NULL) < 0 || pTableScanInfo->dataReader == NULL) { ASSERT(0); } } - tsdbSetTableId(pTableScanInfo->dataReader, uid); + STableKeyInfo tki = {.uid = uid}; + tsdbSetTableList(pTableScanInfo->dataReader, &tki, 1); int64_t oldSkey = pTableScanInfo->cond.twindows.skey; pTableScanInfo->cond.twindows.skey = ts + 1; tsdbReaderReset(pTableScanInfo->dataReader, &pTableScanInfo->cond); @@ -972,7 +976,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT pTableScanInfo->scanTimes = 0; qDebug("tsdb reader offset seek to uid %" PRId64 " ts %" PRId64 ", table cur set to %d , all table num %d", uid, - ts, pTableScanInfo->currentTable, tableSz); + ts, pTableScanInfo->currentTable, numOfTables); /*}*/ } else { ASSERT(0); @@ -994,9 +998,15 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT initQueryTableDataCondForTmq(&pTaskInfo->streamInfo.tableCond, sContext, &mtInfo); pTaskInfo->streamInfo.tableCond.twindows.skey = pOffset->ts; - pTaskInfo->tableqinfoList.pTableList = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(pTaskInfo->tableqinfoList.pTableList, &(STableKeyInfo){.uid = mtInfo.uid, .groupId = 0}); - tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pTaskInfo->tableqinfoList.pTableList, + + STableListInfo* pListInfo = &pTaskInfo->tableqinfoList; + + pListInfo->pTableList = taosArrayInit(1, sizeof(STableKeyInfo)); + taosArrayPush(pListInfo->pTableList, &(STableKeyInfo){.uid = mtInfo.uid, .groupId = 0}); + + STableKeyInfo* pList = taosArrayGet(pListInfo->pTableList, 0); + + tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, taosArrayGetSize(pListInfo->pTableList), &pInfo->dataReader, NULL); cleanupQueryTableDataCond(&pTaskInfo->streamInfo.tableCond); diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 75db42fccc..00fef26670 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -494,7 +494,7 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int // todo: refactor this if (fmIsImplicitTsFunc(pCtx[i].functionId) && (j == pOneExpr->base.numOfParams - 1)) { pInput->pPTS = pInput->pData[j]; // in case of merge function, this is not always the ts column data. - // ASSERT(pInput->pPTS->info.type == TSDB_DATA_TYPE_TIMESTAMP); + // ASSERT(pInput->pPTS->info.type == TSDB_DATA_TYPE_TIMESTAMP); } ASSERT(pInput->pData[j] != NULL); } else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) { @@ -815,7 +815,7 @@ bool isTaskKilled(SExecTaskInfo* pTaskInfo) { // abort current query execution. if (pTaskInfo->owner != 0 && ((taosGetTimestampSec() - pTaskInfo->cost.start / 1000) > 10 * getMaximumIdleDurationSec()) - /*(!needBuildResAfterQueryComplete(pTaskInfo))*/) { + /*(!needBuildResAfterQueryComplete(pTaskInfo))*/) { assert(pTaskInfo->cost.start != 0); // qDebug("QInfo:%" PRIu64 " retrieve not arrive beyond %d ms, abort current query execution, start:%" PRId64 // ", current:%d", pQInfo->qId, 1, pQInfo->startExecTs, taosGetTimestampSec()); @@ -1739,8 +1739,6 @@ int32_t appendDownstream(SOperatorInfo* p, SOperatorInfo** pDownstream, int32_t return TSDB_CODE_SUCCESS; } -static void doDestroyTableList(STableListInfo* pTableqinfoList); - typedef struct SFetchRspHandleWrapper { uint32_t exchangeId; int32_t sourceIndex; @@ -1965,7 +1963,7 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn SLoadRemoteDataInfo* pLoadInfo = &pExchangeInfo->loadInfo; if (pRsp->numOfRows == 0) { qDebug("%s vgId:%d, taskId:0x%" PRIx64 " execId:%d index:%d completed, rowsOfSource:%" PRIu64 - ", totalRows:%" PRIu64 ", completed:%d try next %d/%" PRIzu, + ", totalRows:%" PRIu64 ", completed:%d try next %d/%" PRIzu, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, i, pDataInfo->totalRows, pExchangeInfo->loadInfo.totalRows, completed + 1, i + 1, totalSources); pDataInfo->status = EX_SOURCE_DATA_EXHAUSTED; @@ -1992,10 +1990,10 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn if (pRsp->completed == 1) { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 - " execId:%d" - " index:%d completed, blocks:%d, numOfRows:%d, rowsOfSource:%" PRIu64 ", totalRows:%" PRIu64 - ", total:%.2f Kb," - " completed:%d try next %d/%" PRIzu, + " execId:%d" + " index:%d completed, blocks:%d, numOfRows:%d, rowsOfSource:%" PRIu64 ", totalRows:%" PRIu64 + ", total:%.2f Kb," + " completed:%d try next %d/%" PRIzu, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, i, pRsp->numOfBlocks, pRsp->numOfRows, pDataInfo->totalRows, pLoadInfo->totalRows, pLoadInfo->totalSize / 1024.0, completed + 1, i + 1, totalSources); @@ -2003,7 +2001,7 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn pDataInfo->status = EX_SOURCE_DATA_EXHAUSTED; } else { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 - " execId:%d blocks:%d, numOfRows:%d, totalRows:%" PRIu64 ", total:%.2f Kb", + " execId:%d blocks:%d, numOfRows:%d, totalRows:%" PRIu64 ", total:%.2f Kb", GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pRsp->numOfBlocks, pRsp->numOfRows, pLoadInfo->totalRows, pLoadInfo->totalSize / 1024.0); } @@ -2030,7 +2028,7 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn sched_yield(); } -_error: + _error: pTaskInfo->code = code; } @@ -2091,7 +2089,7 @@ static int32_t seqLoadRemoteData(SOperatorInfo* pOperator) { SLoadRemoteDataInfo* pLoadInfo = &pExchangeInfo->loadInfo; if (pRsp->numOfRows == 0) { qDebug("%s vgId:%d, taskID:0x%" PRIx64 " execId:%d %d of total completed, rowsOfSource:%" PRIu64 - ", totalRows:%" PRIu64 " try next", + ", totalRows:%" PRIu64 " try next", GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pExchangeInfo->current + 1, pDataInfo->totalRows, pLoadInfo->totalRows); @@ -2108,7 +2106,7 @@ static int32_t seqLoadRemoteData(SOperatorInfo* pOperator) { if (pRsp->completed == 1) { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 " execId:%d numOfRows:%d, rowsOfSource:%" PRIu64 - ", totalRows:%" PRIu64 ", totalBytes:%" PRIu64 " try next %d/%" PRIzu, + ", totalRows:%" PRIu64 ", totalBytes:%" PRIu64 " try next %d/%" PRIzu, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pRetrieveRsp->numOfRows, pDataInfo->totalRows, pLoadInfo->totalRows, pLoadInfo->totalSize, pExchangeInfo->current + 1, totalSources); @@ -2117,7 +2115,7 @@ static int32_t seqLoadRemoteData(SOperatorInfo* pOperator) { pExchangeInfo->current += 1; } else { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 " execId:%d numOfRows:%d, totalRows:%" PRIu64 - ", totalBytes:%" PRIu64, + ", totalBytes:%" PRIu64, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pRetrieveRsp->numOfRows, pLoadInfo->totalRows, pLoadInfo->totalSize); } @@ -2305,7 +2303,7 @@ SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode createOperatorFpSet(prepareLoadRemoteData, doLoadRemoteData, NULL, NULL, destroyExchangeOperatorInfo, NULL); return pOperator; -_error: + _error: if (pInfo != NULL) { doDestroyExchangeOperatorInfo(pInfo); } @@ -3042,7 +3040,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN return pOperator; -_error: + _error: if (pInfo != NULL) { destroyAggOperatorInfo(pInfo); } @@ -3212,8 +3210,8 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* SInterval* pInterval = QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL == downstream->operatorType - ? &((SMergeAlignedIntervalAggOperatorInfo*)downstream->info)->intervalAggOperatorInfo->interval - : &((SIntervalAggOperatorInfo*)downstream->info)->interval; + ? &((SMergeAlignedIntervalAggOperatorInfo*)downstream->info)->intervalAggOperatorInfo->interval + : &((SIntervalAggOperatorInfo*)downstream->info)->interval; int32_t order = (pPhyFillNode->inputTsOrder == ORDER_ASC) ? TSDB_ORDER_ASC : TSDB_ORDER_DESC; int32_t type = convertFillType(pPhyFillNode->mode); @@ -3258,7 +3256,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* code = appendDownstream(pOperator, &downstream, 1); return pOperator; -_error: + _error: if (pInfo != NULL) { destroyFillOperatorInfo(pInfo); } @@ -3366,62 +3364,116 @@ static void cleanupTableSchemaInfo(SSchemaInfo* pSchemaInfo) { static void cleanupStreamInfo(SStreamTaskInfo* pStreamInfo) { tDeleteSSchemaWrapper(pStreamInfo->schema); } +static int32_t orderbyGroupIdComparFn(const void* p1, const void* p2) { + STableKeyInfo* pInfo1 = (STableKeyInfo*) p1; + STableKeyInfo* pInfo2 = (STableKeyInfo*) p2; + + if (pInfo1->groupId == pInfo2->groupId) { + return 0; + } else { + return pInfo1->groupId < pInfo2->groupId? -1:1; + } +} + static int32_t sortTableGroup(STableListInfo* pTableListInfo) { - taosArrayClear(pTableListInfo->pGroupList); + int32_t code = TSDB_CODE_SUCCESS; + + taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); + int32_t size = getTotalTables(pTableListInfo); + + SArray* pList = taosArrayInit(4, sizeof(int32_t)); + + STableKeyInfo* pInfo = taosArrayGet(pTableListInfo->pTableList, 0); + uint64_t gid = pInfo->groupId; + + int32_t start = 0; + taosArrayPush(pList, &start); + + for(int32_t i = 1; i < size; ++i) { + pInfo = taosArrayGet(pTableListInfo->pTableList, i); + if (pInfo->groupId != gid) { + taosArrayPush(pList, &i); + gid = pInfo->groupId; + } + } + + pTableListInfo->numOfOuputGroups = taosArrayGetSize(pList); + pTableListInfo->groupOffset = taosMemoryMalloc(sizeof(int32_t) * pTableListInfo->numOfOuputGroups); + memcpy(pTableListInfo->groupOffset, taosArrayGet(pList, 0), sizeof(int32_t) * pTableListInfo->numOfOuputGroups); + taosArrayDestroy(pList); + +# if 0 + SArray* sortSupport = taosArrayInit(16, sizeof(uint64_t)); - if (sortSupport == NULL) return TSDB_CODE_OUT_OF_MEMORY; - for (int32_t i = 0; i < taosArrayGetSize(pTableListInfo->pTableList); i++) { + if (sortSupport == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + + size_t num = taosArrayGetSize(pTableListInfo->pTableList); + for (int32_t i = 0; i < num; i++) { STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); uint64_t* groupId = taosHashGet(pTableListInfo->map, &info->uid, sizeof(uint64_t)); int32_t index = taosArraySearchIdx(sortSupport, groupId, compareUint64Val, TD_EQ); if (index == -1) { void* p = taosArraySearch(sortSupport, groupId, compareUint64Val, TD_GT); + SArray* tGroup = taosArrayInit(8, sizeof(STableKeyInfo)); if (tGroup == NULL) { - taosArrayDestroy(sortSupport); - return TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; } + if (taosArrayPush(tGroup, info) == NULL) { qError("taos push info array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; } + if (p == NULL) { if (taosArrayPush(sortSupport, groupId) == NULL) { qError("taos push support array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; } + if (taosArrayPush(pTableListInfo->pGroupList, &tGroup) == NULL) { qError("taos push group array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; } } else { int32_t pos = TARRAY_ELEM_IDX(sortSupport, p); if (taosArrayInsert(sortSupport, pos, groupId) == NULL) { qError("taos insert support array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; } + if (taosArrayInsert(pTableListInfo->pGroupList, pos, &tGroup) == NULL) { qError("taos insert group array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; } } } else { SArray* tGroup = (SArray*)taosArrayGetP(pTableListInfo->pGroupList, index); if (taosArrayPush(tGroup, info) == NULL) { qError("taos push uid array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; } } } + taosArrayDestroy(sortSupport); +#endif + return TDB_CODE_SUCCESS; + + _error: +// taosArrayDestroy(sortSupport); + return code; } bool groupbyTbname(SNodeList* pGroupList) { @@ -3437,38 +3489,44 @@ bool groupbyTbname(SNodeList* pGroupList) { return bytbname; } -int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group) { +int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { + int32_t code = TSDB_CODE_SUCCESS; if (group == NULL) { - return TDB_CODE_SUCCESS; + return code; } pTableListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); if (pTableListInfo->map == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; + return code; } - bool assignUid = groupbyTbname(group); - + bool assignUid = groupbyTbname(group); size_t numOfTables = taosArrayGetSize(pTableListInfo->pTableList); - if (assignUid) { + if (assignUid) { // in case of group/partition by tbname, the group id is equalled to the uid of table for (int32_t i = 0; i < numOfTables; i++) { STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); info->groupId = info->uid; taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &info->groupId, sizeof(uint64_t)); } + + pTableListInfo->oneTableForEachGroup = true; + if (groupSort) { + pTableListInfo->numOfOuputGroups = numOfTables; + } } else { - int32_t code = getColInfoResultForGroupby(pHandle->meta, group, pTableListInfo); + code = getColInfoResultForGroupby(pHandle->meta, group, pTableListInfo); if (code != TSDB_CODE_SUCCESS) { return code; } + + if (groupSort) { + code = sortTableGroup(pTableListInfo); + } } - if (pTableListInfo->needSortTableByGroupId) { - return sortTableGroup(pTableListInfo); - } - - return TDB_CODE_SUCCESS; + return code; } static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pCond) { @@ -3505,6 +3563,12 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo if (QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN == type) { STableScanPhysiNode* pTableScanNode = (STableScanPhysiNode*)pPhyNode; + // NOTE: this is an patch to fix the physical plan + // TODO remove it later + if (pTableScanNode->scan.node.pLimit != NULL) { + pTableScanNode->groupSort = true; + } + int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); @@ -3563,8 +3627,10 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo int32_t sz = taosArrayGetSize(pTableListInfo->pTableList); for (int32_t i = 0; i < sz; i++) { STableKeyInfo* pKeyInfo = taosArrayGet(pTableListInfo->pTableList, i); - qDebug("creating stream task: add table %" PRId64, pKeyInfo->uid); + qDebug("creating stream task: add table uid:%" PRIu64, pKeyInfo->uid); } + + qDebug("table in hashmap, %d", (int32_t) getTotalTables(pTableListInfo)); #endif } @@ -3599,13 +3665,20 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo } SQueryTableDataCond cond = {0}; - int32_t code = initTableblockDistQueryCond(pBlockNode->suid, &cond); + + int32_t code = initTableblockDistQueryCond(pBlockNode->suid, &cond); if (code != TSDB_CODE_SUCCESS) { return NULL; } + size_t num = getTotalTables(pTableListInfo); + void* pList = NULL; + if (num > 0) { + pList = taosArrayGet(pTableListInfo->pTableList, 0); + } + STsdbReader* pReader = NULL; - tsdbReaderOpen(pHandle->vnode, &cond, pTableListInfo->pTableList, &pReader, ""); + tsdbReaderOpen(pHandle->vnode, &cond, pList, num, &pReader, ""); cleanupQueryTableDataCond(&cond); pOperator = createDataBlockInfoScanOperator(pReader, pHandle, cond.suid, pBlockNode, pTaskInfo); @@ -3639,7 +3712,8 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo return pOperator; } - size_t size = LIST_LENGTH(pPhyNode->pChildren); + size_t size = LIST_LENGTH(pPhyNode->pChildren); + SOperatorInfo** ops = taosMemoryCalloc(size, POINTER_BYTES); for (int32_t i = 0; i < size; ++i) { SPhysiNode* pChildNode = (SPhysiNode*)nodesListGetNode(pPhyNode->pChildren, i); @@ -3848,7 +3922,7 @@ int32_t encodeOperator(SOperatorInfo* ops, char** result, int32_t* length, int32 *length = *(int32_t*)(*result); } -_downstream: + _downstream: for (int32_t i = 0; i < ops->numOfDownstream; ++i) { code = encodeOperator(ops->pDownstream[i], result, length, nOptrWithVal); if (code != TDB_CODE_SUCCESS) { @@ -3968,35 +4042,17 @@ int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SRead return code; -_complete: + _complete: taosMemoryFree(sql); doDestroyTask(*pTaskInfo); terrno = code; return code; } -void doDestroyTableList(STableListInfo* pTableqinfoList) { - taosArrayDestroy(pTableqinfoList->pTableList); - taosHashCleanup(pTableqinfoList->map); - if (pTableqinfoList->needSortTableByGroupId) { - for (int32_t i = 0; i < taosArrayGetSize(pTableqinfoList->pGroupList); i++) { - SArray* tmp = taosArrayGetP(pTableqinfoList->pGroupList, i); - if (tmp == pTableqinfoList->pTableList) { - continue; - } - taosArrayDestroy(tmp); - } - } - taosArrayDestroy(pTableqinfoList->pGroupList); - - pTableqinfoList->pTableList = NULL; - pTableqinfoList->map = NULL; -} - void doDestroyTask(SExecTaskInfo* pTaskInfo) { qDebug("%s execTask is freed", GET_TASKID(pTaskInfo)); - doDestroyTableList(&pTaskInfo->tableqinfoList); + destroyTableList(&pTaskInfo->tableqinfoList); destroyOperatorInfo(pTaskInfo->pRoot); cleanupTableSchemaInfo(&pTaskInfo->schemaInfo); cleanupStreamInfo(&pTaskInfo->streamInfo); @@ -4125,8 +4181,8 @@ int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, SStreamState* pStat int32_t size = 0; void* pVal = NULL; SWinKey key = { - .ts = *(TSKEY*)pPos->key, - .groupId = pPos->groupId, + .ts = *(TSKEY*)pPos->key, + .groupId = pPos->groupId, }; int32_t code = streamStateGet(pState, &key, &pVal, &size); ASSERT(code == 0); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 9a61e555f0..a139809d8f 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -42,7 +42,7 @@ static int32_t buildDbTableInfoBlock(bool sysInfo, const SSDataBlock* p, const S static char* SYSTABLE_IDX_COLUMN[] = {"table_name", "db_name", "create_time", "columns", "ttl", "stable_name", "vgroup_id', 'uid", "type"}; -static char* SYSTABLE_SPECIAL_COL[] = {"db_name", "vgroup_id"}; +static char* SYSTABLE_IDX_EXCEPT[] = {"db_name", "vgroup_id"}; typedef int32_t (*__sys_filte)(void* pMeta, SNode* cond, SArray* result); typedef int32_t (*__sys_check)(SNode* cond); @@ -363,8 +363,7 @@ void applyLimitOffset(SLimitInfo* pLimitInfo, SSDataBlock* pBlock, SExecTaskInfo if (pLimitInfo->remainOffset >= pBlock->info.rows) { pLimitInfo->remainOffset -= pBlock->info.rows; pBlock->info.rows = 0; - qDebug("current block ignore due to offset, current:%" PRId64 ", %s", pLimitInfo->remainOffset, - GET_TASKID(pTaskInfo)); + qDebug("current block ignore due to offset, current:%"PRId64", %s", pLimitInfo->remainOffset, GET_TASKID(pTaskInfo)); } else { blockDataTrimFirstNRows(pBlock, pLimitInfo->remainOffset); pLimitInfo->remainOffset = 0; @@ -377,9 +376,7 @@ void applyLimitOffset(SLimitInfo* pLimitInfo, SSDataBlock* pBlock, SExecTaskInfo int32_t keep = pBlock->info.rows - overflowRows; blockDataKeepFirstNRows(pBlock, keep); - qDebug("output limit %" PRId64 " has reached, %s", pLimit->limit, GET_TASKID(pTaskInfo)); - - // setTaskStatus(pTaskInfo, TASK_COMPLETED); + qDebug("output limit %"PRId64" has reached, %s", pLimit->limit, GET_TASKID(pTaskInfo)); pOperator->status = OP_EXEC_DONE; } } @@ -680,10 +677,7 @@ static SSDataBlock* doTableScanGroup(SOperatorInfo* pOperator) { if (pTableScanInfo->scanTimes < pTableScanInfo->scanInfo.numOfAsc) { setTaskStatus(pTaskInfo, TASK_NOT_COMPLETED); pTableScanInfo->scanFlag = REPEAT_SCAN; - qDebug( - "%s start to repeat ascending order scan data SELECT last_row(*),hostname from cpu group by hostname;blocks " - "due to query func required", - GET_TASKID(pTaskInfo)); + qDebug("start to repeat ascending order scan data blocks due to query func required, %s", GET_TASKID(pTaskInfo)); // do prepare for the next round table scan operation tsdbReaderReset(pTableScanInfo->dataReader, &pTableScanInfo->cond); @@ -710,8 +704,7 @@ static SSDataBlock* doTableScanGroup(SOperatorInfo* pOperator) { setTaskStatus(pTaskInfo, TASK_NOT_COMPLETED); pTableScanInfo->scanFlag = REPEAT_SCAN; - qDebug("%s start to repeat descending order scan data blocks due to query func required", - GET_TASKID(pTaskInfo)); + qDebug("%s start to repeat descending order scan data blocks", GET_TASKID(pTaskInfo)); tsdbReaderReset(pTableScanInfo->dataReader, &pTableScanInfo->cond); } } @@ -724,7 +717,7 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { STableScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - // if scan table by table + // scan table one by one sequentially if (pInfo->scanMode == TABLE_SCAN__TABLE_ORDER) { int32_t numOfTables = taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList); @@ -741,57 +734,64 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { } STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, pInfo->currentTable); - tsdbSetTableId(pInfo->dataReader, pTableInfo->uid); + tsdbSetTableList(pInfo->dataReader, pTableInfo, 1); qDebug("set uid:%" PRIu64 " into scanner, total tables:%d, index:%d %s", pTableInfo->uid, numOfTables, pInfo->currentTable, pTaskInfo->id.str); tsdbReaderReset(pInfo->dataReader, &pInfo->cond); pInfo->scanTimes = 0; } - } + } else { // scan table group by group sequentially + if (pInfo->currentGroupId == -1) { + if ((++pInfo->currentGroupId) >= getNumOfOutputGroups(&pTaskInfo->tableqinfoList)) { + doSetOperatorCompleted(pOperator); + return NULL; + } - if (pInfo->currentGroupId == -1) { - pInfo->currentGroupId++; - if (pInfo->currentGroupId >= taosArrayGetSize(pTaskInfo->tableqinfoList.pGroupList)) { - setTaskStatus(pTaskInfo, TASK_COMPLETED); - return NULL; + int32_t num = 0; + STableKeyInfo* pList = NULL; + getTablesOfGroup(&pTaskInfo->tableqinfoList, pInfo->currentGroupId, &pList, &num); + ASSERT(pInfo->dataReader == NULL); + + int32_t code = tsdbReaderOpen(pInfo->readHandle.vnode, &pInfo->cond, pList, num, (STsdbReader**)&pInfo->dataReader, + GET_TASKID(pTaskInfo)); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } } + SSDataBlock* result = doTableScanGroup(pOperator); if (result != NULL) { ASSERT(result->info.uid != 0); return result; } - - int32_t code = tsdbReaderOpen(pInfo->readHandle.vnode, &pInfo->cond, tableList, (STsdbReader**)&pInfo->dataReader, - GET_TASKID(pTaskInfo)); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); + if ((++pInfo->currentGroupId) >= getNumOfOutputGroups(&pTaskInfo->tableqinfoList)) { + doSetOperatorCompleted(pOperator); return NULL; } - } - SSDataBlock* result = doTableScanGroup(pOperator); - if (result) { - return result; - } + // reset value for the next group data output + pOperator->status = OP_OPENED; + pInfo->limitInfo.numOfOutputRows = 0; + pInfo->limitInfo.remainOffset = pInfo->limitInfo.limit.offset; - pInfo->currentGroupId++; - if (pInfo->currentGroupId >= taosArrayGetSize(pTaskInfo->tableqinfoList.pGroupList)) { - setTaskStatus(pTaskInfo, TASK_COMPLETED); + int32_t num = 0; + STableKeyInfo* pList = NULL; + getTablesOfGroup(&pTaskInfo->tableqinfoList, pInfo->currentGroupId, &pList, &num); + + tsdbSetTableList(pInfo->dataReader, pList, num); + tsdbReaderReset(pInfo->dataReader, &pInfo->cond); + pInfo->scanTimes = 0; + + result = doTableScanGroup(pOperator); + if (result != NULL) { + return result; + } + + doSetOperatorCompleted(pOperator); return NULL; } - - tsdbReaderReset(pInfo->dataReader, &pInfo->cond); - pInfo->scanTimes = 0; - - result = doTableScanGroup(pOperator); - if (result) { - return result; - } - - setTaskStatus(pTaskInfo, TASK_COMPLETED); - return NULL; } static int32_t getTableScannerExecInfo(struct SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { @@ -819,8 +819,8 @@ static void destroyTableScanOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, - SExecTaskInfo* pTaskInfo) { +SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, + SExecTaskInfo* pTaskInfo) { STableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -837,7 +837,6 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, } initLimitInfo(pTableScanNode->scan.node.pLimit, pTableScanNode->scan.node.pSlimit, &pInfo->limitInfo); - code = initQueryTableDataCond(&pInfo->cond, pTableScanNode); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -885,7 +884,7 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, pOperator->cost.openCost = 0; return pOperator; -_error: + _error: if (pInfo != NULL) { destroyTableScanOperatorInfo(pInfo); } @@ -1033,7 +1032,7 @@ SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* re createOperatorFpSet(operatorDummyOpenFn, doBlockInfoScan, NULL, NULL, destroyBlockDistScanOperatorInfo, NULL); return pOperator; -_error: + _error: taosMemoryFreeClear(pInfo); taosMemoryFreeClear(pOperator); return NULL; @@ -1077,39 +1076,55 @@ void resetTableScanInfo(STableScanInfo* pTableScanInfo, STimeWindow* pWin) { pTableScanInfo->cond.twindows = *pWin; pTableScanInfo->scanTimes = 0; pTableScanInfo->currentGroupId = -1; -} - -static void freeArray(void* array) { taosArrayDestroy(array); } - -static void resetTableScanOperator(SOperatorInfo* pTableScanOp) { - STableScanInfo* pTableScanInfo = pTableScanOp->info; - pTableScanInfo->cond.startVersion = -1; - pTableScanInfo->cond.endVersion = -1; - SArray* gpTbls = pTableScanOp->pTaskInfo->tableqinfoList.pGroupList; - SArray* allTbls = pTableScanOp->pTaskInfo->tableqinfoList.pTableList; - taosArrayClearP(gpTbls, freeArray); - taosArrayPush(gpTbls, &allTbls); - STimeWindow win = {.skey = INT64_MIN, .ekey = INT64_MAX}; - resetTableScanInfo(pTableScanOp->info, &win); + tsdbReaderClose(pTableScanInfo->dataReader); + pTableScanInfo->dataReader = NULL; } static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbUid, TSKEY startTs, TSKEY endTs, int64_t maxVersion) { - SArray* gpTbls = pTableScanOp->pTaskInfo->tableqinfoList.pGroupList; - taosArrayClear(gpTbls); STableKeyInfo tblInfo = {.uid = tbUid, .groupId = 0}; - SArray* tbls = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(tbls, &tblInfo); - taosArrayPush(gpTbls, &tbls); - STimeWindow win = {.skey = startTs, .ekey = endTs}; - STableScanInfo* pTableScanInfo = pTableScanOp->info; - pTableScanInfo->cond.startVersion = -1; - pTableScanInfo->cond.endVersion = maxVersion; - resetTableScanInfo(pTableScanOp->info, &win); - SSDataBlock* pRes = doTableScan(pTableScanOp); - resetTableScanOperator(pTableScanOp); - return pRes; + STableScanInfo* pTableScanInfo = pTableScanOp->info; + SQueryTableDataCond cond = pTableScanInfo->cond; + + cond.startVersion = -1; + cond.endVersion = maxVersion; + cond.twindows = (STimeWindow){.skey = startTs, .ekey = endTs}; + + SExecTaskInfo* pTaskInfo = pTableScanOp->pTaskInfo; + + SSDataBlock* pBlock = pTableScanInfo->pResBlock; + blockDataCleanup(pBlock); + + STsdbReader* pReader = NULL; + int32_t code = tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &cond, &tblInfo, 1, (STsdbReader**)&pReader, + GET_TASKID(pTaskInfo)); + if (code != TSDB_CODE_SUCCESS) { + terrno = code; + return NULL; + } + + bool hasBlock = tsdbNextDataBlock(pReader); + if (hasBlock) { + SDataBlockInfo binfo = {0}; + tsdbRetrieveDataBlockInfo(pReader, &binfo); + + SArray* pCols = tsdbRetrieveDataBlock(pReader, NULL); + blockDataEnsureCapacity(pBlock, binfo.rows); + + pBlock->info.window = binfo.window; + pBlock->info.uid = binfo.uid; + pBlock->info.rows = binfo.rows; + + relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); + doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo); + } + + tsdbReaderClose(pReader); + qDebug("retrieve prev rows:%d, skey:%" PRId64 ", ekey:%" PRId64 " uid:%" PRIu64 ", max ver:%" PRId64 + ", suid:%" PRIu64, pBlock->info.rows, startTs, endTs, tbUid, maxVersion, cond.suid); + + return pBlock->info.rows > 0 ? pBlock : NULL; } static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, int64_t maxVersion) { @@ -1300,9 +1315,6 @@ static int32_t generateSessionScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSr SSessionKey startWin = {0}; getCurSessionWindow(pInfo->windowSup.pStreamAggSup, startData[i], endData[i], groupId, &startWin); if (IS_INVALID_SESSION_WIN_KEY(startWin)) { - // char* tmp = streamStateSessionDump(pInfo->windowSup.pStreamAggSup->pState); - // qInfo("%s", tmp); - // taosMemoryFree(tmp); // window has been closed. continue; } @@ -1699,7 +1711,7 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { } } #if 0 - } else if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) { + } else if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) { SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp); if (pResult && pResult->info.rows > 0) { qDebug("stream scan tsdb return %d rows", pResult->info.rows); @@ -1847,7 +1859,7 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { size_t total = taosArrayGetSize(pInfo->pBlockLists); // TODO: refactor -FETCH_NEXT_BLOCK: + FETCH_NEXT_BLOCK: if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) { if (pInfo->validBlockIndex >= total) { doClearBufferedBlocks(pInfo); @@ -1974,7 +1986,7 @@ FETCH_NEXT_BLOCK: int32_t totBlockNum = taosArrayGetSize(pInfo->pBlockLists); - NEXT_SUBMIT_BLK: + NEXT_SUBMIT_BLK: while (1) { if (pInfo->tqReader->pMsg == NULL) { if (pInfo->validBlockIndex >= totBlockNum) { @@ -2229,7 +2241,7 @@ SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pT pOperator->fpSet = createOperatorFpSet(NULL, doRawScan, NULL, NULL, destroyRawScanOperatorInfo, NULL); return pOperator; -_end: + _end: taosMemoryFree(pInfo); taosMemoryFree(pOperator); pTaskInfo->code = code; @@ -2335,11 +2347,14 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pTSInfo->cond.endVersion = pHandle->version; } - SArray* tableList = taosArrayGetP(pTaskInfo->tableqinfoList.pGroupList, 0); + STableKeyInfo* pList = NULL; + int32_t num = 0; + getTablesOfGroup(&pTaskInfo->tableqinfoList, 0, &pList, &num); + if (pHandle->initTableReader) { pTSInfo->scanMode = TABLE_SCAN__TABLE_ORDER; pTSInfo->dataReader = NULL; - if (tsdbReaderOpen(pHandle->vnode, &pTSInfo->cond, tableList, &pTSInfo->dataReader, NULL) < 0) { + if (tsdbReaderOpen(pHandle->vnode, &pTSInfo->cond, pList, num, &pTSInfo->dataReader, NULL) < 0) { terrno = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -2367,7 +2382,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys // set the extract column id to streamHandle tqReaderSetColIdList(pInfo->tqReader, pColIds); SArray* tableIdList = extractTableIdList(&pTaskInfo->tableqinfoList); - int32_t code = tqReaderSetTbUidList(pInfo->tqReader, tableIdList); + code = tqReaderSetTbUidList(pInfo->tqReader, tableIdList); if (code != 0) { taosArrayDestroy(tableIdList); goto _error; @@ -2411,7 +2426,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys return pOperator; -_error: + _error: if (pColIds != NULL) { taosArrayDestroy(pColIds); } @@ -3035,11 +3050,11 @@ static int32_t sysFilte__TableName(void* arg, SNode* pNode, SArray* result) { if (func == NULL) return -1; SMetaFltParam param = {.suid = 0, - .cid = 0, - .type = TSDB_DATA_TYPE_VARCHAR, - .val = pVal->datum.p, - .reverse = reverse, - .filterFunc = func}; + .cid = 0, + .type = TSDB_DATA_TYPE_VARCHAR, + .val = pVal->datum.p, + .reverse = reverse, + .filterFunc = func}; return -1; } @@ -3054,11 +3069,11 @@ static int32_t sysFilte__CreateTime(void* arg, SNode* pNode, SArray* result) { if (func == NULL) return -1; SMetaFltParam param = {.suid = 0, - .cid = 0, - .type = TSDB_DATA_TYPE_BIGINT, - .val = &pVal->datum.i, - .reverse = reverse, - .filterFunc = func}; + .cid = 0, + .type = TSDB_DATA_TYPE_BIGINT, + .val = &pVal->datum.i, + .reverse = reverse, + .filterFunc = func}; int32_t ret = metaFilterCreateTime(pMeta, ¶m, result); return ret; @@ -3252,80 +3267,18 @@ static int tableUidCompare(const void* a, const void* b) { } return u1 < u2 ? -1 : 1; } - -typedef struct MergeIndex { - int idx; - int len; -} MergeIndex; - -static FORCE_INLINE int optSysBinarySearch(SArray* arr, int s, int e, uint64_t k) { - uint64_t v; - int32_t m; - while (s <= e) { - m = s + (e - s) / 2; - v = *(uint64_t*)taosArrayGet(arr, m); - if (v >= k) { - e = m - 1; - } else { - s = m + 1; - } - } - return s; -} - -void optSysIntersection(SArray* in, SArray* out) { - int32_t sz = (int32_t)taosArrayGetSize(in); - if (sz <= 0) { - return; - } - MergeIndex* mi = taosMemoryCalloc(sz, sizeof(MergeIndex)); - for (int i = 0; i < sz; i++) { - SArray* t = taosArrayGetP(in, i); - mi[i].len = (int32_t)taosArrayGetSize(t); - mi[i].idx = 0; - } - - SArray* base = taosArrayGetP(in, 0); - for (int i = 0; i < taosArrayGetSize(base); i++) { - uint64_t tgt = *(uint64_t*)taosArrayGet(base, i); - bool has = true; - for (int j = 1; j < taosArrayGetSize(in); j++) { - SArray* oth = taosArrayGetP(in, j); - int mid = optSysBinarySearch(oth, mi[j].idx, mi[j].len - 1, tgt); - if (mid >= 0 && mid < mi[j].len) { - uint64_t val = *(uint64_t*)taosArrayGet(oth, mid); - has = (val == tgt ? true : false); - mi[j].idx = mid; - } else { - has = false; - } - } - if (has == true) { - taosArrayPush(out, &tgt); - } - } - taosMemoryFreeClear(mi); -} - static int32_t optSysMergeRslt(SArray* mRslt, SArray* rslt) { // TODO, find comm mem from mRslt for (int i = 0; i < taosArrayGetSize(mRslt); i++) { - SArray* arslt = taosArrayGetP(mRslt, i); - taosArraySort(arslt, tableUidCompare); - } - optSysIntersection(mRslt, rslt); - return 0; -} -static int32_t optSysSpecialColumn(SNode* cond) { - SOperatorNode* pOper = (SOperatorNode*)cond; - SColumnNode* pCol = (SColumnNode*)pOper->pLeft; - for (int i = 0; i < sizeof(SYSTABLE_SPECIAL_COL) / sizeof(SYSTABLE_SPECIAL_COL[0]); i++) { - if (0 == strcmp(pCol->colName, SYSTABLE_SPECIAL_COL[i])) { - return 1; - } + SArray* aRslt = taosArrayGetP(mRslt, i); + taosArrayAddAll(rslt, aRslt); } + taosArraySort(rslt, tableUidCompare); + taosArrayRemoveDuplicate(rslt, tableUidCompare, NULL); + return 0; } + static int32_t optSysTabFilte(void* arg, SNode* cond, SArray* result) { int ret = -1; if (nodeType(cond) == QUERY_NODE_OPERATOR) { @@ -3349,6 +3302,7 @@ static int32_t optSysTabFilte(void* arg, SNode* cond, SArray* result) { SNodeList* pList = (SNodeList*)pNode->pParameterList; int32_t len = LIST_LENGTH(pList); + if (len <= 0) return ret; bool hasIdx = false; bool hasRslt = true; @@ -3359,16 +3313,12 @@ static int32_t optSysTabFilte(void* arg, SNode* cond, SArray* result) { if (cell == NULL) break; SArray* aRslt = taosArrayInit(16, sizeof(int64_t)); + ret = optSysTabFilteImpl(arg, cell->pNode, aRslt); if (ret == 0) { // has index hasIdx = true; - if (optSysSpecialColumn(cell->pNode) == 0) { - taosArrayPush(mRslt, &aRslt); - } else { - // db_name/vgroup not result - taosArrayDestroy(aRslt); - } + taosArrayPush(mRslt, &aRslt); } else if (ret == -2) { // current vg hasIdx = true; @@ -4043,7 +3993,7 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScan return pOperator; -_error: + _error: taosMemoryFreeClear(pInfo); taosMemoryFreeClear(pOperator); terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; @@ -4153,6 +4103,9 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi SExprInfo* pExprInfo = createExprInfo(pPhyNode->pScanPseudoCols, NULL, &numOfExprs); int32_t code = extractColMatchInfo(pPhyNode->pScanPseudoCols, pDescNode, &num, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } code = initExprSupp(&pOperator->exprSupp, pExprInfo, numOfExprs); if (code != TSDB_CODE_SUCCESS) { @@ -4179,7 +4132,7 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi return pOperator; -_error: + _error: taosMemoryFree(pInfo); taosMemoryFree(pOperator); terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -4210,8 +4163,8 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags return TSDB_CODE_SUCCESS; } - pTableListInfo->needSortTableByGroupId = groupSort; - code = generateGroupIdMap(pTableListInfo, pHandle, pGroupTags); + pTableListInfo->numOfOuputGroups = 1; + code = generateGroupIdMap(pTableListInfo, pHandle, pGroupTags, groupSort); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -4225,144 +4178,15 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags int32_t createMultipleDataReaders(SQueryTableDataCond* pQueryCond, SReadHandle* pHandle, STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, SArray* arrayReader, const char* idstr) { for (int32_t i = tableStartIdx; i <= tableEndIdx; ++i) { - SArray* subTableList = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(subTableList, taosArrayGet(pTableListInfo->pTableList, i)); - - STsdbReader* pReader = NULL; - tsdbReaderOpen(pHandle->vnode, pQueryCond, subTableList, &pReader, idstr); + STableKeyInfo* pList = taosArrayGet(pTableListInfo->pTableList, i); + STsdbReader* pReader = NULL; + tsdbReaderOpen(pHandle->vnode, pQueryCond, pList, 1, &pReader, idstr); taosArrayPush(arrayReader, &pReader); - - taosArrayDestroy(subTableList); } return TSDB_CODE_SUCCESS; } -int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* pHandle, - STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, - STsdbReader** ppReader, const char* idstr) { - STsdbReader* pReader = NULL; - SArray* subTableList = taosArrayInit(1, sizeof(STableKeyInfo)); - for (int32_t i = tableStartIdx; i <= tableEndIdx; ++i) { - taosArrayPush(subTableList, taosArrayGet(pTableListInfo->pTableList, i)); - } - int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, subTableList, &pReader, idstr); - if (code != 0) { - taosArrayDestroy(subTableList); - return code; - } - *ppReader = pReader; - return TSDB_CODE_SUCCESS; -} - -static int32_t loadDataBlockFromOneTable2(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, - SSDataBlock* pBlock, uint32_t* status) { - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - STableMergeScanInfo* pInfo = pOperator->info; - - uint64_t uid = pBlock->info.uid; - - SFileBlockLoadRecorder* pCost = &pTableScanInfo->readRecorder; - - pCost->totalBlocks += 1; - pCost->totalRows += pBlock->info.rows; - - *status = pInfo->dataBlockLoadFlag; - if (pTableScanInfo->pFilterNode != NULL || - overlapWithTimeWindow(&pTableScanInfo->interval, &pBlock->info, pTableScanInfo->cond.order)) { - (*status) = FUNC_DATA_REQUIRED_DATA_LOAD; - } - - SDataBlockInfo* pBlockInfo = &pBlock->info; - taosMemoryFreeClear(pBlock->pBlockAgg); - - if (*status == FUNC_DATA_REQUIRED_FILTEROUT) { - qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), - pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); - pCost->filterOutBlocks += 1; - return TSDB_CODE_SUCCESS; - } else if (*status == FUNC_DATA_REQUIRED_NOT_LOAD) { - qDebug("%s data block skipped, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), - pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); - pCost->skipBlocks += 1; - - // clear all data in pBlock that are set when handing the previous block - for (int32_t i = 0; i < taosArrayGetSize(pBlock->pDataBlock); ++i) { - SColumnInfoData* pcol = taosArrayGet(pBlock->pDataBlock, i); - pcol->pData = NULL; - } - - return TSDB_CODE_SUCCESS; - } else if (*status == FUNC_DATA_REQUIRED_STATIS_LOAD) { - pCost->loadBlockStatis += 1; - - bool allColumnsHaveAgg = true; - SColumnDataAgg** pColAgg = NULL; - STsdbReader* reader = pTableScanInfo->pReader; - tsdbRetrieveDatablockSMA(reader, &pColAgg, &allColumnsHaveAgg); - - if (allColumnsHaveAgg == true) { - int32_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); - - // todo create this buffer during creating operator - if (pBlock->pBlockAgg == NULL) { - pBlock->pBlockAgg = taosMemoryCalloc(numOfCols, POINTER_BYTES); - } - - for (int32_t i = 0; i < numOfCols; ++i) { - SColMatchItem* pColMatchInfo = taosArrayGet(pTableScanInfo->matchInfo.pList, i); - if (!pColMatchInfo->needOutput) { - continue; - } - pBlock->pBlockAgg[pColMatchInfo->dstSlotId] = pColAgg[i]; - } - - return TSDB_CODE_SUCCESS; - } else { // failed to load the block sma data, data block statistics does not exist, load data block instead - *status = FUNC_DATA_REQUIRED_DATA_LOAD; - } - } - - ASSERT(*status == FUNC_DATA_REQUIRED_DATA_LOAD); - - pCost->totalCheckedRows += pBlock->info.rows; - pCost->loadBlocks += 1; - - STsdbReader* reader = pTableScanInfo->pReader; - SArray* pCols = tsdbRetrieveDataBlock(reader, NULL); - if (pCols == NULL) { - return terrno; - } - - relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); - - // currently only the tbname pseudo column - if (pTableScanInfo->pseudoSup.numOfExprs > 0) { - int32_t code = addTagPseudoColumnData(&pTableScanInfo->readHandle, pTableScanInfo->pseudoSup.pExprInfo, - pTableScanInfo->pseudoSup.numOfExprs, pBlock, GET_TASKID(pTaskInfo)); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } - } - - if (pTableScanInfo->pFilterNode != NULL) { - int64_t st = taosGetTimestampMs(); - doFilter(pTableScanInfo->pFilterNode, pBlock, &pTableScanInfo->matchInfo, NULL); - - double el = (taosGetTimestampUs() - st) / 1000.0; - pTableScanInfo->readRecorder.filterTime += el; - - if (pBlock->info.rows == 0) { - pCost->filterOutBlocks += 1; - qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d, elapsed time:%.2f ms", - GET_TASKID(pTaskInfo), pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows, el); - } else { - qDebug("%s data block filter applied, elapsed time:%.2f ms", GET_TASKID(pTaskInfo), el); - } - } - return TSDB_CODE_SUCCESS; -} - // todo refactor static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, int32_t readerIdx, SSDataBlock* pBlock, uint32_t* status) { @@ -4446,7 +4270,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc pCost->totalCheckedRows += pBlock->info.rows; pCost->loadBlocks += 1; - STsdbReader* reader = pTableScanInfo->pReader; // taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); + STsdbReader* reader = taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); SArray* pCols = tsdbRetrieveDataBlock(reader, NULL); if (pCols == NULL) { return terrno; @@ -4485,143 +4309,9 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc typedef struct STableMergeScanSortSourceParam { SOperatorInfo* pOperator; int32_t readerIdx; - int64_t uid; SSDataBlock* inputBlock; } STableMergeScanSortSourceParam; -static SSDataBlock* getTableDataBlockTemp(void* param) { - STableMergeScanSortSourceParam* source = param; - SOperatorInfo* pOperator = source->pOperator; - STableMergeScanInfo* pInfo = pOperator->info; - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - int32_t readIdx = source->readerIdx; - SSDataBlock* pBlock = source->inputBlock; - STableMergeScanInfo* pTableScanInfo = pOperator->info; - - SQueryTableDataCond* pQueryCond = taosArrayGet(pTableScanInfo->queryConds, readIdx); - - blockDataCleanup(pBlock); - - int64_t st = taosGetTimestampUs(); - - SArray* subTable = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(subTable, taosArrayGet(pInfo->tableListInfo->pTableList, readIdx + pInfo->tableStartIndex)); - SReadHandle* pHandle = &pInfo->readHandle; - tsdbReaderOpen(pHandle->vnode, pQueryCond, subTable, &pInfo->pReader, GET_TASKID(pTaskInfo)); - taosArrayDestroy(subTable); - - STsdbReader* reader = pInfo->pReader; - while (tsdbNextDataBlock(reader)) { - if (isTaskKilled(pOperator->pTaskInfo)) { - T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); - } - - // process this data block based on the probabilities - bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); - if (!processThisBlock) { - continue; - } - - blockDataCleanup(pBlock); - SDataBlockInfo binfo = pBlock->info; - tsdbRetrieveDataBlockInfo(reader, &binfo); - - blockDataEnsureCapacity(pBlock, binfo.rows); - pBlock->info.type = binfo.type; - pBlock->info.uid = binfo.uid; - pBlock->info.window = binfo.window; - pBlock->info.rows = binfo.rows; - - if (tsdbIsAscendingOrder(pInfo->pReader)) { - pQueryCond->twindows.skey = pBlock->info.window.ekey + 1; - } else { - pQueryCond->twindows.ekey = pBlock->info.window.skey - 1; - } - - uint32_t status = 0; - int32_t code = loadDataBlockFromOneTable(pOperator, pTableScanInfo, readIdx, pBlock, &status); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pOperator->pTaskInfo->env, code); - } - - // current block is filter out according to filter condition, continue load the next block - if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { - continue; - } - - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - - pOperator->resultInfo.totalRows += pBlock->info.rows; // pTableScanInfo->readRecorder.totalRows; - pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; - - tsdbReaderClose(pInfo->pReader); - pInfo->pReader = NULL; - return pBlock; - } - tsdbReaderClose(pInfo->pReader); - pInfo->pReader = NULL; - return NULL; -} -static SSDataBlock* getTableDataBlock2(void* param) { - STableMergeScanSortSourceParam* source = param; - SOperatorInfo* pOperator = source->pOperator; - int64_t uid = source->uid; - SSDataBlock* pBlock = source->inputBlock; - STableMergeScanInfo* pTableScanInfo = pOperator->info; - - int64_t st = taosGetTimestampUs(); - - blockDataCleanup(pBlock); - - STsdbReader* reader = pTableScanInfo->pReader; - while (tsdbTableNextDataBlock(reader, uid)) { - if (isTaskKilled(pOperator->pTaskInfo)) { - T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); - } - - // process this data block based on the probabilities - bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); - if (!processThisBlock) { - continue; - } - - blockDataCleanup(pBlock); - SDataBlockInfo binfo = pBlock->info; - tsdbRetrieveDataBlockInfo(reader, &binfo); - - blockDataEnsureCapacity(pBlock, binfo.rows); - pBlock->info.type = binfo.type; - pBlock->info.uid = binfo.uid; - pBlock->info.window = binfo.window; - pBlock->info.rows = binfo.rows; - - uint32_t status = 0; - int32_t code = loadDataBlockFromOneTable2(pOperator, pTableScanInfo, pBlock, &status); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pOperator->pTaskInfo->env, code); - } - - // current block is filter out according to filter condition, continue load the next block - if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { - continue; - } - - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - - pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; - pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; - - return pBlock; - } - return NULL; -} - static SSDataBlock* getTableDataBlock(void* param) { STableMergeScanSortSourceParam* source = param; SOperatorInfo* pOperator = source->pOperator; @@ -4657,6 +4347,7 @@ static SSDataBlock* getTableDataBlock(void* param) { uint32_t status = 0; int32_t code = loadDataBlockFromOneTable(pOperator, pTableScanInfo, readerIdx, pBlock, &status); + // int32_t code = loadDataBlockOnDemand(pOperator->pRuntimeEnv, pTableScanInfo, pBlock, &status); if (code != TSDB_CODE_SUCCESS) { T_LONG_JMP(pOperator->pTaskInfo->env, code); } @@ -4699,14 +4390,6 @@ SArray* generateSortByTsInfo(SArray* colMatchInfo, int32_t order) { return pList; } -int32_t dumpSQueryTableCond(const SQueryTableDataCond* src, SQueryTableDataCond* dst) { - memcpy((void*)dst, (void*)src, sizeof(SQueryTableDataCond)); - dst->colList = taosMemoryCalloc(src->numOfCols, sizeof(SColumnInfo)); - for (int i = 0; i < src->numOfCols; i++) { - dst->colList[i] = src->colList[i]; - } - return 0; -} int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { STableMergeScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -4727,9 +4410,10 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { int32_t tableEndIdx = pInfo->tableEndIndex; STableListInfo* tableListInfo = pInfo->tableListInfo; + pInfo->dataReaders = taosArrayInit(64, POINTER_BYTES); + createMultipleDataReaders(&pInfo->cond, &pInfo->readHandle, tableListInfo, tableStartIdx, tableEndIdx, + pInfo->dataReaders, GET_TASKID(pTaskInfo)); - // pInfo->dataReaders = taosArrayInit(64, POINTER_BYTES); - pInfo->pReader = NULL; // todo the total available buffer should be determined by total capacity of buffer of this task. // the additional one is reserved for merge result pInfo->sortBufSize = pInfo->bufPageSize * (tableEndIdx - tableStartIdx + 1 + 1); @@ -4737,27 +4421,18 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { pInfo->pSortHandle = tsortCreateSortHandle(pInfo->pSortInfo, SORT_MULTISOURCE_MERGE, pInfo->bufPageSize, numOfBufPage, pInfo->pSortInputBlock, pTaskInfo->id.str); - tsortSetFetchRawDataFp(pInfo->pSortHandle, getTableDataBlockTemp, NULL, NULL); - - // one table has one data block - int32_t numOfTable = tableEndIdx - tableStartIdx + 1; - pInfo->queryConds = taosArrayInit(numOfTable, sizeof(SQueryTableDataCond)); - - for (int32_t i = 0; i < numOfTable; ++i) { - STableKeyInfo* tableKeyInfo = taosArrayGet(pInfo->tableListInfo->pTableList, i + tableStartIdx); + tsortSetFetchRawDataFp(pInfo->pSortHandle, getTableDataBlock, NULL, NULL); + size_t numReaders = taosArrayGetSize(pInfo->dataReaders); + for (int32_t i = 0; i < numReaders; ++i) { STableMergeScanSortSourceParam param = {0}; param.readerIdx = i; param.pOperator = pOperator; param.inputBlock = createOneDataBlock(pInfo->pResBlock, false); taosArrayPush(pInfo->sortSourceParams, ¶m); - - SQueryTableDataCond cond; - dumpSQueryTableCond(&pInfo->cond, &cond); - taosArrayPush(pInfo->queryConds, &cond); } - for (int32_t i = 0; i < numOfTable; ++i) { + for (int32_t i = 0; i < numReaders; ++i) { SSortSource* ps = taosMemoryCalloc(1, sizeof(SSortSource)); STableMergeScanSortSourceParam* param = taosArrayGet(pInfo->sortSourceParams, i); ps->param = param; @@ -4777,7 +4452,7 @@ int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { STableMergeScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - int32_t numOfTable = taosArrayGetSize(pInfo->queryConds); + size_t numReaders = taosArrayGetSize(pInfo->dataReaders); SSortExecInfo sortExecInfo = tsortGetSortExecInfo(pInfo->pSortHandle); pInfo->sortExecInfo.sortMethod = sortExecInfo.sortMethod; @@ -4786,7 +4461,7 @@ int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { pInfo->sortExecInfo.readBytes += sortExecInfo.readBytes; pInfo->sortExecInfo.writeBytes += sortExecInfo.writeBytes; - for (int32_t i = 0; i < numOfTable; ++i) { + for (int32_t i = 0; i < numReaders; ++i) { STableMergeScanSortSourceParam* param = taosArrayGet(pInfo->sortSourceParams, i); blockDataDestroy(param->inputBlock); } @@ -4794,13 +4469,12 @@ int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { tsortDestroySortHandle(pInfo->pSortHandle); - for (int32_t i = 0; i < taosArrayGetSize(pInfo->queryConds); i++) { - SQueryTableDataCond* cond = taosArrayGet(pInfo->queryConds, i); - taosMemoryFree(cond->colList); + for (int32_t i = 0; i < numReaders; ++i) { + STsdbReader* reader = taosArrayGetP(pInfo->dataReaders, i); + tsdbReaderClose(reader); } - taosArrayDestroy(pInfo->queryConds); - pInfo->queryConds = NULL; - + taosArrayDestroy(pInfo->dataReaders); + pInfo->dataReaders = NULL; return TSDB_CODE_SUCCESS; } @@ -4884,23 +4558,13 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { void destroyTableMergeScanOperatorInfo(void* param) { STableMergeScanInfo* pTableScanInfo = (STableMergeScanInfo*)param; cleanupQueryTableDataCond(&pTableScanInfo->cond); - - int32_t numOfTable = taosArrayGetSize(pTableScanInfo->queryConds); - - for (int32_t i = 0; i < numOfTable; i++) { - STableMergeScanSortSourceParam* param = taosArrayGet(pTableScanInfo->sortSourceParams, i); - blockDataDestroy(param->inputBlock); - } taosArrayDestroy(pTableScanInfo->sortSourceParams); - tsdbReaderClose(pTableScanInfo->pReader); - pTableScanInfo->pReader = NULL; - - for (int i = 0; i < taosArrayGetSize(pTableScanInfo->queryConds); i++) { - SQueryTableDataCond* pCond = taosArrayGet(pTableScanInfo->queryConds, i); - taosMemoryFree(pCond->colList); + for (int32_t i = 0; i < taosArrayGetSize(pTableScanInfo->dataReaders); ++i) { + STsdbReader* reader = taosArrayGetP(pTableScanInfo->dataReaders, i); + tsdbReaderClose(reader); } - taosArrayDestroy(pTableScanInfo->queryConds); + taosArrayDestroy(pTableScanInfo->dataReaders); if (pTableScanInfo->matchInfo.pList != NULL) { taosArrayDestroy(pTableScanInfo->matchInfo.pList); @@ -5012,7 +4676,7 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN pOperator->cost.openCost = 0; return pOperator; -_error: + _error: pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; taosMemoryFree(pInfo); taosMemoryFree(pOperator); From 4fdc98d3fb4987fc87e67cb34fff943ca70589ef Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 28 Oct 2022 22:15:06 +0800 Subject: [PATCH 21/81] opt http module --- source/libs/transport/src/thttp.c | 92 ++++++++++++++++++++++++++-- source/libs/transport/src/transCli.c | 30 +-------- 2 files changed, 91 insertions(+), 31 deletions(-) diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c index 92989a45f5..6715290acf 100644 --- a/source/libs/transport/src/thttp.c +++ b/source/libs/transport/src/thttp.c @@ -20,11 +20,80 @@ #include "thttp.h" #include "taoserror.h" #include "tlog.h" +#include "transComm.h" // clang-format on #define HTTP_RECV_BUF_SIZE 1024 +typedef struct SHttpModule { + uv_loop_t* loop; + SAsyncPool* asyncPool; + TdThread thread; +} SHttpModule; + +typedef struct SHttpMsg { + queue q; + char* server; + int32_t port; + char* cont; + int32_t len; + EHttpCompFlag flag; + +} SHttpMsg; + +static TdThreadOnce transHttpInit = PTHREAD_ONCE_INIT; +static SHttpModule* http = NULL; + +static void* httpThread(void* arg) { + SHttpModule* http = (SHttpModule*)arg; + setThreadName("http-cli-send-thread"); + uv_run(http->loop, UV_RUN_DEFAULT); + return NULL; +} + +static void httpAsyncCb(uv_async_t* handle) { + SAsyncItem* item = handle->data; + SHttpModule* http = item->pThrd; + + SHttpMsg* msg = NULL; + + queue wq; + taosThreadMutexLock(&item->mtx); + QUEUE_MOVE(&item->qmsg, &wq); + taosThreadMutexUnlock(&item->mtx); + + int count = 0; + while (!QUEUE_IS_EMPTY(&wq)) { + queue* h = QUEUE_HEAD(&wq); + QUEUE_REMOVE(h); + msg = QUEUE_DATA(h, SHttpMsg, q); + } +} + +static void transHttpEnvInit() { + http = taosMemoryMalloc(sizeof(SHttpModule)); + + http->loop = taosMemoryMalloc(sizeof(uv_loop_t)); + uv_loop_init(http->loop); + + http->asyncPool = transAsyncPoolCreate(http->loop, 1, http, httpAsyncCb); + + int err = taosThreadCreate(&http->thread, NULL, httpThread, (void*)http); + if (err != 0) { + taosMemoryFree(http->loop); + taosMemoryFree(http); + http = NULL; + } +} +static void transHttpEnvDestroy() { + if (http == NULL) return; + + transAsyncPoolDestroy(http->asyncPool); + taosMemoryFree(http->loop); + taosMemoryFree(http); +} + typedef struct SHttpClient { uv_connect_t conn; uv_tcp_t tcp; @@ -127,6 +196,8 @@ _OVER: } static FORCE_INLINE void destroyHttpClient(SHttpClient* cli) { + taosMemoryFree(cli->wbuf[0].base); + taosMemoryFree(cli->wbuf[1].base); taosMemoryFree(cli->wbuf); taosMemoryFree(cli->rbuf); taosMemoryFree(cli->addr); @@ -230,12 +301,13 @@ int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32 } terrno = 0; - char header[2048] = {0}; - int32_t headLen = taosBuildHttpHeader(server, contLen, header, sizeof(header), flag); + int32_t len = 2048; + char* header = taosMemoryCalloc(1, len); + int32_t headLen = taosBuildHttpHeader(server, contLen, header, len, flag); uv_buf_t* wb = taosMemoryCalloc(2, sizeof(uv_buf_t)); - wb[0] = uv_buf_init((char*)header, headLen); // stack var - wb[1] = uv_buf_init((char*)pCont, contLen); // heap var + wb[0] = uv_buf_init((char*)header, strlen(header)); // heap var + wb[1] = uv_buf_init((char*)pCont, contLen); // heap var SHttpClient* cli = taosMemoryCalloc(1, sizeof(SHttpClient)); cli->conn.data = cli; @@ -281,3 +353,15 @@ int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32 taosMemoryFree(loop); return terrno; } +int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { + SHttpMsg* msg = taosMemoryMalloc(sizeof(SHttpMsg)); + + msg->server = strdup(server); + msg->port = port; + msg->cont = taosMemoryMalloc(contLen); + memcpy(msg->cont, pCont, contLen); + msg->flag = flag; + + transAsyncSend(http->asyncPool, &(msg->q)); + return 0; +} diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index 28660934f8..97915e1ded 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -187,18 +187,8 @@ static void cliReleaseUnfinishedMsg(SCliConn* conn) { snprintf(key, sizeof(key), "%s:%d", ip, (int)port); \ } while (0) -#define CONN_HOST_THREAD_IDX1(idx, exh, refId, pThrd) \ - do { \ - if (exh == NULL) { \ - idx = -1; \ - } else { \ - ASYNC_CHECK_HANDLE((exh), refId); \ - pThrd = (SCliThrd*)(exh)->pThrd; \ - } \ - } while (0) -#define CONN_PERSIST_TIME(para) ((para) <= 90000 ? 90000 : (para)) -#define CONN_GET_HOST_THREAD(conn) (conn ? ((SCliConn*)conn)->hostThrd : NULL) -#define CONN_GET_INST_LABEL(conn) (((STrans*)(((SCliThrd*)(conn)->hostThrd)->pTransInst))->label) +#define CONN_PERSIST_TIME(para) ((para) <= 90000 ? 90000 : (para)) +#define CONN_GET_INST_LABEL(conn) (((STrans*)(((SCliThrd*)(conn)->hostThrd)->pTransInst))->label) #define CONN_GET_MSGCTX_BY_AHANDLE(conn, ahandle) \ do { \ @@ -217,6 +207,7 @@ static void cliReleaseUnfinishedMsg(SCliConn* conn) { tDebug("msg found, %" PRIu64 "", ahandle); \ } \ } while (0) + #define CONN_GET_NEXT_SENDMSG(conn) \ do { \ int i = 0; \ @@ -231,21 +222,6 @@ static void cliReleaseUnfinishedMsg(SCliConn* conn) { } \ } while (0) -#define CONN_HANDLE_THREAD_QUIT(thrd) \ - do { \ - if (thrd->quit) { \ - return; \ - } \ - } while (0) - -#define CONN_HANDLE_BROKEN(conn) \ - do { \ - if (conn->broken) { \ - cliHandleExcept(conn); \ - return; \ - } \ - } while (0) - #define CONN_SET_PERSIST_BY_APP(conn) \ do { \ if (conn->status == ConnNormal) { \ From 029a4a85b318ca4f4643bf0ececeab2f81caefe1 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 22:21:02 +0800 Subject: [PATCH 22/81] fix(query): support partition by + limit push down. --- source/dnode/vnode/src/sma/smaRollup.c | 12 ++++++------ source/libs/executor/src/executil.c | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index 19a0fbd629..0ac5f0d8ff 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -706,20 +706,20 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma // TODO: the schema update should be handled later(TD-17965) if (buildSubmitReqFromDataBlock(&pReq, output, pTSchema, SMA_VID(pSma), suid) < 0) { - smaError("vgId:%d, build submit req for rsma table %" PRIi64 " level %" PRIi8 " failed since %s", SMA_VID(pSma), - suid, pItem->level, terrstr()); + smaError("vgId:%d, build submit req for rsma table suid:%" PRIu64 ", uid:%"PRIu64", level %" PRIi8 " failed since %s", SMA_VID(pSma), + suid, output->info.groupId, pItem->level, terrstr()); goto _err; } if (pReq && tdProcessSubmitReq(sinkTsdb, output->info.version, pReq) < 0) { taosMemoryFreeClear(pReq); - smaError("vgId:%d, process submit req for rsma table %" PRIi64 " level %" PRIi8 " failed since %s", - SMA_VID(pSma), suid, pItem->level, terrstr()); + smaError("vgId:%d, process submit req for rsma table suid:%" PRIu64 ", uid:%"PRIu64", level %" PRIi8 " failed since %s", + SMA_VID(pSma), suid, output->info.groupId, pItem->level, terrstr()); goto _err; } - smaDebug("vgId:%d, process submit req for rsma table %" PRIi64 " level %" PRIi8 " ver %" PRIi64 " len %" PRIu32, - SMA_VID(pSma), suid, pItem->level, output->info.version, htonl(pReq->header.contLen)); + smaDebug("vgId:%d, process submit req for rsma table suid:%" PRIu64 ", uid:%"PRIu64", level %" PRIi8 " ver %" PRIi64 " len %" PRIu32, + SMA_VID(pSma), suid, output->info.groupId, pItem->level, output->info.version, htonl(pReq->header.contLen)); taosMemoryFreeClear(pReq); } diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index dbef032041..6bce88fa23 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1679,11 +1679,15 @@ uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid) { int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t gid) { STableKeyInfo keyInfo = {.uid = uid, .groupId = gid}; - taosArrayPush(pTableList->pTableList, &keyInfo); - if (pTableList->oneTableForEachGroup || pTableList->numOfOuputGroups > 1) { + if (!pTableList->oneTableForEachGroup) { + if (pTableList->map == NULL) { + pTableList->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); + } + taosHashPut(pTableList->map, &uid, sizeof(uid), &keyInfo.groupId, sizeof(keyInfo.groupId)); } + return TSDB_CODE_SUCCESS; } From 9322928a570354a54f82f184df3fdae591140d90 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 28 Oct 2022 22:41:25 +0800 Subject: [PATCH 23/81] opt http module --- source/libs/transport/src/thttp.c | 65 ++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c index 6715290acf..7dffb8d192 100644 --- a/source/libs/transport/src/thttp.c +++ b/source/libs/transport/src/thttp.c @@ -45,6 +45,8 @@ typedef struct SHttpMsg { static TdThreadOnce transHttpInit = PTHREAD_ONCE_INIT; static SHttpModule* http = NULL; +static void httpHandleReq(SHttpMsg* msg); + static void* httpThread(void* arg) { SHttpModule* http = (SHttpModule*)arg; setThreadName("http-cli-send-thread"); @@ -52,6 +54,13 @@ static void* httpThread(void* arg) { return NULL; } +static void httpDestroyMsg(SHttpMsg* msg) { + if (msg == NULL) return; + + taosMemoryFree(msg->server); + taosMemoryFree(msg->cont); + taosMemoryFree(msg); +} static void httpAsyncCb(uv_async_t* handle) { SAsyncItem* item = handle->data; SHttpModule* http = item->pThrd; @@ -68,6 +77,7 @@ static void httpAsyncCb(uv_async_t* handle) { queue* h = QUEUE_HEAD(&wq); QUEUE_REMOVE(h); msg = QUEUE_DATA(h, SHttpMsg, q); + httpHandleReq(msg); } } @@ -355,7 +365,6 @@ int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32 } int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { SHttpMsg* msg = taosMemoryMalloc(sizeof(SHttpMsg)); - msg->server = strdup(server); msg->port = port; msg->cont = taosMemoryMalloc(contLen); @@ -365,3 +374,57 @@ int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, i transAsyncSend(http->asyncPool, &(msg->q)); return 0; } +static void httpHandleReq(SHttpMsg* msg) { + struct sockaddr_in dest = {0}; + if (taosBuildDstAddr(msg->server, msg->port, &dest) < 0) { + httpDestroyMsg(msg); + return; + } + if (msg->flag == HTTP_GZIP) { + int32_t dstLen = taosCompressHttpRport(msg->cont, msg->len); + if (dstLen > 0) { + msg->len = dstLen; + } else { + msg->flag = HTTP_FLAT; + } + } + + terrno = 0; + + int32_t len = 2048; + char* header = taosMemoryCalloc(1, len); + int32_t headLen = taosBuildHttpHeader(msg->server, msg->len, header, len, msg->flag); + + uv_buf_t* wb = taosMemoryCalloc(2, sizeof(uv_buf_t)); + wb[0] = uv_buf_init((char*)header, strlen(header)); // heap var + wb[1] = uv_buf_init((char*)msg->cont, msg->len); // heap var + + SHttpClient* cli = taosMemoryCalloc(1, sizeof(SHttpClient)); + cli->conn.data = cli; + cli->tcp.data = cli; + cli->req.data = cli; + cli->wbuf = wb; + cli->rbuf = taosMemoryCalloc(1, HTTP_RECV_BUF_SIZE); + cli->addr = msg->server; + cli->port = msg->port; + + taosMemoryFree(msg); + + uv_tcp_init(http->loop, &cli->tcp); + // set up timeout to avoid stuck; + int32_t fd = taosCreateSocketWithTimeout(5); + + int ret = uv_tcp_open((uv_tcp_t*)&cli->tcp, fd); + if (ret != 0) { + uError("http-report failed to open socket, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); + destroyHttpClient(cli); + return; + } + + ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&dest, clientConnCb); + if (ret != 0) { + uError("http-report failed to connect to http-server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, + cli->port); + destroyHttpClient(cli); + } +} From c5fba9ccbd6a38e26b653b6bf651834fdcce67de Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 28 Oct 2022 23:17:22 +0800 Subject: [PATCH 24/81] opt http module --- source/libs/transport/src/thttp.c | 74 +++---------------------------- 1 file changed, 7 insertions(+), 67 deletions(-) diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c index 7dffb8d192..0c4492e1f0 100644 --- a/source/libs/transport/src/thttp.c +++ b/source/libs/transport/src/thttp.c @@ -45,7 +45,9 @@ typedef struct SHttpMsg { static TdThreadOnce transHttpInit = PTHREAD_ONCE_INIT; static SHttpModule* http = NULL; -static void httpHandleReq(SHttpMsg* msg); +static void httpHandleReq(SHttpMsg* msg); +static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, + EHttpCompFlag flag); static void* httpThread(void* arg) { SHttpModule* http = (SHttpModule*)arg; @@ -297,73 +299,11 @@ static FORCE_INLINE int32_t taosBuildDstAddr(const char* server, uint16_t port, return 0; } int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { - struct sockaddr_in dest = {0}; - if (taosBuildDstAddr(server, port, &dest) < 0) { - return -1; - } - if (flag == HTTP_GZIP) { - int32_t dstLen = taosCompressHttpRport(pCont, contLen); - if (dstLen > 0) { - contLen = dstLen; - } else { - flag = HTTP_FLAT; - } - } - terrno = 0; - - int32_t len = 2048; - char* header = taosMemoryCalloc(1, len); - int32_t headLen = taosBuildHttpHeader(server, contLen, header, len, flag); - - uv_buf_t* wb = taosMemoryCalloc(2, sizeof(uv_buf_t)); - wb[0] = uv_buf_init((char*)header, strlen(header)); // heap var - wb[1] = uv_buf_init((char*)pCont, contLen); // heap var - - SHttpClient* cli = taosMemoryCalloc(1, sizeof(SHttpClient)); - cli->conn.data = cli; - cli->tcp.data = cli; - cli->req.data = cli; - cli->wbuf = wb; - cli->rbuf = taosMemoryCalloc(1, HTTP_RECV_BUF_SIZE); - cli->addr = tstrdup(server); - cli->port = port; - - uv_loop_t* loop = taosMemoryMalloc(sizeof(uv_loop_t)); - int err = uv_loop_init(loop); - if (err != 0) { - uError("http-report failed to init uv_loop, reason: %s", uv_strerror(err)); - taosMemoryFree(loop); - terrno = TAOS_SYSTEM_ERROR(err); - destroyHttpClient(cli); - return terrno; - } - uv_tcp_init(loop, &cli->tcp); - // set up timeout to avoid stuck; - int32_t fd = taosCreateSocketWithTimeout(5); - - int ret = uv_tcp_open((uv_tcp_t*)&cli->tcp, fd); - if (ret != 0) { - uError("http-report failed to open socket, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); - destroyHttpClient(cli); - uv_stop(loop); - terrno = TAOS_SYSTEM_ERROR(ret); - } else { - ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&dest, clientConnCb); - if (ret != 0) { - uError("http-report failed to connect to http-server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, - cli->port); - destroyHttpClient(cli); - uv_stop(loop); - terrno = TAOS_SYSTEM_ERROR(ret); - } - } - - uv_run(loop, UV_RUN_DEFAULT); - uv_loop_close(loop); - taosMemoryFree(loop); - return terrno; + taosThreadOnce(&transHttpInit, transHttpEnvInit); + return taosSendHttpReportImpl(server, port, pCont, contLen, flag); } -int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { +static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, + EHttpCompFlag flag) { SHttpMsg* msg = taosMemoryMalloc(sizeof(SHttpMsg)); msg->server = strdup(server); msg->port = port; From 61634070ec9ce92c18839456374ea822e131edba Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 23:23:53 +0800 Subject: [PATCH 25/81] other: merge 3.0 --- source/dnode/vnode/inc/vnode.h | 1 - source/libs/executor/src/scanoperator.c | 409 ++++++++++++++++++++++-- 2 files changed, 380 insertions(+), 30 deletions(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index fcb9b4ab44..d7e4935edd 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -165,7 +165,6 @@ SArray *tsdbRetrieveDataBlock(STsdbReader *pTsdbReadHandle, SArray *pColumnIdLi int32_t tsdbReaderReset(STsdbReader *pReader, SQueryTableDataCond *pCond); int32_t tsdbGetFileBlocksDistInfo(STsdbReader *pReader, STableBlockDistInfo *pTableBlockInfo); int64_t tsdbGetNumOfRowsInMemTable(STsdbReader *pHandle); -bool tsdbIsAscendingOrder(STsdbReader *pReader); void *tsdbGetIdx(SMeta *pMeta); void *tsdbGetIvtIdx(SMeta *pMeta); uint64_t getReaderMaxVersion(STsdbReader *pReader); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index a139809d8f..5a860c3b95 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -42,7 +42,7 @@ static int32_t buildDbTableInfoBlock(bool sysInfo, const SSDataBlock* p, const S static char* SYSTABLE_IDX_COLUMN[] = {"table_name", "db_name", "create_time", "columns", "ttl", "stable_name", "vgroup_id', 'uid", "type"}; -static char* SYSTABLE_IDX_EXCEPT[] = {"db_name", "vgroup_id"}; +static char* SYSTABLE_SPECIAL_COL[] = {"db_name", "vgroup_id"}; typedef int32_t (*__sys_filte)(void* pMeta, SNode* cond, SArray* result); typedef int32_t (*__sys_check)(SNode* cond); @@ -3267,15 +3267,79 @@ static int tableUidCompare(const void* a, const void* b) { } return u1 < u2 ? -1 : 1; } + +typedef struct MergeIndex { + int idx; + int len; +} MergeIndex; + +static FORCE_INLINE int optSysBinarySearch(SArray* arr, int s, int e, uint64_t k) { + uint64_t v; + int32_t m; + while (s <= e) { + m = s + (e - s) / 2; + v = *(uint64_t*)taosArrayGet(arr, m); + if (v >= k) { + e = m - 1; + } else { + s = m + 1; + } + } + return s; +} + +void optSysIntersection(SArray* in, SArray* out) { + int32_t sz = (int32_t)taosArrayGetSize(in); + if (sz <= 0) { + return; + } + MergeIndex* mi = taosMemoryCalloc(sz, sizeof(MergeIndex)); + for (int i = 0; i < sz; i++) { + SArray* t = taosArrayGetP(in, i); + mi[i].len = (int32_t)taosArrayGetSize(t); + mi[i].idx = 0; + } + + SArray* base = taosArrayGetP(in, 0); + for (int i = 0; i < taosArrayGetSize(base); i++) { + uint64_t tgt = *(uint64_t*)taosArrayGet(base, i); + bool has = true; + for (int j = 1; j < taosArrayGetSize(in); j++) { + SArray* oth = taosArrayGetP(in, j); + int mid = optSysBinarySearch(oth, mi[j].idx, mi[j].len - 1, tgt); + if (mid >= 0 && mid < mi[j].len) { + uint64_t val = *(uint64_t*)taosArrayGet(oth, mid); + has = (val == tgt ? true : false); + mi[j].idx = mid; + } else { + has = false; + } + } + if (has == true) { + taosArrayPush(out, &tgt); + } + } + taosMemoryFreeClear(mi); +} + static int32_t optSysMergeRslt(SArray* mRslt, SArray* rslt) { // TODO, find comm mem from mRslt for (int i = 0; i < taosArrayGetSize(mRslt); i++) { - SArray* aRslt = taosArrayGetP(mRslt, i); - taosArrayAddAll(rslt, aRslt); + SArray* arslt = taosArrayGetP(mRslt, i); + taosArraySort(arslt, tableUidCompare); } - taosArraySort(rslt, tableUidCompare); - taosArrayRemoveDuplicate(rslt, tableUidCompare, NULL); + optSysIntersection(mRslt, rslt); + return 0; +} +static int32_t optSysSpecialColumn(SNode* cond) { + SOperatorNode* pOper = (SOperatorNode*)cond; + SColumnNode* pCol = (SColumnNode*)pOper->pLeft; + for (int i = 0; i < sizeof(SYSTABLE_SPECIAL_COL) / sizeof(SYSTABLE_SPECIAL_COL[0]); i++) { + if (0 == strcmp(pCol->colName, SYSTABLE_SPECIAL_COL[i])) { + return 1; + } + } return 0; } @@ -3302,7 +3366,6 @@ static int32_t optSysTabFilte(void* arg, SNode* cond, SArray* result) { SNodeList* pList = (SNodeList*)pNode->pParameterList; int32_t len = LIST_LENGTH(pList); - if (len <= 0) return ret; bool hasIdx = false; bool hasRslt = true; @@ -3318,7 +3381,12 @@ static int32_t optSysTabFilte(void* arg, SNode* cond, SArray* result) { if (ret == 0) { // has index hasIdx = true; - taosArrayPush(mRslt, &aRslt); + if (optSysSpecialColumn(cell->pNode) == 0) { + taosArrayPush(mRslt, &aRslt); + } else { + // db_name/vgroup not result + taosArrayDestroy(aRslt); + } } else if (ret == -2) { // current vg hasIdx = true; @@ -3389,7 +3457,7 @@ static SSDataBlock* sysTableBuildUserTablesByUids(SOperatorInfo* pOperator) { SMetaReader mr = {0}; metaReaderInit(&mr, pInfo->readHandle.meta, 0); - int32_t ret = metaGetTableEntryByUid(&mr, *uid); + ret = metaGetTableEntryByUid(&mr, *uid); if (ret < 0) { metaReaderClear(&mr); continue; @@ -4187,6 +4255,130 @@ int32_t createMultipleDataReaders(SQueryTableDataCond* pQueryCond, SReadHandle* return TSDB_CODE_SUCCESS; } +int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* pHandle, + STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, + STsdbReader** ppReader, const char* idstr) { + STsdbReader* pReader = NULL; + void* pStart = taosArrayGet(pTableListInfo->pTableList, tableStartIdx); + int32_t num = tableEndIdx - tableStartIdx + 1; + + int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, num, &pReader, idstr); + if (code != 0) { + return code; + } + + *ppReader = pReader; + return TSDB_CODE_SUCCESS; +} + +static int32_t loadDataBlockFromOneTable2(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, + SSDataBlock* pBlock, uint32_t* status) { + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + STableMergeScanInfo* pInfo = pOperator->info; + + uint64_t uid = pBlock->info.uid; + + SFileBlockLoadRecorder* pCost = &pTableScanInfo->readRecorder; + + pCost->totalBlocks += 1; + pCost->totalRows += pBlock->info.rows; + + *status = pInfo->dataBlockLoadFlag; + if (pTableScanInfo->pFilterNode != NULL || + overlapWithTimeWindow(&pTableScanInfo->interval, &pBlock->info, pTableScanInfo->cond.order)) { + (*status) = FUNC_DATA_REQUIRED_DATA_LOAD; + } + + SDataBlockInfo* pBlockInfo = &pBlock->info; + taosMemoryFreeClear(pBlock->pBlockAgg); + + if (*status == FUNC_DATA_REQUIRED_FILTEROUT) { + qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), + pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); + pCost->filterOutBlocks += 1; + return TSDB_CODE_SUCCESS; + } else if (*status == FUNC_DATA_REQUIRED_NOT_LOAD) { + qDebug("%s data block skipped, brange:%" PRId64 "-%" PRId64 ", rows:%d", GET_TASKID(pTaskInfo), + pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); + pCost->skipBlocks += 1; + + // clear all data in pBlock that are set when handing the previous block + for (int32_t i = 0; i < taosArrayGetSize(pBlock->pDataBlock); ++i) { + SColumnInfoData* pcol = taosArrayGet(pBlock->pDataBlock, i); + pcol->pData = NULL; + } + + return TSDB_CODE_SUCCESS; + } else if (*status == FUNC_DATA_REQUIRED_STATIS_LOAD) { + pCost->loadBlockStatis += 1; + + bool allColumnsHaveAgg = true; + SColumnDataAgg** pColAgg = NULL; + STsdbReader* reader = pTableScanInfo->pReader; + tsdbRetrieveDatablockSMA(reader, &pColAgg, &allColumnsHaveAgg); + + if (allColumnsHaveAgg == true) { + int32_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); + + // todo create this buffer during creating operator + if (pBlock->pBlockAgg == NULL) { + pBlock->pBlockAgg = taosMemoryCalloc(numOfCols, POINTER_BYTES); + } + + for (int32_t i = 0; i < numOfCols; ++i) { + SColMatchItem* pColMatchInfo = taosArrayGet(pTableScanInfo->matchInfo.pList, i); + if (!pColMatchInfo->needOutput) { + continue; + } + pBlock->pBlockAgg[pColMatchInfo->dstSlotId] = pColAgg[i]; + } + + return TSDB_CODE_SUCCESS; + } else { // failed to load the block sma data, data block statistics does not exist, load data block instead + *status = FUNC_DATA_REQUIRED_DATA_LOAD; + } + } + + ASSERT(*status == FUNC_DATA_REQUIRED_DATA_LOAD); + + pCost->totalCheckedRows += pBlock->info.rows; + pCost->loadBlocks += 1; + + STsdbReader* reader = pTableScanInfo->pReader; + SArray* pCols = tsdbRetrieveDataBlock(reader, NULL); + if (pCols == NULL) { + return terrno; + } + + relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); + + // currently only the tbname pseudo column + if (pTableScanInfo->pseudoSup.numOfExprs > 0) { + int32_t code = addTagPseudoColumnData(&pTableScanInfo->readHandle, pTableScanInfo->pseudoSup.pExprInfo, + pTableScanInfo->pseudoSup.numOfExprs, pBlock, GET_TASKID(pTaskInfo)); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } + } + + if (pTableScanInfo->pFilterNode != NULL) { + int64_t st = taosGetTimestampMs(); + doFilter(pTableScanInfo->pFilterNode, pBlock, &pTableScanInfo->matchInfo, NULL); + + double el = (taosGetTimestampUs() - st) / 1000.0; + pTableScanInfo->readRecorder.filterTime += el; + + if (pBlock->info.rows == 0) { + pCost->filterOutBlocks += 1; + qDebug("%s data block filter out, brange:%" PRId64 "-%" PRId64 ", rows:%d, elapsed time:%.2f ms", + GET_TASKID(pTaskInfo), pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows, el); + } else { + qDebug("%s data block filter applied, elapsed time:%.2f ms", GET_TASKID(pTaskInfo), el); + } + } + return TSDB_CODE_SUCCESS; +} + // todo refactor static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeScanInfo* pTableScanInfo, int32_t readerIdx, SSDataBlock* pBlock, uint32_t* status) { @@ -4229,8 +4421,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc bool allColumnsHaveAgg = true; SColumnDataAgg** pColAgg = NULL; - STsdbReader* reader = taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); - tsdbRetrieveDatablockSMA(reader, &pColAgg, &allColumnsHaveAgg); +// STsdbReader* reader = pTableScanInfo->pReader; // taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); if (allColumnsHaveAgg == true) { int32_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); @@ -4309,9 +4500,141 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc typedef struct STableMergeScanSortSourceParam { SOperatorInfo* pOperator; int32_t readerIdx; + uint64_t uid; SSDataBlock* inputBlock; } STableMergeScanSortSourceParam; +static SSDataBlock* getTableDataBlockTemp(void* param) { + STableMergeScanSortSourceParam* source = param; + SOperatorInfo* pOperator = source->pOperator; + STableMergeScanInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + int32_t readIdx = source->readerIdx; + SSDataBlock* pBlock = source->inputBlock; + STableMergeScanInfo* pTableScanInfo = pOperator->info; + + SQueryTableDataCond* pQueryCond = taosArrayGet(pTableScanInfo->queryConds, readIdx); + + blockDataCleanup(pBlock); + + int64_t st = taosGetTimestampUs(); + + void* p =taosArrayGet(pInfo->tableListInfo->pTableList, readIdx + pInfo->tableStartIndex); + SReadHandle* pHandle = &pInfo->readHandle; + tsdbReaderOpen(pHandle->vnode, pQueryCond, p, 1, &pInfo->pReader, GET_TASKID(pTaskInfo)); + + STsdbReader* reader = pInfo->pReader; + while (tsdbNextDataBlock(reader)) { + if (isTaskKilled(pOperator->pTaskInfo)) { + T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); + } + + // process this data block based on the probabilities + bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); + if (!processThisBlock) { + continue; + } + + blockDataCleanup(pBlock); + SDataBlockInfo binfo = pBlock->info; + tsdbRetrieveDataBlockInfo(reader, &binfo); + + blockDataEnsureCapacity(pBlock, binfo.rows); + pBlock->info.type = binfo.type; + pBlock->info.uid = binfo.uid; + pBlock->info.window = binfo.window; + pBlock->info.rows = binfo.rows; + + if (pQueryCond->order == TSDB_ORDER_ASC) { + pQueryCond->twindows.skey = pBlock->info.window.ekey + 1; + } else { + pQueryCond->twindows.ekey = pBlock->info.window.skey - 1; + } + + uint32_t status = 0; + int32_t code = loadDataBlockFromOneTable(pOperator, pTableScanInfo, readIdx, pBlock, &status); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pOperator->pTaskInfo->env, code); + } + + // current block is filter out according to filter condition, continue load the next block + if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { + continue; + } + + uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); + if (groupId) { + pBlock->info.groupId = *groupId; + } + + pOperator->resultInfo.totalRows += pBlock->info.rows; // pTableScanInfo->readRecorder.totalRows; + pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; + + tsdbReaderClose(pInfo->pReader); + pInfo->pReader = NULL; + return pBlock; + } + tsdbReaderClose(pInfo->pReader); + pInfo->pReader = NULL; + return NULL; +} +static SSDataBlock* getTableDataBlock2(void* param) { + STableMergeScanSortSourceParam* source = param; + SOperatorInfo* pOperator = source->pOperator; + int64_t uid = source->uid; + SSDataBlock* pBlock = source->inputBlock; + STableMergeScanInfo* pTableScanInfo = pOperator->info; + + int64_t st = taosGetTimestampUs(); + + blockDataCleanup(pBlock); + + STsdbReader* reader = pTableScanInfo->pReader; + while (tsdbTableNextDataBlock(reader, uid)) { + if (isTaskKilled(pOperator->pTaskInfo)) { + T_LONG_JMP(pOperator->pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED); + } + + // process this data block based on the probabilities + bool processThisBlock = processBlockWithProbability(&pTableScanInfo->sample); + if (!processThisBlock) { + continue; + } + + blockDataCleanup(pBlock); + SDataBlockInfo binfo = pBlock->info; + tsdbRetrieveDataBlockInfo(reader, &binfo); + + blockDataEnsureCapacity(pBlock, binfo.rows); + pBlock->info.type = binfo.type; + pBlock->info.uid = binfo.uid; + pBlock->info.window = binfo.window; + pBlock->info.rows = binfo.rows; + + uint32_t status = 0; + int32_t code = loadDataBlockFromOneTable2(pOperator, pTableScanInfo, pBlock, &status); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pOperator->pTaskInfo->env, code); + } + + // current block is filter out according to filter condition, continue load the next block + if (status == FUNC_DATA_REQUIRED_FILTEROUT || pBlock->info.rows == 0) { + continue; + } + + uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); + if (groupId) { + pBlock->info.groupId = *groupId; + } + + pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; + pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; + + return pBlock; + } + return NULL; +} + static SSDataBlock* getTableDataBlock(void* param) { STableMergeScanSortSourceParam* source = param; SOperatorInfo* pOperator = source->pOperator; @@ -4390,6 +4713,15 @@ SArray* generateSortByTsInfo(SArray* colMatchInfo, int32_t order) { return pList; } +int32_t dumpSQueryTableCond(const SQueryTableDataCond* src, SQueryTableDataCond* dst) { + memcpy((void*)dst, (void*)src, sizeof(SQueryTableDataCond)); + dst->colList = taosMemoryCalloc(src->numOfCols, sizeof(SColumnInfo)); + for (int i = 0; i < src->numOfCols; i++) { + dst->colList[i] = src->colList[i]; + } + return 0; +} + int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { STableMergeScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -4409,10 +4741,7 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { int32_t tableStartIdx = pInfo->tableStartIndex; int32_t tableEndIdx = pInfo->tableEndIndex; - STableListInfo* tableListInfo = pInfo->tableListInfo; - pInfo->dataReaders = taosArrayInit(64, POINTER_BYTES); - createMultipleDataReaders(&pInfo->cond, &pInfo->readHandle, tableListInfo, tableStartIdx, tableEndIdx, - pInfo->dataReaders, GET_TASKID(pTaskInfo)); + pInfo->pReader = NULL; // todo the total available buffer should be determined by total capacity of buffer of this task. // the additional one is reserved for merge result @@ -4421,18 +4750,28 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { pInfo->pSortHandle = tsortCreateSortHandle(pInfo->pSortInfo, SORT_MULTISOURCE_MERGE, pInfo->bufPageSize, numOfBufPage, pInfo->pSortInputBlock, pTaskInfo->id.str); - tsortSetFetchRawDataFp(pInfo->pSortHandle, getTableDataBlock, NULL, NULL); + tsortSetFetchRawDataFp(pInfo->pSortHandle, getTableDataBlockTemp, NULL, NULL); + + // one table has one data block + int32_t numOfTable = tableEndIdx - tableStartIdx + 1; + pInfo->queryConds = taosArrayInit(numOfTable, sizeof(SQueryTableDataCond)); + + for (int32_t i = 0; i < numOfTable; ++i) { + STableKeyInfo* tableKeyInfo = taosArrayGet(pInfo->tableListInfo->pTableList, i + tableStartIdx); + size_t numReaders = taosArrayGetSize(pInfo->dataReaders); - size_t numReaders = taosArrayGetSize(pInfo->dataReaders); - for (int32_t i = 0; i < numReaders; ++i) { STableMergeScanSortSourceParam param = {0}; param.readerIdx = i; param.pOperator = pOperator; param.inputBlock = createOneDataBlock(pInfo->pResBlock, false); taosArrayPush(pInfo->sortSourceParams, ¶m); + + SQueryTableDataCond cond; + dumpSQueryTableCond(&pInfo->cond, &cond); + taosArrayPush(pInfo->queryConds, &cond); } - for (int32_t i = 0; i < numReaders; ++i) { + for (int32_t i = 0; i < numOfTable; ++i) { SSortSource* ps = taosMemoryCalloc(1, sizeof(SSortSource)); STableMergeScanSortSourceParam* param = taosArrayGet(pInfo->sortSourceParams, i); ps->param = param; @@ -4452,7 +4791,7 @@ int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { STableMergeScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - size_t numReaders = taosArrayGetSize(pInfo->dataReaders); + int32_t numOfTable = taosArrayGetSize(pInfo->queryConds); SSortExecInfo sortExecInfo = tsortGetSortExecInfo(pInfo->pSortHandle); pInfo->sortExecInfo.sortMethod = sortExecInfo.sortMethod; @@ -4461,7 +4800,7 @@ int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { pInfo->sortExecInfo.readBytes += sortExecInfo.readBytes; pInfo->sortExecInfo.writeBytes += sortExecInfo.writeBytes; - for (int32_t i = 0; i < numReaders; ++i) { + for (int32_t i = 0; i < numOfTable; ++i) { STableMergeScanSortSourceParam* param = taosArrayGet(pInfo->sortSourceParams, i); blockDataDestroy(param->inputBlock); } @@ -4469,12 +4808,13 @@ int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { tsortDestroySortHandle(pInfo->pSortHandle); - for (int32_t i = 0; i < numReaders; ++i) { - STsdbReader* reader = taosArrayGetP(pInfo->dataReaders, i); - tsdbReaderClose(reader); + for (int32_t i = 0; i < taosArrayGetSize(pInfo->queryConds); i++) { + SQueryTableDataCond* cond = taosArrayGet(pInfo->queryConds, i); + taosMemoryFree(cond->colList); } - taosArrayDestroy(pInfo->dataReaders); - pInfo->dataReaders = NULL; + taosArrayDestroy(pInfo->queryConds); + pInfo->queryConds = NULL; + return TSDB_CODE_SUCCESS; } @@ -4558,13 +4898,24 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { void destroyTableMergeScanOperatorInfo(void* param) { STableMergeScanInfo* pTableScanInfo = (STableMergeScanInfo*)param; cleanupQueryTableDataCond(&pTableScanInfo->cond); + + int32_t numOfTable = taosArrayGetSize(pTableScanInfo->queryConds); + + for (int32_t i = 0; i < numOfTable; i++) { + STableMergeScanSortSourceParam* p = taosArrayGet(pTableScanInfo->sortSourceParams, i); + blockDataDestroy(p->inputBlock); + } + taosArrayDestroy(pTableScanInfo->sortSourceParams); - for (int32_t i = 0; i < taosArrayGetSize(pTableScanInfo->dataReaders); ++i) { - STsdbReader* reader = taosArrayGetP(pTableScanInfo->dataReaders, i); - tsdbReaderClose(reader); + tsdbReaderClose(pTableScanInfo->pReader); + pTableScanInfo->pReader = NULL; + + for (int i = 0; i < taosArrayGetSize(pTableScanInfo->queryConds); i++) { + SQueryTableDataCond* pCond = taosArrayGet(pTableScanInfo->queryConds, i); + taosMemoryFree(pCond->colList); } - taosArrayDestroy(pTableScanInfo->dataReaders); + taosArrayDestroy(pTableScanInfo->queryConds); if (pTableScanInfo->matchInfo.pList != NULL) { taosArrayDestroy(pTableScanInfo->matchInfo.pList); From d87e8f0250778c88614c428a441465c54821d766 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 23:28:53 +0800 Subject: [PATCH 26/81] other: update the command. --- contrib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 969724cc8d..21eac42c79 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -270,7 +270,7 @@ if(${JEMALLOC_ENABLED}) PREFIX "jemalloc" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/ --disable-initial-exec-tls --with-malloc-conf='background_thread:true,metadata_thp:auto' + CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/ --disable-initial-exec-tls BUILD_COMMAND ${MAKE} ) INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/build/include) From 317ee1daea5f807f40eb66ef0c4cb93b4cbc5df7 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 28 Oct 2022 23:29:38 +0800 Subject: [PATCH 27/81] other: update the command. --- contrib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 21eac42c79..8f94313382 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -270,7 +270,7 @@ if(${JEMALLOC_ENABLED}) PREFIX "jemalloc" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/ --disable-initial-exec-tls + CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/ --disable-initial-exec-tls BUILD_COMMAND ${MAKE} ) INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/build/include) From 86a75bc844b6f4ecef769ee26ca1e0d3428954a3 Mon Sep 17 00:00:00 2001 From: Chait Diwadkar <94201190+cdiwadkar16@users.noreply.github.com> Date: Fri, 28 Oct 2022 10:14:20 -0700 Subject: [PATCH 28/81] Need quotes around the location in TAGS ('California.SanFrancicso' The insert fails without quotes around the location in the TAGS part --- docs/examples/c/insert_example.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/examples/c/insert_example.c b/docs/examples/c/insert_example.c index ce8fdc5b93..a921f794fd 100644 --- a/docs/examples/c/insert_example.c +++ b/docs/examples/c/insert_example.c @@ -36,10 +36,10 @@ int main() { executeSQL(taos, "CREATE DATABASE power"); executeSQL(taos, "USE power"); executeSQL(taos, "CREATE STABLE meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)"); - executeSQL(taos, "INSERT INTO d1001 USING meters TAGS(California.SanFrancisco, 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)" - "d1002 USING meters TAGS(California.SanFrancisco, 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)" - "d1003 USING meters TAGS(California.LosAngeles, 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000)" - "d1004 USING meters TAGS(California.LosAngeles, 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)"); + executeSQL(taos, "INSERT INTO d1001 USING meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)" + "d1002 USING meters TAGS('California.SanFrancisco', 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)" + "d1003 USING meters TAGS('California.LosAngeles', 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000)" + "d1004 USING meters TAGS('California.LosAngeles', 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)"); taos_close(taos); taos_cleanup(); } @@ -48,4 +48,4 @@ int main() { // affected rows 0 // affected rows 0 // affected rows 0 -// affected rows 8 \ No newline at end of file +// affected rows 8 From d7f3ddf2dd13b8f4c7377591c9361bae776649c8 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 10:17:41 +0800 Subject: [PATCH 29/81] fix(query): set correct reader handle. --- source/libs/executor/src/scanoperator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 5a860c3b95..c343b9f589 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -4461,7 +4461,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc pCost->totalCheckedRows += pBlock->info.rows; pCost->loadBlocks += 1; - STsdbReader* reader = taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); + STsdbReader* reader = pTableScanInfo->pReader; SArray* pCols = tsdbRetrieveDataBlock(reader, NULL); if (pCols == NULL) { return terrno; From f9aa286dc1c1da2068f2290c58cd9bd0d91277d2 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 10:22:02 +0800 Subject: [PATCH 30/81] fix(query): fix syntax error on aarch64 --- source/dnode/vnode/src/sma/smaRollup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index bb12f853f1..03532eb6d4 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -701,7 +701,8 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma #endif for (int32_t i = 0; i < taosArrayGetSize(pResList); ++i) { SSDataBlock *output = taosArrayGetP(pResList, i); - smaDebug("uid:%ld, groupid:%ld", output->info.uid, output->info.groupId); + smaDebug("result block, uid:%"PRIu64", groupid:%"PRIu64", rows:%d", output->info.uid, output->info.groupId, + output->info.rows); STsdb *sinkTsdb = (pItem->level == TSDB_RETENTION_L1 ? pSma->pRSmaTsdb[0] : pSma->pRSmaTsdb[1]); SSubmitReq *pReq = NULL; From 4cd14c4163287b8a34012bfddaf96da5c50a2437 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 10:25:14 +0800 Subject: [PATCH 31/81] fix(query): fix memory leak. --- source/libs/executor/src/scanoperator.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index c343b9f589..6935a9ab93 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -2295,6 +2295,9 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys int32_t numOfCols = 0; int32_t code = extractColMatchInfo(pScanPhyNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } int32_t numOfOutput = taosArrayGetSize(pInfo->matchInfo.pList); SArray* pColIds = taosArrayInit(numOfOutput, sizeof(int16_t)); @@ -2356,6 +2359,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pTSInfo->dataReader = NULL; if (tsdbReaderOpen(pHandle->vnode, &pTSInfo->cond, pList, num, &pTSInfo->dataReader, NULL) < 0) { terrno = TSDB_CODE_OUT_OF_MEMORY; + destroyTableScanOperatorInfo(pTableScanOp); goto _error; } } From 783a65f827b8296eea20d41ec7dc6904f060ad45 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Sat, 29 Oct 2022 10:57:15 +0800 Subject: [PATCH 32/81] refactor(sync) delete ASSERT --- source/libs/sync/src/syncMain.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index b77652bc81..481733cd17 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -3375,8 +3375,12 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde pEntry = (SSyncRaftEntry*)taosLRUCacheValue(pCache, h); } else { code = ths->pLogStore->syncLogGetEntry(ths->pLogStore, i, &pEntry); - ASSERT(code == 0); - ASSERT(pEntry != NULL); + // ASSERT(code == 0); + // ASSERT(pEntry != NULL); + if (code != 0 || pEntry == NULL) { + syncNodeErrorLog(ths, "get log entry error"); + continue; + } } SRpcMsg rpcMsg; @@ -3737,4 +3741,4 @@ void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* p snprintf(logBuf, sizeof(logBuf), "recv sync-heartbeat-reply from %s:%d {term:%" PRIu64 ", pterm:%" PRIu64 "}, %s", host, port, pMsg->term, pMsg->privateTerm, s); syncNodeEventLog(pSyncNode, logBuf); -} \ No newline at end of file +} From bae6d824c2576e9fcc84ebade3992b6f93adb8f8 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 12:54:39 +0800 Subject: [PATCH 33/81] fix(query): init blockscanInfo correctly. --- source/dnode/vnode/src/tsdb/tsdbRead.c | 17 ++++++++++------- tests/system-test/2-query/interp.py | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 5e5e287cf9..9add18a4dc 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -3478,6 +3478,7 @@ static int32_t doOpenReaderImpl(STsdbReader* pReader) { initFilesetIterator(&pReader->status.fileIter, pReader->pReadSnap->fs.aDFileSet, pReader); resetDataBlockIterator(&pReader->status.blockIter, pReader->order); +// resetDataBlockScanInfo(pReader->status.pTableMap, pReader->window.skey); // no data in files, let's try buffer in memory if (pReader->status.fileIter.numOfFiles == 0) { @@ -3731,13 +3732,6 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { if (pReader->innerReader[0] != NULL && pReader->step == 0) { bool ret = doTsdbNextDataBlock(pReader->innerReader[0]); - - // prepare for the main scan - int32_t code = doOpenReaderImpl(pReader); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - pReader->step = EXTERNAL_ROWS_PREV; if (ret) { return ret; @@ -3745,6 +3739,14 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { } if (pReader->step == EXTERNAL_ROWS_PREV) { + // prepare for the main scan + int32_t code = doOpenReaderImpl(pReader); + resetDataBlockScanInfo(pReader->status.pTableMap, pReader->innerReader[0]->window.ekey); + + if (code != TSDB_CODE_SUCCESS) { + return code; + } + pReader->step = EXTERNAL_ROWS_MAIN; } @@ -3756,6 +3758,7 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { if (pReader->innerReader[1] != NULL && pReader->step == EXTERNAL_ROWS_MAIN) { // prepare for the next row scan int32_t code = doOpenReaderImpl(pReader->innerReader[1]); + resetDataBlockScanInfo(pReader->innerReader[1]->status.pTableMap, pReader->window.ekey); if (code != TSDB_CODE_SUCCESS) { return code; } diff --git a/tests/system-test/2-query/interp.py b/tests/system-test/2-query/interp.py index bee20710b5..71501d5967 100644 --- a/tests/system-test/2-query/interp.py +++ b/tests/system-test/2-query/interp.py @@ -11,7 +11,7 @@ class TDTestCase: def init(self, conn, logSql): tdLog.debug(f"start to excute {__file__}") - tdSql.init(conn.cursor()) + tdSql.init(conn.cursor(), True) def run(self): dbname = "db" From e4de732285d0e1835c157ff993bfe20227de2b77 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 18:15:00 +0800 Subject: [PATCH 34/81] fix(query): always build hash map from uid to keyinfo --- source/libs/executor/inc/executorimpl.h | 2 +- source/libs/executor/src/executil.c | 38 ++++++++++++------------ source/libs/executor/src/executor.c | 1 + source/libs/executor/src/executorimpl.c | 22 +++++++------- source/libs/executor/src/scanoperator.c | 39 ++++++++----------------- 5 files changed, 45 insertions(+), 57 deletions(-) diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index e4f6b42224..17ab756933 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -1077,7 +1077,7 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN void copyUpdateDataBlock(SSDataBlock* pDest, SSDataBlock* pSource, int32_t tsColIndex); bool groupbyTbname(SNodeList* pGroupList); -int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort); +int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort); void* destroySqlFunctionCtx(SqlFunctionCtx* pCtx, int32_t numOfOutput); int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, SStreamState* pState, SSDataBlock* pBlock, SExprSupp* pSup, SGroupResInfo* pGroupResInfo); diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 877dc5ec27..6b598d7bd3 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -741,7 +741,8 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis int32_t len = (int32_t)(pStart - (char*)keyBuf); info->groupId = calcGroupId(keyBuf, len); - taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &info->groupId, sizeof(uint64_t)); + + taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &i, sizeof(int32_t)); } // int64_t st2 = taosGetTimestampUs(); @@ -1665,29 +1666,29 @@ uint64_t getTotalTables(const STableListInfo* pTableList) { } uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid) { - if (pTableList->oneTableForEachGroup) { - return tableUid; - } + ASSERT(pTableList->map != NULL); + int32_t* slot = taosHashGet(pTableList->map, &tableUid, sizeof(tableUid)); + ASSERT(slot != NULL); - uint64_t* groupId = taosHashGet(pTableList->map, &tableUid, sizeof(tableUid)); - if (groupId != NULL) { - return *groupId; - } else { - return 0; - } + STableKeyInfo* pKeyInfo = taosArrayGet(pTableList->pTableList, *slot); + ASSERT(pKeyInfo->uid == tableUid); + + return pKeyInfo->groupId; } int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t gid) { - STableKeyInfo keyInfo = {.uid = uid, .groupId = gid}; - taosArrayPush(pTableList->pTableList, &keyInfo); - if (!pTableList->oneTableForEachGroup) { - if (pTableList->map == NULL) { - pTableList->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); - } - - taosHashPut(pTableList->map, &uid, sizeof(uid), &keyInfo.groupId, sizeof(keyInfo.groupId)); + if (pTableList->map == NULL) { + ASSERT(taosArrayGetSize(pTableList->pTableList) == 0); + pTableList->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); } + STableKeyInfo keyInfo = {.uid = uid, .groupId = gid}; + taosArrayPush(pTableList->pTableList, &keyInfo); + + int32_t slot = (int32_t)taosArrayGetSize(pTableList->pTableList) - 1; + taosHashPut(pTableList->map, &uid, sizeof(uid), &slot, sizeof(slot)); + + qDebug("uid:%"PRIu64", groupId:%"PRIu64" added into table list, slot:%d, %d", uid, gid, slot, slot + 1); return TSDB_CODE_SUCCESS; } @@ -1724,6 +1725,7 @@ int32_t getNumOfOutputGroups(const STableListInfo* pTableList) { return pTableList->numOfOuputGroups; } +// todo remove it bool oneTableForEachGroup(const STableListInfo* pTableList) { return pTableList->oneTableForEachGroup; } diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index 7f04623612..765968999a 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -360,6 +360,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo if (!exists) { #endif + addTableIntoTableList(pTableListInfo, keyInfo.uid, keyInfo.groupId); } diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 00fef26670..b5c6c5cf39 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3489,11 +3489,8 @@ bool groupbyTbname(SNodeList* pGroupList) { return bytbname; } -int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { +int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { int32_t code = TSDB_CODE_SUCCESS; - if (group == NULL) { - return code; - } pTableListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); if (pTableListInfo->map == NULL) { @@ -3501,19 +3498,22 @@ int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, return code; } - bool assignUid = groupbyTbname(group); + bool groupByTbname = groupbyTbname(group); size_t numOfTables = taosArrayGetSize(pTableListInfo->pTableList); - - if (assignUid) { // in case of group/partition by tbname, the group id is equalled to the uid of table + if (group == NULL || groupByTbname) { for (int32_t i = 0; i < numOfTables; i++) { STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); - info->groupId = info->uid; - taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &info->groupId, sizeof(uint64_t)); + info->groupId = groupByTbname? info->uid:0; + + taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &i, sizeof(int32_t)); } - pTableListInfo->oneTableForEachGroup = true; - if (groupSort) { + pTableListInfo->oneTableForEachGroup = groupByTbname; + + if (groupSort && groupByTbname) { pTableListInfo->numOfOuputGroups = numOfTables; + } else { + pTableListInfo->numOfOuputGroups = 1; } } else { code = getColInfoResultForGroupby(pHandle->meta, group, pTableListInfo); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 6935a9ab93..7524a4ea1a 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1137,12 +1137,13 @@ static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, } static uint64_t getGroupIdByUid(SStreamScanInfo* pInfo, uint64_t uid) { - SHashObj* map = pInfo->pTableScanOp->pTaskInfo->tableqinfoList.map; - uint64_t* groupId = taosHashGet(map, &uid, sizeof(int64_t)); - if (groupId) { - return *groupId; - } - return 0; + return getTableGroupId(&pInfo->pTableScanOp->pTaskInfo->tableqinfoList, uid); +// SHashObj* map = pInfo->pTableScanOp->pTaskInfo->tableqinfoList.map; +// uint64_t* groupId = taosHashGet(map, &uid, sizeof(int64_t)); +// if (groupId) { +// return *groupId; +// } +// return 0; } static uint64_t getGroupIdByData(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, int64_t maxVersion) { @@ -1561,12 +1562,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock pInfo->pRes->info.type = STREAM_NORMAL; pInfo->pRes->info.version = pBlock->info.version; - uint64_t* groupIdPre = taosHashGet(pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupIdPre) { - pInfo->pRes->info.groupId = *groupIdPre; - } else { - pInfo->pRes->info.groupId = 0; - } + pInfo->pRes->info.groupId = getTableGroupId(&pTaskInfo->tableqinfoList, pBlock->info.uid); // todo extract method for (int32_t i = 0; i < taosArrayGetSize(pInfo->matchInfo.pList); ++i) { @@ -4236,7 +4232,7 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags } pTableListInfo->numOfOuputGroups = 1; - code = generateGroupIdMap(pTableListInfo, pHandle, pGroupTags, groupSort); + code = setGroupIdMapForAllTables(pTableListInfo, pHandle, pGroupTags, groupSort); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -4566,10 +4562,7 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { continue; } - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } + pBlock->info.groupId = getTableGroupId(&pOperator->pTaskInfo->tableqinfoList, pBlock->info.uid); pOperator->resultInfo.totalRows += pBlock->info.rows; // pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4626,11 +4619,7 @@ static SSDataBlock* getTableDataBlock2(void* param) { continue; } - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - + pBlock->info.groupId = getTableGroupId(&pOperator->pTaskInfo->tableqinfoList, pBlock->info.uid); pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4684,11 +4673,7 @@ static SSDataBlock* getTableDataBlock(void* param) { continue; } - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - + pBlock->info.groupId = getTableGroupId(&pOperator->pTaskInfo->tableqinfoList, pBlock->info.uid); pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; From 1886087e7b7ce9dee5012dd6a5ab86a32ece0da8 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 18:17:43 +0800 Subject: [PATCH 35/81] refactor: do some internal refactor. --- source/libs/executor/src/executil.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 6b598d7bd3..fe6fb7c2d6 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1658,17 +1658,13 @@ void initLimitInfo(const SNode* pLimit, const SNode* pSLimit, SLimitInfo* pLimit } uint64_t getTotalTables(const STableListInfo* pTableList) { - if (pTableList->map != NULL) { - ASSERT(taosArrayGetSize(pTableList->pTableList) == taosHashGetSize(pTableList->map)); - } - + ASSERT(taosArrayGetSize(pTableList->pTableList) == taosHashGetSize(pTableList->map)); return taosArrayGetSize(pTableList->pTableList); } uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid) { - ASSERT(pTableList->map != NULL); int32_t* slot = taosHashGet(pTableList->map, &tableUid, sizeof(tableUid)); - ASSERT(slot != NULL); + ASSERT(pTableList->map != NULL && slot != NULL); STableKeyInfo* pKeyInfo = taosArrayGet(pTableList->pTableList, *slot); ASSERT(pKeyInfo->uid == tableUid); @@ -1688,7 +1684,7 @@ int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t int32_t slot = (int32_t)taosArrayGetSize(pTableList->pTableList) - 1; taosHashPut(pTableList->map, &uid, sizeof(uid), &slot, sizeof(slot)); - qDebug("uid:%"PRIu64", groupId:%"PRIu64" added into table list, slot:%d, %d", uid, gid, slot, slot + 1); + qDebug("uid:%"PRIu64", groupId:%"PRIu64" added into table list, slot:%d, total:%d", uid, gid, slot, slot + 1); return TSDB_CODE_SUCCESS; } From afdb1467b7dfef70c3039f423b7463a18b0f6654 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 18:27:22 +0800 Subject: [PATCH 36/81] refactor: do some internal refactor. --- source/dnode/vnode/inc/vnode.h | 10 +++++----- source/dnode/vnode/src/tsdb/tsdbRead.c | 22 +++++++++++----------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index d7e4935edd..6200c88d75 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -152,9 +152,9 @@ typedef struct STsdbReader STsdbReader; #define CACHESCAN_RETRIEVE_LAST_ROW 0x4 #define CACHESCAN_RETRIEVE_LAST 0x8 -int32_t tsdbSetTableList(STsdbReader* pReader, const void* pTableList, int32_t num); -int32_t tsdbReaderOpen(SVnode *pVnode, SQueryTableDataCond *pCond, void *pTableList, int32_t numOfTables, - STsdbReader **ppReader, const char *idstr); +int32_t tsdbSetTableList(STsdbReader *pReader, const void *pTableList, int32_t num); +int32_t tsdbReaderOpen(SVnode *pVnode, SQueryTableDataCond *pCond, void *pTableList, int32_t numOfTables, + STsdbReader **ppReader, const char *idstr); void tsdbReaderClose(STsdbReader *pReader); bool tsdbNextDataBlock(STsdbReader *pReader); @@ -169,8 +169,8 @@ void *tsdbGetIdx(SMeta *pMeta); void *tsdbGetIvtIdx(SMeta *pMeta); uint64_t getReaderMaxVersion(STsdbReader *pReader); -int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, void* pTableIdList, int32_t numOfTables, - int32_t numOfCols, uint64_t suid, void** pReader); +int32_t tsdbCacherowsReaderOpen(void *pVnode, int32_t type, void *pTableIdList, int32_t numOfTables, int32_t numOfCols, + uint64_t suid, void **pReader); int32_t tsdbRetrieveCacheRows(void *pReader, SSDataBlock *pResBlock, const int32_t *slotIds, SArray *pTableUids); void *tsdbCacherowsReaderClose(void *pReader); int32_t tsdbGetTableSchema(SVnode *pVnode, int64_t uid, STSchema **pSchema, int64_t *suid); diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 8ebee92d15..808763b97c 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -426,7 +426,7 @@ static bool filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader) { return true; } - _err: +_err: return false; } @@ -528,7 +528,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd *ppReader = pReader; return code; - _end: +_end: tsdbReaderClose(pReader); *ppReader = NULL; return code; @@ -580,7 +580,7 @@ static int32_t doLoadBlockIndex(STsdbReader* pReader, SDataFReader* pFileReader, pReader->cost.headFileLoadTime += (et1 - st) / 1000.0; - _end: +_end: taosArrayDestroy(aBlockIdx); return code; } @@ -1405,8 +1405,8 @@ static bool fileBlockShouldLoad(STsdbReader* pReader, SFileDataBlockInfo* pBlock // log the reason why load the datablock for profile if (loadDataBlock) { tsdbDebug("%p uid:%" PRIu64 - " need to load the datablock, overlapwithneighborblock:%d, hasDup:%d, partiallyRequired:%d, " - "overlapWithKey:%d, greaterThanBuf:%d, overlapWithDel:%d, overlapWithlastBlock:%d, %s", + " need to load the datablock, overlapwithneighborblock:%d, hasDup:%d, partiallyRequired:%d, " + "overlapWithKey:%d, greaterThanBuf:%d, overlapWithDel:%d, overlapWithlastBlock:%d, %s", pReader, pBlockInfo->uid, info.overlapWithNeighborBlock, info.hasDupTs, info.partiallyRequired, info.overlapWithKeyInBuf, info.moreThanCapcity, info.overlapWithDelInfo, info.overlapWithLastBlock, pReader->idStr); @@ -2039,7 +2039,7 @@ static int32_t initMemDataIterator(STableBlockScanInfo* pBlockScanInfo, STsdbRea pBlockScanInfo->iter.hasVal = (tsdbTbDataIterGet(pBlockScanInfo->iter.iter) != NULL); tsdbDebug("%p uid:%" PRId64 ", check data in mem from skey:%" PRId64 ", order:%d, ts range in buf:%" PRId64 - "-%" PRId64 " %s", + "-%" PRId64 " %s", pReader, pBlockScanInfo->uid, startKey.ts, pReader->order, d->minKey, d->maxKey, pReader->idStr); } else { tsdbError("%p uid:%" PRId64 ", failed to create iterator for imem, code:%s, %s", pReader, pBlockScanInfo->uid, @@ -2060,7 +2060,7 @@ static int32_t initMemDataIterator(STableBlockScanInfo* pBlockScanInfo, STsdbRea pBlockScanInfo->iiter.hasVal = (tsdbTbDataIterGet(pBlockScanInfo->iiter.iter) != NULL); tsdbDebug("%p uid:%" PRId64 ", check data in imem from skey:%" PRId64 ", order:%d, ts range in buf:%" PRId64 - "-%" PRId64 " %s", + "-%" PRId64 " %s", pReader, pBlockScanInfo->uid, startKey.ts, pReader->order, di->minKey, di->maxKey, pReader->idStr); } else { tsdbError("%p uid:%" PRId64 ", failed to create iterator for mem, code:%s, %s", pReader, pBlockScanInfo->uid, @@ -2295,7 +2295,7 @@ static int32_t buildComposedDataBlock(STsdbReader* pReader) { } } - _end: +_end: pResBlock->info.uid = (pBlockScanInfo != NULL) ? pBlockScanInfo->uid : 0; blockDataUpdateTsWindow(pResBlock, 0); @@ -2388,13 +2388,13 @@ int32_t initDelSkylineIterator(STableBlockScanInfo* pBlockScanInfo, STsdbReader* taosArrayDestroy(pDelData); pBlockScanInfo->iter.index = - ASCENDING_TRAVERSE(pReader->order) ? 0 : taosArrayGetSize(pBlockScanInfo->delSkyline) - 1; + ASCENDING_TRAVERSE(pReader->order) ? 0 : taosArrayGetSize(pBlockScanInfo->delSkyline) - 1; pBlockScanInfo->iiter.index = pBlockScanInfo->iter.index; pBlockScanInfo->fileDelIndex = pBlockScanInfo->iter.index; pBlockScanInfo->lastBlockDelIndex = pBlockScanInfo->iter.index; return code; - _err: +_err: taosArrayDestroy(pDelData); return code; } @@ -2725,7 +2725,7 @@ static int32_t buildBlockFromFiles(STsdbReader* pReader) { SDataBlockIter* pBlockIter = &pReader->status.blockIter; if (pBlockIter->numOfBlocks == 0) { - _begin: + _begin: code = doLoadLastBlockSequentially(pReader); if (code != TSDB_CODE_SUCCESS) { return code; From 6fc0e1b60d48374500fc09a0520286ce5dfc01e8 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 18:32:17 +0800 Subject: [PATCH 37/81] refactor: do some internal refactor. --- source/libs/executor/src/executil.c | 41 +++++++++++++---------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index fe6fb7c2d6..57a6645215 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -337,8 +337,8 @@ static EDealRes getColumn(SNode** pNode, void* pContext) { taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), pNode, sizeof((*pNode))); pSColumnNode->slotId = pData->index++; SColumnInfo cInfo = {.colId = pSColumnNode->colId, - .type = pSColumnNode->node.resType.type, - .bytes = pSColumnNode->node.resType.bytes}; + .type = pSColumnNode->node.resType.type, + .bytes = pSColumnNode->node.resType.bytes}; #if TAG_FILTER_DEBUG qDebug("tagfilter build column info, slotId:%d, colId:%d, type:%d", pSColumnNode->slotId, cInfo.colId, cInfo.type); #endif @@ -507,7 +507,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, int64_t suid, SArray* // int64_t st2 = taosGetTimestampUs(); // qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); - end: +end: taosHashCleanup(tags); taosHashCleanup(ctx.colHash); taosArrayDestroy(ctx.cInfoList); @@ -748,7 +748,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis // int64_t st2 = taosGetTimestampUs(); // qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); - end: +end: taosMemoryFreeClear(keyBuf); taosHashCleanup(tags); taosHashCleanup(ctx.colHash); @@ -828,24 +828,24 @@ static int32_t removeInvalidTable(SArray* uids, SHashObj* tags) { } static int32_t nameComparFn(const void* p1, const void* p2) { - const char* pName1 = *(const char**) p1; - const char* pName2 = *(const char**) p2; + const char* pName1 = *(const char**)p1; + const char* pName2 = *(const char**)p2; int32_t ret = strcmp(pName1, pName2); if (ret == 0) { return 0; } else { - return (ret > 0)? 1:-1; + return (ret > 0) ? 1 : -1; } } static SArray* getTableNameList(const SNodeListNode* pList) { - int32_t len = LIST_LENGTH(pList->pNodeList); + int32_t len = LIST_LENGTH(pList->pNodeList); SListCell* cell = pList->pNodeList->pHead; SArray* pTbList = taosArrayInit(len, POINTER_BYTES); for (int i = 0; i < pList->pNodeList->length; i++) { - SValueNode* valueNode = (SValueNode*) cell->pNode; + SValueNode* valueNode = (SValueNode*)cell->pNode; if (!IS_VAR_DATA_TYPE(valueNode->node.resType.type)) { terrno = TSDB_CODE_INVALID_PARA; taosArrayDestroy(pTbList); @@ -1120,7 +1120,7 @@ SArray* extractPartitionColInfo(SNodeList* pNodeList) { int32_t extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNodeList, int32_t* numOfOutputCols, int32_t type, SColMatchInfo* pMatchInfo) { - size_t numOfCols = LIST_LENGTH(pNodeList); + size_t numOfCols = LIST_LENGTH(pNodeList); int32_t code = 0; pMatchInfo->matchType = type; @@ -1463,10 +1463,10 @@ void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray while (i < numOfSrcCols && j < taosArrayGetSize(pColMatchInfo)) { SColumnInfoData* p = taosArrayGet(pCols, i); SColMatchItem* pmInfo = taosArrayGet(pColMatchInfo, j); -/* if (!outputEveryColumn && pmInfo->reserved) { - j++; - continue; - }*/ + /* if (!outputEveryColumn && pmInfo->reserved) { + j++; + continue; + }*/ if (p->info.colId == pmInfo->colId) { SColumnInfoData* pDst = taosArrayGet(pBlock->pDataBlock, pmInfo->dstSlotId); @@ -1684,11 +1684,12 @@ int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t int32_t slot = (int32_t)taosArrayGetSize(pTableList->pTableList) - 1; taosHashPut(pTableList->map, &uid, sizeof(uid), &slot, sizeof(slot)); - qDebug("uid:%"PRIu64", groupId:%"PRIu64" added into table list, slot:%d, total:%d", uid, gid, slot, slot + 1); + qDebug("uid:%" PRIu64 ", groupId:%" PRIu64 " added into table list, slot:%d, total:%d", uid, gid, slot, slot + 1); return TSDB_CODE_SUCCESS; } -int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupIndex, STableKeyInfo** pKeyInfo, int32_t* size) { +int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupIndex, STableKeyInfo** pKeyInfo, + int32_t* size) { int32_t total = getNumOfOutputGroups(pTableList); if (ordinalGroupIndex < 0 || ordinalGroupIndex >= total) { return TSDB_CODE_INVALID_PARA; @@ -1717,14 +1718,10 @@ int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupI return TSDB_CODE_SUCCESS; } -int32_t getNumOfOutputGroups(const STableListInfo* pTableList) { - return pTableList->numOfOuputGroups; -} +int32_t getNumOfOutputGroups(const STableListInfo* pTableList) { return pTableList->numOfOuputGroups; } // todo remove it -bool oneTableForEachGroup(const STableListInfo* pTableList) { - return pTableList->oneTableForEachGroup; -} +bool oneTableForEachGroup(const STableListInfo* pTableList) { return pTableList->oneTableForEachGroup; } void destroyTableList(STableListInfo* pTableqinfoList) { pTableqinfoList->pTableList = taosArrayDestroy(pTableqinfoList->pTableList); From 21364c4041ca2b02246fa71d8f0babf4d01a7dac Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Sat, 29 Oct 2022 18:34:42 +0800 Subject: [PATCH 38/81] fix: add api ut cases --- source/libs/catalog/src/catalog.c | 2 + source/libs/catalog/test/catalogTests.cpp | 94 +++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/source/libs/catalog/src/catalog.c b/source/libs/catalog/src/catalog.c index 8f621545c9..b6a22b5fa7 100644 --- a/source/libs/catalog/src/catalog.c +++ b/source/libs/catalog/src/catalog.c @@ -1114,6 +1114,7 @@ int32_t catalogGetCachedTableHashVgroup(SCatalog* pCtg, SRequestConnInfo* pConn, CTG_API_LEAVE(ctgGetTbHashVgroup(pCtg, pConn, pTableName, pVgroup, exists)); } +#if 0 int32_t catalogGetAllMeta(SCatalog* pCtg, SRequestConnInfo* pConn, const SCatalogReq* pReq, SMetaData* pRsp) { CTG_API_ENTER(); @@ -1176,6 +1177,7 @@ _return: CTG_API_LEAVE(code); } +#endif int32_t catalogAsyncGetAllMeta(SCatalog* pCtg, SRequestConnInfo* pConn, const SCatalogReq* pReq, catalogCallback fp, void* param, int64_t* jobId) { diff --git a/source/libs/catalog/test/catalogTests.cpp b/source/libs/catalog/test/catalogTests.cpp index de34868c55..0bdd9841ab 100644 --- a/source/libs/catalog/test/catalogTests.cpp +++ b/source/libs/catalog/test/catalogTests.cpp @@ -63,6 +63,7 @@ enum { CTGT_RSP_QNODELIST, CTGT_RSP_UDF, CTGT_RSP_SVRVER, + CTGT_RSP_DNODElIST, CTGT_RSP_TBMETA_NOT_EXIST, }; @@ -702,6 +703,30 @@ void ctgTestRspSvrVer(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRs pRsp->pCont = pReq; } +void ctgTestRspDndeList(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) { + rpcFreeCont(pMsg->pCont); + + SDnodeListRsp dRsp = {0}; + dRsp.dnodeList = taosArrayInit(1, sizeof(SEpSet)); + SEpSet epSet = {0}; + epSet.numOfEps = 1; + tstrncpy(epSet.eps[0].fqdn, "localhost", TSDB_FQDN_LEN); + epSet.eps[0].port = 6030; + + (void)taosArrayPush(dRsp.dnodeList, &epSet); + + int32_t rspLen = tSerializeSDnodeListRsp(NULL, 0, &dRsp); + void *pReq = rpcMallocCont(rspLen); + tSerializeSDnodeListRsp(pReq, rspLen, &dRsp); + + pRsp->code = 0; + pRsp->contLen = rspLen; + pRsp->pCont = pReq; + + tFreeSDnodeListRsp(&dRsp); +} + + void ctgTestRspAuto(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) { switch (pMsg->msgType) { @@ -727,6 +752,9 @@ void ctgTestRspAuto(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) case TDMT_MND_SERVER_VERSION: ctgTestRspSvrVer(shandle, pEpSet, pMsg, pRsp); break; + case TDMT_MND_DNODE_LIST: + ctgTestRspDndeList(shandle, pEpSet, pMsg, pRsp); + break; default: break; } @@ -779,6 +807,9 @@ void ctgTestRspByIdx(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp case CTGT_RSP_SVRVER: ctgTestRspSvrVer(shandle, pEpSet, pMsg, pRsp); break; + case CTGT_RSP_DNODElIST: + ctgTestRspDndeList(shandle, pEpSet, pMsg, pRsp); + break; default: ctgTestRspAuto(shandle, pEpSet, pMsg, pRsp); break; @@ -2948,6 +2979,69 @@ TEST(apiTest, catalogGetServerVersion_test) { catalogDestroy(); } +TEST(apiTest, catalogUpdateTableIndex_test) { + struct SCatalog *pCtg = NULL; + SRequestConnInfo connInfo = {0}; + SRequestConnInfo *mockPointer = (SRequestConnInfo *)&connInfo; + + ctgTestInitLogFile(); + + memset(ctgTestRspFunc, 0, sizeof(ctgTestRspFunc)); + ctgTestRspIdx = 0; + ctgTestRspFunc[0] = CTGT_RSP_SVRVER; + + ctgTestSetRspByIdx(); + + initQueryModuleMsgHandle(); + + int32_t code = catalogInit(NULL); + ASSERT_EQ(code, 0); + + code = catalogGetHandle(ctgTestClusterId, &pCtg); + ASSERT_EQ(code, 0); + + STableIndexRsp rsp = {0}; + strcpy(rsp.dbFName, ctgTestDbname); + strcpy(rsp.tbName, ctgTestSTablename); + rsp.suid = ctgTestSuid; + rsp.version = 1; + code = catalogUpdateTableIndex(pCtg, &rsp); + ASSERT_EQ(code, 0); + + catalogDestroy(); +} + + +TEST(apiTest, catalogGetDnodeList_test) { + struct SCatalog *pCtg = NULL; + SRequestConnInfo connInfo = {0}; + SRequestConnInfo *mockPointer = (SRequestConnInfo *)&connInfo; + + ctgTestInitLogFile(); + + memset(ctgTestRspFunc, 0, sizeof(ctgTestRspFunc)); + ctgTestRspIdx = 0; + ctgTestRspFunc[0] = CTGT_RSP_DNODElIST; + + ctgTestSetRspByIdx(); + + initQueryModuleMsgHandle(); + + int32_t code = catalogInit(NULL); + ASSERT_EQ(code, 0); + + code = catalogGetHandle(ctgTestClusterId, &pCtg); + ASSERT_EQ(code, 0); + + SArray* pList = NULL; + code = catalogGetDnodeList(pCtg, mockPointer, &pList); + ASSERT_EQ(code, 0); + ASSERT_EQ(taosArrayGetSize(pList), 1); + + taosArrayDestroy(pList); + + catalogDestroy(); +} int main(int argc, char **argv) { From e182637af59e29336ef2770f8d52eae9a0224f69 Mon Sep 17 00:00:00 2001 From: Cary Xu Date: Sat, 29 Oct 2022 19:58:44 +0800 Subject: [PATCH 39/81] fix: make test pass when running tfs_test standalone in mac --- source/libs/tfs/test/tfsTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/tfs/test/tfsTest.cpp b/source/libs/tfs/test/tfsTest.cpp index f4b0adf1f7..df37630fd7 100644 --- a/source/libs/tfs/test/tfsTest.cpp +++ b/source/libs/tfs/test/tfsTest.cpp @@ -42,7 +42,7 @@ TEST_F(TfsTest, 01_Open_Close) { STfs *pTfs = tfsOpen(&dCfg, 1); ASSERT_EQ(pTfs, nullptr); - taosMkDir(root); + taosMulMkDir(root); pTfs = tfsOpen(&dCfg, 1); ASSERT_NE(pTfs, nullptr); From 4e7478279956c5f0776f9c7459ab60effe3d1871 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 29 Oct 2022 20:47:14 +0800 Subject: [PATCH 40/81] refactor: do some internal refactor. --- source/libs/executor/src/executil.c | 2 -- source/libs/executor/src/executorimpl.c | 28 +++++++++++++++------- source/libs/executor/src/scanoperator.c | 31 +++++++++++-------------- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 57a6645215..5b417999b4 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -741,8 +741,6 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis int32_t len = (int32_t)(pStart - (char*)keyBuf); info->groupId = calcGroupId(keyBuf, len); - - taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &i, sizeof(int32_t)); } // int64_t st2 = taosGetTimestampUs(); diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index b5c6c5cf39..e31a34e5ad 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3379,7 +3379,7 @@ static int32_t sortTableGroup(STableListInfo* pTableListInfo) { int32_t code = TSDB_CODE_SUCCESS; taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); - int32_t size = getTotalTables(pTableListInfo); + int32_t size = taosArrayGetSize(pTableListInfo->pTableList); SArray* pList = taosArrayInit(4, sizeof(int32_t)); @@ -3403,7 +3403,6 @@ static int32_t sortTableGroup(STableListInfo* pTableListInfo) { taosArrayDestroy(pList); # if 0 - SArray* sortSupport = taosArrayInit(16, sizeof(uint64_t)); if (sortSupport == NULL) { return TSDB_CODE_OUT_OF_MEMORY; @@ -3504,13 +3503,12 @@ int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* p for (int32_t i = 0; i < numOfTables; i++) { STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); info->groupId = groupByTbname? info->uid:0; - - taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &i, sizeof(int32_t)); } pTableListInfo->oneTableForEachGroup = groupByTbname; if (groupSort && groupByTbname) { + taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); pTableListInfo->numOfOuputGroups = numOfTables; } else { pTableListInfo->numOfOuputGroups = 1; @@ -3526,6 +3524,13 @@ int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* p } } + // add all table entry in the hash map + size_t size = taosArrayGetSize(pTableListInfo->pTableList); + for(int32_t i = 0; i < size; ++i) { + STableKeyInfo* p = taosArrayGet(pTableListInfo->pTableList, i); + taosHashPut(pTableListInfo->map, &p->uid, sizeof(uint64_t), &i, sizeof(int32_t)); + } + return code; } @@ -3590,7 +3595,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo } else if (QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN == type) { STableMergeScanPhysiNode* pTableScanNode = (STableMergeScanPhysiNode*)pPhyNode; int32_t code = - createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, pHandle, + createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, /*pTableScanNode->groupSort*/true, pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); if (code) { pTaskInfo->code = code; @@ -3652,16 +3657,23 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo } else if (QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN == type) { SBlockDistScanPhysiNode* pBlockNode = (SBlockDistScanPhysiNode*)pPhyNode; pTableListInfo->pTableList = taosArrayInit(4, sizeof(STableKeyInfo)); + pTableListInfo->numOfOuputGroups = 1; if (pBlockNode->tableType == TSDB_SUPER_TABLE) { - int32_t code = vnodeGetAllTableList(pHandle->vnode, pBlockNode->uid, pTableListInfo->pTableList); + SArray* pList = taosArrayInit(4, sizeof(STableKeyInfo)); + int32_t code = vnodeGetAllTableList(pHandle->vnode, pBlockNode->uid, pList); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = terrno; return NULL; } + + for(int32_t i = 0; i < taosArrayGetSize(pTableListInfo->pTableList); ++i) { + STableKeyInfo* p = taosArrayGet(pList, i); + addTableIntoTableList(pTableListInfo, p->uid, 0); + } + taosArrayDestroy(pList); } else { // Create one table group. - STableKeyInfo info = {.uid = pBlockNode->uid, .groupId = 0}; - taosArrayPush(pTableListInfo->pTableList, &info); + addTableIntoTableList(pTableListInfo, pBlockNode->uid, 0); } SQueryTableDataCond cond = {0}; diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 7524a4ea1a..766d7ec18c 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1118,6 +1118,8 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo); + + pBlock->info.groupId = getTableGroupId(&pTaskInfo->tableqinfoList, binfo.uid); } tsdbReaderClose(pReader); @@ -3050,11 +3052,11 @@ static int32_t sysFilte__TableName(void* arg, SNode* pNode, SArray* result) { if (func == NULL) return -1; SMetaFltParam param = {.suid = 0, - .cid = 0, - .type = TSDB_DATA_TYPE_VARCHAR, - .val = pVal->datum.p, - .reverse = reverse, - .filterFunc = func}; + .cid = 0, + .type = TSDB_DATA_TYPE_VARCHAR, + .val = pVal->datum.p, + .reverse = reverse, + .filterFunc = func}; return -1; } @@ -3069,11 +3071,11 @@ static int32_t sysFilte__CreateTime(void* arg, SNode* pNode, SArray* result) { if (func == NULL) return -1; SMetaFltParam param = {.suid = 0, - .cid = 0, - .type = TSDB_DATA_TYPE_BIGINT, - .val = &pVal->datum.i, - .reverse = reverse, - .filterFunc = func}; + .cid = 0, + .type = TSDB_DATA_TYPE_BIGINT, + .val = &pVal->datum.i, + .reverse = reverse, + .filterFunc = func}; int32_t ret = metaFilterCreateTime(pMeta, ¶m, result); return ret; @@ -4746,9 +4748,6 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { pInfo->queryConds = taosArrayInit(numOfTable, sizeof(SQueryTableDataCond)); for (int32_t i = 0; i < numOfTable; ++i) { - STableKeyInfo* tableKeyInfo = taosArrayGet(pInfo->tableListInfo->pTableList, i + tableStartIdx); - size_t numReaders = taosArrayGetSize(pInfo->dataReaders); - STableMergeScanSortSourceParam param = {0}; param.readerIdx = i; param.pOperator = pOperator; @@ -4959,10 +4958,6 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN goto _error; } - if (pTableScanNode->pGroupTags) { - taosArraySort(pTableListInfo->pTableList, compareTableKeyInfoByGid); - } - SDataBlockDescNode* pDescNode = pTableScanNode->scan.node.pOutputDataBlockDesc; int32_t numOfCols = 0; @@ -5016,7 +5011,7 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN pOperator->cost.openCost = 0; return pOperator; - _error: +_error: pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; taosMemoryFree(pInfo); taosMemoryFree(pOperator); From f52000d86eed69ae8c96b7199b208a0a0a150f68 Mon Sep 17 00:00:00 2001 From: gccgdb1234 Date: Sat, 29 Oct 2022 22:25:40 +0800 Subject: [PATCH 41/81] return mem to os --- include/os/osMemory.h | 1 + source/dnode/mgmt/mgmt_dnode/src/dmWorker.c | 3 ++- source/os/src/osMemory.c | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/os/osMemory.h b/include/os/osMemory.h index 7ec8366ee4..14d53a7a06 100644 --- a/include/os/osMemory.h +++ b/include/os/osMemory.h @@ -36,6 +36,7 @@ void *taosMemoryStrDup(const char *ptr); void taosMemoryFree(void *ptr); int64_t taosMemorySize(void *ptr); void taosPrintBackTrace(); +void taosMemoryTrim(int32_t size); #define taosMemoryFreeClear(ptr) \ do { \ diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c index ca8a434d05..07a612bb35 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c @@ -20,7 +20,7 @@ static void *dmStatusThreadFp(void *param) { SDnodeMgmt *pMgmt = param; int64_t lastTime = taosGetTimestampMs(); setThreadName("dnode-status"); - + while (1) { taosMsleep(200); if (pMgmt->pData->dropped || pMgmt->pData->stopped) break; @@ -28,6 +28,7 @@ static void *dmStatusThreadFp(void *param) { int64_t curTime = taosGetTimestampMs(); float interval = (curTime - lastTime) / 1000.0f; if (interval >= tsStatusInterval) { + taosMemoryTrim(0); dmSendStatusReq(pMgmt); lastTime = curTime; } diff --git a/source/os/src/osMemory.c b/source/os/src/osMemory.c index 75a963d5c7..2949d08d61 100644 --- a/source/os/src/osMemory.c +++ b/source/os/src/osMemory.c @@ -336,3 +336,7 @@ int64_t taosMemorySize(void *ptr) { #endif #endif } + +void taosMemoryTrim(int32_t size) { + malloc_trim(size); +} From 2c524cad4a7003afd4508a62f98779421ccad5e5 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sun, 30 Oct 2022 03:08:33 +0800 Subject: [PATCH 42/81] refactor: do some internal refactor. --- source/libs/executor/src/executil.c | 7 ++++++- source/libs/executor/src/executorimpl.c | 6 +++--- source/libs/executor/src/scanoperator.c | 3 ++- tests/system-test/1-insert/create_retentions.py | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 5b417999b4..bb65a9f7f2 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1697,7 +1697,12 @@ int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupI // 1. only one group exists, and 2. one table exists for each group. if (total == 1) { *size = getTotalTables(pTableList); - *pKeyInfo = taosArrayGet(pTableList->pTableList, 0); + if (*size > 0) { + *pKeyInfo = taosArrayGet(pTableList->pTableList, 0); + } else { + *pKeyInfo = NULL; + } + return TSDB_CODE_SUCCESS; } else if (total == getTotalTables(pTableList)) { *size = 1; diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index e31a34e5ad..54c92c10bd 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3630,12 +3630,12 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo #ifndef NDEBUG int32_t sz = taosArrayGetSize(pTableListInfo->pTableList); + qDebug("create stream task, total:%d", sz); + for (int32_t i = 0; i < sz; i++) { STableKeyInfo* pKeyInfo = taosArrayGet(pTableListInfo->pTableList, i); - qDebug("creating stream task: add table uid:%" PRIu64, pKeyInfo->uid); + qDebug("add table uid:%" PRIu64", gid:%"PRIu64, pKeyInfo->uid, pKeyInfo->groupId); } - - qDebug("table in hashmap, %d", (int32_t) getTotalTables(pTableListInfo)); #endif } diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 766d7ec18c..415fa60287 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -4225,6 +4225,8 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags return code; } + pTableListInfo->numOfOuputGroups = 1; + int64_t st1 = taosGetTimestampUs(); qDebug("generate queried table list completed, elapsed time:%.2f ms %s", (st1 - st) / 1000.0, idStr); @@ -4233,7 +4235,6 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags return TSDB_CODE_SUCCESS; } - pTableListInfo->numOfOuputGroups = 1; code = setGroupIdMapForAllTables(pTableListInfo, pHandle, pGroupTags, groupSort); if (code != TSDB_CODE_SUCCESS) { return code; diff --git a/tests/system-test/1-insert/create_retentions.py b/tests/system-test/1-insert/create_retentions.py index 54abcec391..47d53d5b34 100644 --- a/tests/system-test/1-insert/create_retentions.py +++ b/tests/system-test/1-insert/create_retentions.py @@ -46,7 +46,7 @@ class TDTestCase: def init(self, conn, logSql): tdLog.debug(f"start to excute {__file__}") - tdSql.init(conn.cursor(), False) + tdSql.init(conn.cursor(), True) @property def create_databases_sql_err(self): From 365e6eec808ee4c177545427a01eafa3732a3cab Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sun, 30 Oct 2022 11:29:55 +0800 Subject: [PATCH 43/81] refactor: do some internal refactor. --- source/libs/executor/src/executil.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index bb65a9f7f2..0f2e5194c1 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1697,12 +1697,7 @@ int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupI // 1. only one group exists, and 2. one table exists for each group. if (total == 1) { *size = getTotalTables(pTableList); - if (*size > 0) { - *pKeyInfo = taosArrayGet(pTableList->pTableList, 0); - } else { - *pKeyInfo = NULL; - } - + *pKeyInfo = (*size == 0)? NULL:taosArrayGet(pTableList->pTableList, 0); return TSDB_CODE_SUCCESS; } else if (total == getTotalTables(pTableList)) { *size = 1; @@ -1723,7 +1718,6 @@ int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupI int32_t getNumOfOutputGroups(const STableListInfo* pTableList) { return pTableList->numOfOuputGroups; } -// todo remove it bool oneTableForEachGroup(const STableListInfo* pTableList) { return pTableList->oneTableForEachGroup; } void destroyTableList(STableListInfo* pTableqinfoList) { From 8e22c89136ea15cfc2e876380435183bcaa8059d Mon Sep 17 00:00:00 2001 From: Cary Xu Date: Sun, 30 Oct 2022 12:45:55 +0800 Subject: [PATCH 44/81] fix: coverity scan problem for trow --- source/common/src/trow.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/common/src/trow.c b/source/common/src/trow.c index b007075efe..e4818aaa87 100644 --- a/source/common/src/trow.c +++ b/source/common/src/trow.c @@ -73,7 +73,13 @@ void tdSCellValPrint(SCellVal *pVal, int8_t colType) { } else if (tdValTypeIsNone(pVal->valType)) { printf("NONE "); return; + } + if(!pVal->val) { + ASSERT(0); + printf("BadVal "); + return; } + switch (colType) { case TSDB_DATA_TYPE_BOOL: printf("%s ", (*(int8_t *)pVal->val) == 0 ? "false" : "true"); @@ -678,6 +684,10 @@ int32_t tdAppendColValToRow(SRowBuilder *pBuilder, col_id_t colId, int8_t colTyp } // TS KEY is stored in STSRow.ts and not included in STSRow.data field. if (colId == PRIMARYKEY_TIMESTAMP_COL_ID) { + if (!val) { + terrno = TSDB_CODE_INVALID_PARA; + return terrno; + } TD_ROW_KEY(pRow) = *(TSKEY *)val; // The primary TS key is Norm all the time, thus its valType is not stored in bitmap. return TSDB_CODE_SUCCESS; From 93e75c73caf83f18f7401e545fa96627719f1f6c Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Sun, 30 Oct 2022 14:01:43 +0800 Subject: [PATCH 45/81] fix: taosadapter build on windows (#17763) * fix: taosadapter build on windows * fix: disable taosadapter build on windows temporarily --- tools/CMakeLists.txt | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index e01796617d..79be05e9fc 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -86,9 +86,34 @@ ELSE () ) MESSAGE("CURRENT SOURCE DIR ${CMAKE_CURRENT_SOURCE_DIR}") - include(ExternalProject) + IF (TD_WINDOWS) + INCLUDE(ExternalProject) + ExternalProject_Add(taosadapter + PREFIX "taosadapter" + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosadapter + BUILD_ALWAYS off + DEPENDS taos + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND cmake -E echo "taosadapter no need cmake to config" + PATCH_COMMAND + COMMAND git clean -f -d + BUILD_COMMAND + COMMAND set CGO_CFLAGS=-I${CMAKE_CURRENT_SOURCE_DIR}/../include/client + COMMAND set CGO_LDFLAGS=-L${CMAKE_BINARY_DIR}/build/lib + COMMAND go build -a -o taosadapter.exe -ldflags "-s -w -X github.com/taosdata/taosadapter/v3/version.Version=${taos_version} -X github.com/taosdata/taosadapter/v3/version.CommitID=${taosadapter_commit_sha1}" + COMMAND go build -a -o taosadapter-debug.exe -ldflags "-X github.com/taosdata/taosadapter/v3/version.Version=${taos_version} -X github.com/taosdata/taosadapter/v3/version.CommitID=${taosadapter_commit_sha1}" - ExternalProject_Add(taosadapter + INSTALL_COMMAND + COMMAND cmake -E time upx taosadapter ||: + COMMAND cmake -E copy taosadapter.exe ${CMAKE_BINARY_DIR}/build/bin + COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/test/cfg/ + COMMAND cmake -E copy ./example/config/taosadapter.toml ${CMAKE_BINARY_DIR}/test/cfg/ + COMMAND cmake -E copy ./taosadapter.service ${CMAKE_BINARY_DIR}/test/cfg/ + COMMAND cmake -E copy taosadapter-debug.exe ${CMAKE_BINARY_DIR}/build/bin + ) + ELSE (TD_WINDOWS) + INCLUDE(ExternalProject) + ExternalProject_Add(taosadapter PREFIX "taosadapter" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosadapter BUILD_ALWAYS off @@ -108,4 +133,5 @@ ELSE () COMMAND cmake -E copy ./taosadapter.service ${CMAKE_BINARY_DIR}/test/cfg/ COMMAND cmake -E copy taosadapter-debug ${CMAKE_BINARY_DIR}/build/bin ) + ENDIF (TD_WINDOWS) ENDIF () From acb663421665d665b729e5c5a02c622d3d5c64bc Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Sun, 30 Oct 2022 20:07:41 +0800 Subject: [PATCH 46/81] enh: set sst trigger default value from 8 to 1 --- include/util/tdef.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/util/tdef.h b/include/util/tdef.h index e298509ad6..6e1fa87854 100644 --- a/include/util/tdef.h +++ b/include/util/tdef.h @@ -360,7 +360,7 @@ typedef enum ELogicConditionType { #define TSDB_DEFAULT_DB_SCHEMALESS TSDB_DB_SCHEMALESS_OFF #define TSDB_MIN_STT_TRIGGER 1 #define TSDB_MAX_STT_TRIGGER 16 -#define TSDB_DEFAULT_SST_TRIGGER 8 +#define TSDB_DEFAULT_SST_TRIGGER 1 #define TSDB_MIN_HASH_PREFIX 0 #define TSDB_MAX_HASH_PREFIX 128 #define TSDB_DEFAULT_HASH_PREFIX 0 From f990ceab6e22b24b5cc4e760e4e767b4fad8e24e Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sun, 30 Oct 2022 22:13:49 +0800 Subject: [PATCH 47/81] refactor: do some internal refactor. --- source/libs/executor/inc/executil.h | 36 +-- source/libs/executor/inc/executorimpl.h | 3 +- source/libs/executor/src/cachescanoperator.c | 24 +- source/libs/executor/src/executil.c | 296 +++++++++++++++++-- source/libs/executor/src/executor.c | 40 +-- source/libs/executor/src/executorimpl.c | 190 +----------- source/libs/executor/src/scanoperator.c | 99 ++----- 7 files changed, 368 insertions(+), 320 deletions(-) diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index 1965a8cbf6..306b7443b5 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -95,27 +95,21 @@ typedef struct SColMatchInfo { int32_t matchType; // determinate the source according to col id or slot id } SColMatchInfo; -// If the numOfOutputGroups is 1, the data blocks that belongs to different groups will be provided randomly -// The numOfOutputGroups is specified by physical plan. and will not be affect by numOfGroups -typedef struct STableListInfo { - bool oneTableForEachGroup; - int32_t numOfOuputGroups; // the data block will be generated one by one - int32_t* groupOffset; // keep the offset value for each group in the tableList - SArray* pTableList; - SHashObj* map; // speedup acquire the tableQueryInfo by table uid - uint64_t suid; -} STableListInfo; - -void destroyTableList(STableListInfo* pTableList); -int32_t getNumOfOutputGroups(const STableListInfo* pTableList); -bool oneTableForEachGroup(const STableListInfo* pTableList); -uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid); -int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t gid); -int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalIndex, STableKeyInfo** pKeyInfo, int32_t* num); -uint64_t getTotalTables(const STableListInfo* pTableList); - +typedef struct STableListInfo STableListInfo; struct SqlFunctionCtx; +STableListInfo*tableListCreate(); +void* tableListDestroy(STableListInfo* pTableListInfo); +void tableListClear(STableListInfo* pTableListInfo); +int32_t tableListGetOutputGroups(const STableListInfo* pTableList); +bool oneTableForEachGroup(const STableListInfo* pTableList); +uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid); +int32_t tableListAddTableInfo(STableListInfo* pTableList, uint64_t uid, uint64_t gid); +int32_t tableListGetGroupList(const STableListInfo* pTableList, int32_t ordinalIndex, STableKeyInfo** pKeyInfo, int32_t* num); +uint64_t tableListGetSize(const STableListInfo* pTableList); +uint64_t tableListGetSuid(const STableListInfo* pTableList); +STableKeyInfo* tableListGetInfo(const STableListInfo* pTableList, int32_t index); + size_t getResultRowSize(struct SqlFunctionCtx* pCtx, int32_t numOfOutput); void initResultRowInfo(SResultRowInfo* pResultRowInfo); void closeResultRow(SResultRow* pResultRow); @@ -128,6 +122,7 @@ static FORCE_INLINE SResultRow* getResultRowByPos(SDiskbasedBuf* pBuf, SResultRo if (forUpdate) { setBufPageDirty(bufPage, true); } + SResultRow* pRow = (SResultRow*)((char*)bufPage + pos->offset); return pRow; } @@ -146,7 +141,6 @@ EDealRes doTranslateTagExpr(SNode** pNode, void* pContext); int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, SNode* pTagIndexCond, STableListInfo* pListInfo); int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode, char* keyBuf, uint64_t* pGroupId); -int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableListInfo* pTableListInfo); size_t getTableTagsBufLen(const SNodeList* pGroups); SArray* createSortInfo(SNodeList* pNodeList); @@ -169,9 +163,7 @@ int32_t initQueryTableDataCond(SQueryTableDataCond* pCond, const STableScanPhysi void cleanupQueryTableDataCond(SQueryTableDataCond* pCond); int32_t convertFillType(int32_t mode); - int32_t resultrowComparAsc(const void* p1, const void* p2); - int32_t isQualifiedTable(STableKeyInfo* info, SNode* pTagCond, void* metaHandle, bool* pQualified); #endif // TDENGINE_QUERYUTIL_H diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 17ab756933..cd80032a71 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -184,7 +184,7 @@ typedef struct SExecTaskInfo { int64_t version; // used for stream to record wal version SStreamTaskInfo streamInfo; SSchemaInfo schemaInfo; - STableListInfo tableqinfoList; // this is a table list + STableListInfo* pTableInfoList; // this is a table list const char* sql; // query sql string jmp_buf env; // jump to this position when error happens. EOPTR_EXEC_MODEL execModel; // operator execution model [batch model|stream model] @@ -1077,7 +1077,6 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN void copyUpdateDataBlock(SSDataBlock* pDest, SSDataBlock* pSource, int32_t tsColIndex); bool groupbyTbname(SNodeList* pGroupList); -int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort); void* destroySqlFunctionCtx(SqlFunctionCtx* pCtx, int32_t numOfOutput); int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, SStreamState* pState, SSDataBlock* pBlock, SExprSupp* pSup, SGroupResInfo* pGroupResInfo); diff --git a/source/libs/executor/src/cachescanoperator.c b/source/libs/executor/src/cachescanoperator.c index d37efbe941..92e98d3eab 100644 --- a/source/libs/executor/src/cachescanoperator.c +++ b/source/libs/executor/src/cachescanoperator.c @@ -59,22 +59,23 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe goto _error; } - STableListInfo* pTableList = &pTaskInfo->tableqinfoList; + STableListInfo* pTableList = pTaskInfo->pTableInfoList; initResultSizeInfo(&pOperator->resultInfo, 4096); blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); pInfo->pUidList = taosArrayInit(4, sizeof(int64_t)); // partition by tbname, todo opt perf - if (oneTableForEachGroup(pTableList) || (getTotalTables(pTableList) == 1)) { + if (oneTableForEachGroup(pTableList) || (tableListGetSize(pTableList) == 1)) { pInfo->retrieveType = CACHESCAN_RETRIEVE_TYPE_ALL | (pScanNode->ignoreNull ? CACHESCAN_RETRIEVE_LAST : CACHESCAN_RETRIEVE_LAST_ROW); - STableKeyInfo* pList = taosArrayGet(pTableList->pTableList, 0); - size_t num = taosArrayGetSize(pTableList->pTableList); + STableKeyInfo* pList = tableListGetInfo(pTableList, 0); + size_t num = tableListGetSize(pTableList); + uint64_t suid = tableListGetSuid(pTableList); code = tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, - taosArrayGetSize(pInfo->matchInfo.pList), pTableList->suid, &pInfo->pLastrowReader); + taosArrayGetSize(pInfo->matchInfo.pList), suid, &pInfo->pLastrowReader); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -120,8 +121,10 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { SLastrowScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - STableListInfo* pTableList = &pTaskInfo->tableqinfoList; - int32_t size = taosArrayGetSize(pTableList->pTableList); + STableListInfo* pTableList = pTaskInfo->pTableInfoList; + + uint64_t suid = tableListGetSuid(pTableList); + int32_t size = tableListGetSize(pTableList); if (size == 0) { doSetOperatorCompleted(pOperator); return NULL; @@ -184,20 +187,19 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { return NULL; } } else { - size_t totalGroups = getNumOfOutputGroups(pTableList); + size_t totalGroups = tableListGetOutputGroups(pTableList); while (pInfo->currentGroupIndex < totalGroups) { - STableKeyInfo* pList = NULL; int32_t num = 0; - int32_t code = getTablesOfGroup(pTableList, pInfo->currentGroupIndex, &pList, &num); + int32_t code = tableListGetGroupList(pTableList, pInfo->currentGroupIndex, &pList, &num); if (code != TSDB_CODE_SUCCESS) { T_LONG_JMP(pTaskInfo->env, code); } tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, - taosArrayGetSize(pInfo->matchInfo.pList), pTableList->suid, &pInfo->pLastrowReader); + taosArrayGetSize(pInfo->matchInfo.pList), suid, &pInfo->pLastrowReader); taosArrayClear(pInfo->pUidList); code = tsdbRetrieveCacheRows(pInfo->pLastrowReader, pInfo->pRes, pInfo->pSlotIds, pInfo->pUidList); diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 0f2e5194c1..d5b0d27ad5 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -26,10 +26,30 @@ #include "executorimpl.h" #include "tcompression.h" -static int32_t removeInvalidTable(SArray* list, SHashObj* tags); +// If the numOfOutputGroups is 1, the data blocks that belongs to different groups will be provided randomly +// The numOfOutputGroups is specified by physical plan. and will not be affect by numOfGroups +struct STableListInfo { + bool oneTableForEachGroup; + int32_t numOfOuputGroups; // the data block will be generated one by one + int32_t* groupOffset; // keep the offset value for each group in the tableList + SArray* pTableList; + SHashObj* map; // speedup acquire the tableQueryInfo by table uid + uint64_t suid; +}; + +typedef struct tagFilterAssist { + SHashObj* colHash; + int32_t index; + SArray* cInfoList; +} tagFilterAssist; + +static int32_t removeInvalidTable(SArray* uids, SHashObj* tags); static int32_t optimizeTbnameInCond(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond, SHashObj* tags); static int32_t optimizeTbnameInCondImpl(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond); +static int64_t getLimit(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->limit; } +static int64_t getOffset(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->offset; } + void initResultRowInfo(SResultRowInfo* pResultRowInfo) { pResultRowInfo->size = 0; pResultRowInfo->cur.pageId = -1; @@ -301,12 +321,6 @@ int32_t isQualifiedTable(STableKeyInfo* info, SNode* pTagCond, void* metaHandle, return TSDB_CODE_SUCCESS; } -typedef struct tagFilterAssist { - SHashObj* colHash; - int32_t index; - SArray* cInfoList; -} tagFilterAssist; - static EDealRes getColumn(SNode** pNode, void* pContext) { SColumnNode* pSColumnNode = NULL; if (QUERY_NODE_COLUMN == nodeType((*pNode))) { @@ -766,6 +780,7 @@ static int tableUidCompare(const void* a, const void* b) { } return u1 < u2 ? -1 : 1; } + static int32_t optimizeTbnameInCond(void* metaHandle, int64_t suid, SArray* list, SNode* cond, SHashObj* tags) { int32_t ret = -1; if (nodeType(cond) == QUERY_NODE_OPERATOR) { @@ -820,6 +835,7 @@ static int32_t removeInvalidTable(SArray* uids, SHashObj* tags) { taosArrayPush(validUid, uid); } } + taosArraySwap(uids, validUid); taosArrayDestroy(validUid); return 0; @@ -1642,9 +1658,6 @@ bool hasLimitOffsetInfo(SLimitInfo* pLimitInfo) { pLimitInfo->slimit.offset != -1); } -static int64_t getLimit(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->limit; } -static int64_t getOffset(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->offset; } - void initLimitInfo(const SNode* pLimit, const SNode* pSLimit, SLimitInfo* pLimitInfo) { SLimit limit = {.limit = getLimit(pLimit), .offset = getOffset(pLimit)}; SLimit slimit = {.limit = getLimit(pSLimit), .offset = getOffset(pSLimit)}; @@ -1655,11 +1668,23 @@ void initLimitInfo(const SNode* pLimit, const SNode* pSLimit, SLimitInfo* pLimit pLimitInfo->remainGroupOffset = slimit.offset; } -uint64_t getTotalTables(const STableListInfo* pTableList) { +uint64_t tableListGetSize(const STableListInfo* pTableList) { ASSERT(taosArrayGetSize(pTableList->pTableList) == taosHashGetSize(pTableList->map)); return taosArrayGetSize(pTableList->pTableList); } +uint64_t tableListGetSuid(const STableListInfo* pTableList) { + return pTableList->suid; +} + +STableKeyInfo* tableListGetInfo(const STableListInfo* pTableList, int32_t index) { + if (taosArrayGetSize(pTableList->pTableList) == 0) { + return NULL; + } + + return taosArrayGet(pTableList->pTableList, index); +} + uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid) { int32_t* slot = taosHashGet(pTableList->map, &tableUid, sizeof(tableUid)); ASSERT(pTableList->map != NULL && slot != NULL); @@ -1670,7 +1695,7 @@ uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid) { return pKeyInfo->groupId; } -int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t gid) { +int32_t tableListAddTableInfo(STableListInfo* pTableList, uint64_t uid, uint64_t gid) { if (pTableList->map == NULL) { ASSERT(taosArrayGetSize(pTableList->pTableList) == 0); pTableList->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); @@ -1686,9 +1711,9 @@ int32_t addTableIntoTableList(STableListInfo* pTableList, uint64_t uid, uint64_t return TSDB_CODE_SUCCESS; } -int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupIndex, STableKeyInfo** pKeyInfo, +int32_t tableListGetGroupList(const STableListInfo* pTableList, int32_t ordinalGroupIndex, STableKeyInfo** pKeyInfo, int32_t* size) { - int32_t total = getNumOfOutputGroups(pTableList); + int32_t total = tableListGetOutputGroups(pTableList); if (ordinalGroupIndex < 0 || ordinalGroupIndex >= total) { return TSDB_CODE_INVALID_PARA; } @@ -1696,10 +1721,10 @@ int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupI // here handle two special cases: // 1. only one group exists, and 2. one table exists for each group. if (total == 1) { - *size = getTotalTables(pTableList); + *size = tableListGetSize(pTableList); *pKeyInfo = (*size == 0)? NULL:taosArrayGet(pTableList->pTableList, 0); return TSDB_CODE_SUCCESS; - } else if (total == getTotalTables(pTableList)) { + } else if (total == tableListGetSize(pTableList)) { *size = 1; *pKeyInfo = taosArrayGet(pTableList->pTableList, ordinalGroupIndex); return TSDB_CODE_SUCCESS; @@ -1716,16 +1741,241 @@ int32_t getTablesOfGroup(const STableListInfo* pTableList, int32_t ordinalGroupI return TSDB_CODE_SUCCESS; } -int32_t getNumOfOutputGroups(const STableListInfo* pTableList) { return pTableList->numOfOuputGroups; } +int32_t tableListGetOutputGroups(const STableListInfo* pTableList) { return pTableList->numOfOuputGroups; } bool oneTableForEachGroup(const STableListInfo* pTableList) { return pTableList->oneTableForEachGroup; } -void destroyTableList(STableListInfo* pTableqinfoList) { - pTableqinfoList->pTableList = taosArrayDestroy(pTableqinfoList->pTableList); - taosMemoryFreeClear(pTableqinfoList->groupOffset); +STableListInfo* tableListCreate() { + STableListInfo* pListInfo = taosMemoryCalloc(1, sizeof(STableListInfo)); + if (pListInfo == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; + } - taosHashCleanup(pTableqinfoList->map); + pListInfo->pTableList = taosArrayInit(4, sizeof(STableKeyInfo)); + if (pListInfo->pTableList == NULL) { + goto _error; + } - pTableqinfoList->pTableList = NULL; - pTableqinfoList->map = NULL; + pListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); + if (pListInfo->map == NULL) { + goto _error; + } + + pListInfo->numOfOuputGroups = 1; + return pListInfo; + +_error: + tableListDestroy(pListInfo); + terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; +} + +void* tableListDestroy(STableListInfo* pTableListInfo) { + pTableListInfo->pTableList = taosArrayDestroy(pTableListInfo->pTableList); + taosMemoryFreeClear(pTableListInfo->groupOffset); + + taosHashCleanup(pTableListInfo->map); + + pTableListInfo->pTableList = NULL; + pTableListInfo->map = NULL; + taosMemoryFree(pTableListInfo); + return NULL; +} + +void tableListClear(STableListInfo* pTableListInfo) { + taosArrayClear(pTableListInfo->pTableList); + taosHashClear(pTableListInfo->map); + taosMemoryFree(pTableListInfo->groupOffset); + pTableListInfo->numOfOuputGroups = 1; + pTableListInfo->oneTableForEachGroup = false; +} + +static int32_t orderbyGroupIdComparFn(const void* p1, const void* p2) { + STableKeyInfo* pInfo1 = (STableKeyInfo*) p1; + STableKeyInfo* pInfo2 = (STableKeyInfo*) p2; + + if (pInfo1->groupId == pInfo2->groupId) { + return 0; + } else { + return pInfo1->groupId < pInfo2->groupId? -1:1; + } +} + +static int32_t sortTableGroup(STableListInfo* pTableListInfo) { + int32_t code = TSDB_CODE_SUCCESS; + + taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); + int32_t size = taosArrayGetSize(pTableListInfo->pTableList); + + SArray* pList = taosArrayInit(4, sizeof(int32_t)); + + STableKeyInfo* pInfo = taosArrayGet(pTableListInfo->pTableList, 0); + uint64_t gid = pInfo->groupId; + + int32_t start = 0; + taosArrayPush(pList, &start); + + for(int32_t i = 1; i < size; ++i) { + pInfo = taosArrayGet(pTableListInfo->pTableList, i); + if (pInfo->groupId != gid) { + taosArrayPush(pList, &i); + gid = pInfo->groupId; + } + } + + pTableListInfo->numOfOuputGroups = taosArrayGetSize(pList); + pTableListInfo->groupOffset = taosMemoryMalloc(sizeof(int32_t) * pTableListInfo->numOfOuputGroups); + memcpy(pTableListInfo->groupOffset, taosArrayGet(pList, 0), sizeof(int32_t) * pTableListInfo->numOfOuputGroups); + taosArrayDestroy(pList); + +# if 0 + SArray* sortSupport = taosArrayInit(16, sizeof(uint64_t)); + if (sortSupport == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + + size_t num = taosArrayGetSize(pTableListInfo->pTableList); + for (int32_t i = 0; i < num; i++) { + STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); + uint64_t* groupId = taosHashGet(pTableListInfo->map, &info->uid, sizeof(uint64_t)); + + int32_t index = taosArraySearchIdx(sortSupport, groupId, compareUint64Val, TD_EQ); + if (index == -1) { + void* p = taosArraySearch(sortSupport, groupId, compareUint64Val, TD_GT); + + SArray* tGroup = taosArrayInit(8, sizeof(STableKeyInfo)); + if (tGroup == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; + } + + if (taosArrayPush(tGroup, info) == NULL) { + qError("taos push info array error"); + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; + } + + if (p == NULL) { + if (taosArrayPush(sortSupport, groupId) == NULL) { + qError("taos push support array error"); + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; + } + + if (taosArrayPush(pTableListInfo->pGroupList, &tGroup) == NULL) { + qError("taos push group array error"); + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; + } + } else { + int32_t pos = TARRAY_ELEM_IDX(sortSupport, p); + if (taosArrayInsert(sortSupport, pos, groupId) == NULL) { + qError("taos insert support array error"); + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; + } + + if (taosArrayInsert(pTableListInfo->pGroupList, pos, &tGroup) == NULL) { + qError("taos insert group array error"); + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; + } + } + } else { + SArray* tGroup = (SArray*)taosArrayGetP(pTableListInfo->pGroupList, index); + if (taosArrayPush(tGroup, info) == NULL) { + qError("taos push uid array error"); + code = TSDB_CODE_OUT_OF_MEMORY; + goto _error; + } + } + } + + taosArrayDestroy(sortSupport); +#endif + + return TDB_CODE_SUCCESS; + + _error: +// taosArrayDestroy(sortSupport); + return code; +} + +int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { + int32_t code = TSDB_CODE_SUCCESS; + ASSERT(pTableListInfo->map != NULL); + + bool groupByTbname = groupbyTbname(group); + size_t numOfTables = taosArrayGetSize(pTableListInfo->pTableList); + if (group == NULL || groupByTbname) { + for (int32_t i = 0; i < numOfTables; i++) { + STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); + info->groupId = groupByTbname? info->uid:0; + } + + pTableListInfo->oneTableForEachGroup = groupByTbname; + + if (groupSort && groupByTbname) { + taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); + pTableListInfo->numOfOuputGroups = numOfTables; + } else { + pTableListInfo->numOfOuputGroups = 1; + } + } else { + code = getColInfoResultForGroupby(pHandle->meta, group, pTableListInfo); + if (code != TSDB_CODE_SUCCESS) { + return code; + } + + if (groupSort) { + code = sortTableGroup(pTableListInfo); + } + } + + // add all table entry in the hash map + size_t size = taosArrayGetSize(pTableListInfo->pTableList); + for(int32_t i = 0; i < size; ++i) { + STableKeyInfo* p = taosArrayGet(pTableListInfo->pTableList, i); + taosHashPut(pTableListInfo->map, &p->uid, sizeof(uint64_t), &i, sizeof(int32_t)); + } + + return code; +} + +int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, + STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, + const char* idStr) { + int64_t st = taosGetTimestampUs(); + + if (pHandle == NULL) { + qError("invalid handle, in creating operator tree, %s", idStr); + return TSDB_CODE_INVALID_PARA; + } + + int32_t code = getTableList(pHandle->meta, pHandle->vnode, pScanNode, pTagCond, pTagIndexCond, pTableListInfo); + if (code != TSDB_CODE_SUCCESS) { + qError("failed to getTableList, code: %s", tstrerror(code)); + return code; + } + + pTableListInfo->numOfOuputGroups = 1; + + int64_t st1 = taosGetTimestampUs(); + qDebug("generate queried table list completed, elapsed time:%.2f ms %s", (st1 - st) / 1000.0, idStr); + + if (taosArrayGetSize(pTableListInfo->pTableList) == 0) { + qDebug("no table qualified for query, %s" PRIx64, idStr); + return TSDB_CODE_SUCCESS; + } + + code = setGroupIdMapForAllTables(pTableListInfo, pHandle, pGroupTags, groupSort); + if (code != TSDB_CODE_SUCCESS) { + return code; + } + + int64_t st2 = taosGetTimestampUs(); + qDebug("generate group id map completed, elapsed time:%.2f ms %s", (st2 - st1) / 1000.0, idStr); + + return TSDB_CODE_SUCCESS; } \ No newline at end of file diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index 765968999a..36af05d1c9 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -287,14 +287,11 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bool isAdd) { SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; - STableListInfo* pListInfo = &pTaskInfo->tableqinfoList; if (isAdd) { qDebug("add %d tables id into query list, %s", (int32_t)taosArrayGetSize(tableIdList), pTaskInfo->id.str); } - - // traverse to the stream scanner node to add this table id SOperatorInfo* pInfo = pTaskInfo->pRoot; while (pInfo->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) { @@ -328,7 +325,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo } } - STableListInfo* pTableListInfo = &pTaskInfo->tableqinfoList; + STableListInfo* pTableListInfo = pTaskInfo->pTableInfoList; for (int32_t i = 0; i < numOfQualifiedTables; ++i) { uint64_t* uid = taosArrayGet(qa, i); @@ -361,7 +358,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo if (!exists) { #endif - addTableIntoTableList(pTableListInfo, keyInfo.uid, keyInfo.groupId); + tableListAddTableInfo(pTableListInfo, keyInfo.uid, keyInfo.groupId); } if (keyBuf != NULL) { @@ -925,8 +922,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT int64_t ts = pOffset->ts; if (uid == 0) { - if (taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList) != 0) { - STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, 0); + if (tableListGetSize(pTaskInfo->pTableInfoList) != 0) { + STableKeyInfo* pTableInfo = tableListGetInfo(pTaskInfo->pTableInfoList, 0); uid = pTableInfo->uid; ts = INT64_MIN; } else { @@ -937,7 +934,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT /*if (pTaskInfo->streamInfo.lastStatus.type != TMQ_OFFSET__SNAPSHOT_DATA ||*/ /*pTaskInfo->streamInfo.lastStatus.uid != uid || pTaskInfo->streamInfo.lastStatus.ts != ts) {*/ STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info; - int32_t numOfTables = getTotalTables(&pTaskInfo->tableqinfoList); + int32_t numOfTables = tableListGetSize(pTaskInfo->pTableInfoList); #ifndef NDEBUG qDebug("switch to next table %" PRId64 " (cursor %d), %" PRId64 " rows returned", uid, @@ -947,7 +944,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT bool found = false; for (int32_t i = 0; i < numOfTables; i++) { - STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, i); + STableKeyInfo* pTableInfo = tableListGetInfo(pTaskInfo->pTableInfoList, i); if (pTableInfo->uid == uid) { found = true; pTableScanInfo->currentTable = i; @@ -959,8 +956,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT ASSERT(found); if (pTableScanInfo->dataReader == NULL) { - STableKeyInfo* pList = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, 0); - int32_t num = getTotalTables(&pTaskInfo->tableqinfoList); + STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0); + int32_t num = tableListGetSize(pTaskInfo->pTableInfoList); if (tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &pTableScanInfo->cond, pList, num, &pTableScanInfo->dataReader, NULL) < 0 || pTableScanInfo->dataReader == NULL) { @@ -993,22 +990,25 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT SMetaTableInfo mtInfo = getUidfromSnapShot(sContext); tsdbReaderClose(pInfo->dataReader); pInfo->dataReader = NULL; + cleanupQueryTableDataCond(&pTaskInfo->streamInfo.tableCond); - taosArrayDestroy(pTaskInfo->tableqinfoList.pTableList); - if (mtInfo.uid == 0) return 0; // no data + tableListClear(pTaskInfo->pTableInfoList); + + if (mtInfo.uid == 0) { + return 0; // no data + } initQueryTableDataCondForTmq(&pTaskInfo->streamInfo.tableCond, sContext, &mtInfo); pTaskInfo->streamInfo.tableCond.twindows.skey = pOffset->ts; - STableListInfo* pListInfo = &pTaskInfo->tableqinfoList; + STableListInfo* pListInfo = pTaskInfo->pTableInfoList; + tableListAddTableInfo(pListInfo, mtInfo.uid, 0); - pListInfo->pTableList = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(pListInfo->pTableList, &(STableKeyInfo){.uid = mtInfo.uid, .groupId = 0}); + STableKeyInfo* pList = tableListGetInfo(pListInfo, 0); + int32_t size = tableListGetSize(pListInfo); + ASSERT(size == 1); - STableKeyInfo* pList = taosArrayGet(pListInfo->pTableList, 0); - - tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, taosArrayGetSize(pListInfo->pTableList), - &pInfo->dataReader, NULL); + tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, size, &pInfo->dataReader, NULL); cleanupQueryTableDataCond(&pTaskInfo->streamInfo.tableCond); strcpy(pTaskInfo->streamInfo.tbName, mtInfo.tbName); diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 54c92c10bd..0d9d6eae06 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3273,6 +3273,7 @@ static SExecTaskInfo* createExecTaskInfo(uint64_t queryId, uint64_t taskId, EOPT pTaskInfo->cost.created = taosGetTimestampMs(); pTaskInfo->id.queryId = queryId; pTaskInfo->execModel = model; + pTaskInfo->pTableInfoList = tableListCreate(); char* p = taosMemoryCalloc(1, 128); snprintf(p, 128, "TID:0x%" PRIx64 " QID:0x%" PRIx64, taskId, queryId); @@ -3364,117 +3365,6 @@ static void cleanupTableSchemaInfo(SSchemaInfo* pSchemaInfo) { static void cleanupStreamInfo(SStreamTaskInfo* pStreamInfo) { tDeleteSSchemaWrapper(pStreamInfo->schema); } -static int32_t orderbyGroupIdComparFn(const void* p1, const void* p2) { - STableKeyInfo* pInfo1 = (STableKeyInfo*) p1; - STableKeyInfo* pInfo2 = (STableKeyInfo*) p2; - - if (pInfo1->groupId == pInfo2->groupId) { - return 0; - } else { - return pInfo1->groupId < pInfo2->groupId? -1:1; - } -} - -static int32_t sortTableGroup(STableListInfo* pTableListInfo) { - int32_t code = TSDB_CODE_SUCCESS; - - taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); - int32_t size = taosArrayGetSize(pTableListInfo->pTableList); - - SArray* pList = taosArrayInit(4, sizeof(int32_t)); - - STableKeyInfo* pInfo = taosArrayGet(pTableListInfo->pTableList, 0); - uint64_t gid = pInfo->groupId; - - int32_t start = 0; - taosArrayPush(pList, &start); - - for(int32_t i = 1; i < size; ++i) { - pInfo = taosArrayGet(pTableListInfo->pTableList, i); - if (pInfo->groupId != gid) { - taosArrayPush(pList, &i); - gid = pInfo->groupId; - } - } - - pTableListInfo->numOfOuputGroups = taosArrayGetSize(pList); - pTableListInfo->groupOffset = taosMemoryMalloc(sizeof(int32_t) * pTableListInfo->numOfOuputGroups); - memcpy(pTableListInfo->groupOffset, taosArrayGet(pList, 0), sizeof(int32_t) * pTableListInfo->numOfOuputGroups); - taosArrayDestroy(pList); - -# if 0 - SArray* sortSupport = taosArrayInit(16, sizeof(uint64_t)); - if (sortSupport == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } - - size_t num = taosArrayGetSize(pTableListInfo->pTableList); - for (int32_t i = 0; i < num; i++) { - STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); - uint64_t* groupId = taosHashGet(pTableListInfo->map, &info->uid, sizeof(uint64_t)); - - int32_t index = taosArraySearchIdx(sortSupport, groupId, compareUint64Val, TD_EQ); - if (index == -1) { - void* p = taosArraySearch(sortSupport, groupId, compareUint64Val, TD_GT); - - SArray* tGroup = taosArrayInit(8, sizeof(STableKeyInfo)); - if (tGroup == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (taosArrayPush(tGroup, info) == NULL) { - qError("taos push info array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (p == NULL) { - if (taosArrayPush(sortSupport, groupId) == NULL) { - qError("taos push support array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (taosArrayPush(pTableListInfo->pGroupList, &tGroup) == NULL) { - qError("taos push group array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - } else { - int32_t pos = TARRAY_ELEM_IDX(sortSupport, p); - if (taosArrayInsert(sortSupport, pos, groupId) == NULL) { - qError("taos insert support array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (taosArrayInsert(pTableListInfo->pGroupList, pos, &tGroup) == NULL) { - qError("taos insert group array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - } - } else { - SArray* tGroup = (SArray*)taosArrayGetP(pTableListInfo->pGroupList, index); - if (taosArrayPush(tGroup, info) == NULL) { - qError("taos push uid array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - } - } - - taosArrayDestroy(sortSupport); -#endif - - return TDB_CODE_SUCCESS; - - _error: -// taosArrayDestroy(sortSupport); - return code; -} - bool groupbyTbname(SNodeList* pGroupList) { bool bytbname = false; if (LIST_LENGTH(pGroupList) == 1) { @@ -3488,52 +3378,6 @@ bool groupbyTbname(SNodeList* pGroupList) { return bytbname; } -int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { - int32_t code = TSDB_CODE_SUCCESS; - - pTableListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); - if (pTableListInfo->map == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - return code; - } - - bool groupByTbname = groupbyTbname(group); - size_t numOfTables = taosArrayGetSize(pTableListInfo->pTableList); - if (group == NULL || groupByTbname) { - for (int32_t i = 0; i < numOfTables; i++) { - STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); - info->groupId = groupByTbname? info->uid:0; - } - - pTableListInfo->oneTableForEachGroup = groupByTbname; - - if (groupSort && groupByTbname) { - taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); - pTableListInfo->numOfOuputGroups = numOfTables; - } else { - pTableListInfo->numOfOuputGroups = 1; - } - } else { - code = getColInfoResultForGroupby(pHandle->meta, group, pTableListInfo); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - - if (groupSort) { - code = sortTableGroup(pTableListInfo); - } - } - - // add all table entry in the hash map - size_t size = taosArrayGetSize(pTableListInfo->pTableList); - for(int32_t i = 0; i < size; ++i) { - STableKeyInfo* p = taosArrayGet(pTableListInfo->pTableList, i); - taosHashPut(pTableListInfo->map, &p->uid, sizeof(uint64_t), &i, sizeof(int32_t)); - } - - return code; -} - static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pCond) { memset(pCond, 0, sizeof(SQueryTableDataCond)); @@ -3629,11 +3473,11 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo } #ifndef NDEBUG - int32_t sz = taosArrayGetSize(pTableListInfo->pTableList); + int32_t sz = tableListGetSize(pTableListInfo); qDebug("create stream task, total:%d", sz); for (int32_t i = 0; i < sz; i++) { - STableKeyInfo* pKeyInfo = taosArrayGet(pTableListInfo->pTableList, i); + STableKeyInfo* pKeyInfo = tableListGetInfo(pTableListInfo, i); qDebug("add table uid:%" PRIu64", gid:%"PRIu64, pKeyInfo->uid, pKeyInfo->groupId); } #endif @@ -3656,8 +3500,6 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo pOperator = createTagScanOperatorInfo(pHandle, pScanPhyNode, pTableListInfo, pTaskInfo); } else if (QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN == type) { SBlockDistScanPhysiNode* pBlockNode = (SBlockDistScanPhysiNode*)pPhyNode; - pTableListInfo->pTableList = taosArrayInit(4, sizeof(STableKeyInfo)); - pTableListInfo->numOfOuputGroups = 1; if (pBlockNode->tableType == TSDB_SUPER_TABLE) { SArray* pList = taosArrayInit(4, sizeof(STableKeyInfo)); @@ -3667,13 +3509,13 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo return NULL; } - for(int32_t i = 0; i < taosArrayGetSize(pTableListInfo->pTableList); ++i) { + for(int32_t i = 0; i < tableListGetSize(pTableListInfo); ++i) { STableKeyInfo* p = taosArrayGet(pList, i); - addTableIntoTableList(pTableListInfo, p->uid, 0); + tableListAddTableInfo(pTableListInfo, p->uid, 0); } taosArrayDestroy(pList); } else { // Create one table group. - addTableIntoTableList(pTableListInfo, pBlockNode->uid, 0); + tableListAddTableInfo(pTableListInfo, pBlockNode->uid, 0); } SQueryTableDataCond cond = {0}; @@ -3683,11 +3525,8 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo return NULL; } - size_t num = getTotalTables(pTableListInfo); - void* pList = NULL; - if (num > 0) { - pList = taosArrayGet(pTableListInfo->pTableList, 0); - } + size_t num = tableListGetSize(pTableListInfo); + void* pList = tableListGetInfo(pTableListInfo, 0); STsdbReader* pReader = NULL; tsdbReaderOpen(pHandle->vnode, &cond, pList, num, &pReader, ""); @@ -4000,15 +3839,18 @@ int32_t createDataSinkParam(SDataSinkNode* pNode, void** pParam, qTaskInfo_t* pT if (NULL == pDeleterParam) { return TSDB_CODE_OUT_OF_MEMORY; } - int32_t tbNum = taosArrayGetSize(pTask->tableqinfoList.pTableList); - pDeleterParam->suid = pTask->tableqinfoList.suid; + int32_t tbNum = tableListGetSize(pTask->pTableInfoList); + pDeleterParam->suid = tableListGetSuid(pTask->pTableInfoList); + + // TODO extract uid list pDeleterParam->pUidList = taosArrayInit(tbNum, sizeof(uint64_t)); if (NULL == pDeleterParam->pUidList) { taosMemoryFree(pDeleterParam); return TSDB_CODE_OUT_OF_MEMORY; } + for (int32_t i = 0; i < tbNum; ++i) { - STableKeyInfo* pTable = taosArrayGet(pTask->tableqinfoList.pTableList, i); + STableKeyInfo* pTable = tableListGetInfo(pTask->pTableInfoList, i); taosArrayPush(pDeleterParam->pUidList, &pTable->uid); } @@ -4044,7 +3886,7 @@ int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SRead sql = NULL; (*pTaskInfo)->pSubplan = pPlan; - (*pTaskInfo)->pRoot = createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, &(*pTaskInfo)->tableqinfoList, + (*pTaskInfo)->pRoot = createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, (*pTaskInfo)->pTableInfoList, pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user); if (NULL == (*pTaskInfo)->pRoot) { @@ -4064,7 +3906,7 @@ int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SRead void doDestroyTask(SExecTaskInfo* pTaskInfo) { qDebug("%s execTask is freed", GET_TASKID(pTaskInfo)); - destroyTableList(&pTaskInfo->tableqinfoList); + pTaskInfo->pTableInfoList = tableListDestroy(pTaskInfo->pTableInfoList); destroyOperatorInfo(pTaskInfo->pRoot); cleanupTableSchemaInfo(&pTaskInfo->schemaInfo); cleanupStreamInfo(&pTaskInfo->streamInfo); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 415fa60287..e254083d88 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -623,7 +623,7 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { pBlock->info = binfo; ASSERT(binfo.uid != 0); - pBlock->info.groupId = getTableGroupId(&pTaskInfo->tableqinfoList, pBlock->info.uid); + pBlock->info.groupId = getTableGroupId(pTaskInfo->pTableInfoList, pBlock->info.uid); uint32_t status = 0; int32_t code = loadDataBlock(pOperator, pTableScanInfo, pBlock, &status); @@ -719,7 +719,7 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { // scan table one by one sequentially if (pInfo->scanMode == TABLE_SCAN__TABLE_ORDER) { - int32_t numOfTables = taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList); + int32_t numOfTables = tableListGetSize(pTaskInfo->pTableInfoList); while (1) { SSDataBlock* result = doTableScanGroup(pOperator); @@ -733,7 +733,7 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { return NULL; } - STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, pInfo->currentTable); + STableKeyInfo* pTableInfo = tableListGetInfo(pTaskInfo->pTableInfoList, pInfo->currentTable); tsdbSetTableList(pInfo->dataReader, pTableInfo, 1); qDebug("set uid:%" PRIu64 " into scanner, total tables:%d, index:%d %s", pTableInfo->uid, numOfTables, pInfo->currentTable, pTaskInfo->id.str); @@ -743,14 +743,14 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { } } else { // scan table group by group sequentially if (pInfo->currentGroupId == -1) { - if ((++pInfo->currentGroupId) >= getNumOfOutputGroups(&pTaskInfo->tableqinfoList)) { + if ((++pInfo->currentGroupId) >= tableListGetOutputGroups(pTaskInfo->pTableInfoList)) { doSetOperatorCompleted(pOperator); return NULL; } int32_t num = 0; STableKeyInfo* pList = NULL; - getTablesOfGroup(&pTaskInfo->tableqinfoList, pInfo->currentGroupId, &pList, &num); + tableListGetGroupList(pTaskInfo->pTableInfoList, pInfo->currentGroupId, &pList, &num); ASSERT(pInfo->dataReader == NULL); int32_t code = tsdbReaderOpen(pInfo->readHandle.vnode, &pInfo->cond, pList, num, (STsdbReader**)&pInfo->dataReader, @@ -766,7 +766,7 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { return result; } - if ((++pInfo->currentGroupId) >= getNumOfOutputGroups(&pTaskInfo->tableqinfoList)) { + if ((++pInfo->currentGroupId) >= tableListGetOutputGroups(pTaskInfo->pTableInfoList)) { doSetOperatorCompleted(pOperator); return NULL; } @@ -778,7 +778,7 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { int32_t num = 0; STableKeyInfo* pList = NULL; - getTablesOfGroup(&pTaskInfo->tableqinfoList, pInfo->currentGroupId, &pList, &num); + tableListGetGroupList(pTaskInfo->pTableInfoList, pInfo->currentGroupId, &pList, &num); tsdbSetTableList(pInfo->dataReader, pList, num); tsdbReaderReset(pInfo->dataReader, &pInfo->cond); @@ -1119,7 +1119,7 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo); - pBlock->info.groupId = getTableGroupId(&pTaskInfo->tableqinfoList, binfo.uid); + pBlock->info.groupId = getTableGroupId(pTaskInfo->pTableInfoList, binfo.uid); } tsdbReaderClose(pReader); @@ -1139,8 +1139,8 @@ static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, } static uint64_t getGroupIdByUid(SStreamScanInfo* pInfo, uint64_t uid) { - return getTableGroupId(&pInfo->pTableScanOp->pTaskInfo->tableqinfoList, uid); -// SHashObj* map = pInfo->pTableScanOp->pTaskInfo->tableqinfoList.map; + return getTableGroupId(pInfo->pTableScanOp->pTaskInfo->pTableInfoList, uid); +// SHashObj* map = pInfo->pTableScanOp->pTaskInfo->pTableInfoList.map; // uint64_t* groupId = taosHashGet(map, &uid, sizeof(int64_t)); // if (groupId) { // return *groupId; @@ -1564,7 +1564,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock pInfo->pRes->info.type = STREAM_NORMAL; pInfo->pRes->info.version = pBlock->info.version; - pInfo->pRes->info.groupId = getTableGroupId(&pTaskInfo->tableqinfoList, pBlock->info.uid); + pInfo->pRes->info.groupId = getTableGroupId(pTaskInfo->pTableInfoList, pBlock->info.uid); // todo extract method for (int32_t i = 0; i < taosArrayGetSize(pInfo->matchInfo.pList); ++i) { @@ -2076,12 +2076,13 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { } } -static SArray* extractTableIdList(const STableListInfo* pTableGroupInfo) { +static SArray* extractTableIdList(const STableListInfo* pTableListInfo) { SArray* tableIdList = taosArrayInit(4, sizeof(uint64_t)); // Transfer the Array of STableKeyInfo into uid list. - for (int32_t i = 0; i < taosArrayGetSize(pTableGroupInfo->pTableList); ++i) { - STableKeyInfo* pkeyInfo = taosArrayGet(pTableGroupInfo->pTableList, i); + size_t size = tableListGetSize(pTableListInfo); + for (int32_t i = 0; i < size; ++i) { + STableKeyInfo* pkeyInfo = tableListGetInfo(pTableListInfo, i); taosArrayPush(tableIdList, &pkeyInfo->uid); } @@ -2350,7 +2351,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys STableKeyInfo* pList = NULL; int32_t num = 0; - getTablesOfGroup(&pTaskInfo->tableqinfoList, 0, &pList, &num); + tableListGetGroupList(pTaskInfo->pTableInfoList, 0, &pList, &num); if (pHandle->initTableReader) { pTSInfo->scanMode = TABLE_SCAN__TABLE_ORDER; @@ -2383,7 +2384,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys // set the extract column id to streamHandle tqReaderSetColIdList(pInfo->tqReader, pColIds); - SArray* tableIdList = extractTableIdList(&pTaskInfo->tableqinfoList); + SArray* tableIdList = extractTableIdList(pTaskInfo->pTableInfoList); code = tqReaderSetTbUidList(pInfo->tqReader, tableIdList); if (code != 0) { taosArrayDestroy(tableIdList); @@ -4082,7 +4083,7 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) { SSDataBlock* pRes = pInfo->pRes; blockDataCleanup(pRes); - int32_t size = taosArrayGetSize(pInfo->pTableList->pTableList); + int32_t size = tableListGetSize(pTaskInfo->pTableInfoList); if (size == 0) { setTaskStatus(pTaskInfo, TASK_COMPLETED); return NULL; @@ -4094,7 +4095,7 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) { metaReaderInit(&mr, pInfo->readHandle.meta, 0); while (pInfo->curPos < size && count < pOperator->resultInfo.capacity) { - STableKeyInfo* item = taosArrayGet(pInfo->pTableList->pTableList, pInfo->curPos); + STableKeyInfo* item = tableListGetInfo(pInfo->pTableList, pInfo->curPos); int32_t code = metaGetTableEntryByUid(&mr, item->uid); tDecoderClear(&mr.coder); if (code != TSDB_CODE_SUCCESS) { @@ -4209,47 +4210,10 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi return NULL; } -int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, - STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, - const char* idStr) { - int64_t st = taosGetTimestampUs(); - - if (pHandle == NULL) { - qError("invalid handle, in creating operator tree, %s", idStr); - return TSDB_CODE_INVALID_PARA; - } - - int32_t code = getTableList(pHandle->meta, pHandle->vnode, pScanNode, pTagCond, pTagIndexCond, pTableListInfo); - if (code != TSDB_CODE_SUCCESS) { - qError("failed to getTableList, code: %s", tstrerror(code)); - return code; - } - - pTableListInfo->numOfOuputGroups = 1; - - int64_t st1 = taosGetTimestampUs(); - qDebug("generate queried table list completed, elapsed time:%.2f ms %s", (st1 - st) / 1000.0, idStr); - - if (taosArrayGetSize(pTableListInfo->pTableList) == 0) { - qDebug("no table qualified for query, %s" PRIx64, idStr); - return TSDB_CODE_SUCCESS; - } - - code = setGroupIdMapForAllTables(pTableListInfo, pHandle, pGroupTags, groupSort); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - - int64_t st2 = taosGetTimestampUs(); - qDebug("generate group id map completed, elapsed time:%.2f ms %s", (st2 - st1) / 1000.0, idStr); - - return TSDB_CODE_SUCCESS; -} - int32_t createMultipleDataReaders(SQueryTableDataCond* pQueryCond, SReadHandle* pHandle, STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, SArray* arrayReader, const char* idstr) { for (int32_t i = tableStartIdx; i <= tableEndIdx; ++i) { - STableKeyInfo* pList = taosArrayGet(pTableListInfo->pTableList, i); + STableKeyInfo* pList = tableListGetInfo(pTableListInfo, i); STsdbReader* pReader = NULL; tsdbReaderOpen(pHandle->vnode, pQueryCond, pList, 1, &pReader, idstr); taosArrayPush(arrayReader, &pReader); @@ -4262,7 +4226,7 @@ int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, STsdbReader** ppReader, const char* idstr) { STsdbReader* pReader = NULL; - void* pStart = taosArrayGet(pTableListInfo->pTableList, tableStartIdx); + void* pStart = tableListGetInfo(pTableListInfo, tableStartIdx); int32_t num = tableEndIdx - tableStartIdx + 1; int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, num, &pReader, idstr); @@ -4522,7 +4486,7 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { int64_t st = taosGetTimestampUs(); - void* p =taosArrayGet(pInfo->tableListInfo->pTableList, readIdx + pInfo->tableStartIndex); + void* p = tableListGetInfo(pInfo->tableListInfo, readIdx + pInfo->tableStartIndex); SReadHandle* pHandle = &pInfo->readHandle; tsdbReaderOpen(pHandle->vnode, pQueryCond, p, 1, &pInfo->pReader, GET_TASKID(pTaskInfo)); @@ -4565,7 +4529,7 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { continue; } - pBlock->info.groupId = getTableGroupId(&pOperator->pTaskInfo->tableqinfoList, pBlock->info.uid); + pBlock->info.groupId = getTableGroupId(pOperator->pTaskInfo->pTableInfoList, pBlock->info.uid); pOperator->resultInfo.totalRows += pBlock->info.rows; // pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4622,7 +4586,7 @@ static SSDataBlock* getTableDataBlock2(void* param) { continue; } - pBlock->info.groupId = getTableGroupId(&pOperator->pTaskInfo->tableqinfoList, pBlock->info.uid); + pBlock->info.groupId = getTableGroupId(pOperator->pTaskInfo->pTableInfoList, pBlock->info.uid); pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4676,7 +4640,7 @@ static SSDataBlock* getTableDataBlock(void* param) { continue; } - pBlock->info.groupId = getTableGroupId(&pOperator->pTaskInfo->tableqinfoList, pBlock->info.uid); + pBlock->info.groupId = getTableGroupId(pOperator->pTaskInfo->pTableInfoList, pBlock->info.uid); pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4719,10 +4683,10 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; { - size_t tableListSize = taosArrayGetSize(pInfo->tableListInfo->pTableList); + size_t numOfTables = tableListGetSize(pInfo->tableListInfo); int32_t i = pInfo->tableStartIndex + 1; - for (; i < tableListSize; ++i) { - STableKeyInfo* tableKeyInfo = taosArrayGet(pInfo->tableListInfo->pTableList, i); + for (; i < numOfTables; ++i) { + STableKeyInfo* tableKeyInfo = tableListGetInfo(pInfo->tableListInfo, i); if (tableKeyInfo->groupId != pInfo->groupId) { break; } @@ -4847,7 +4811,7 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { T_LONG_JMP(pTaskInfo->env, code); } - size_t tableListSize = taosArrayGetSize(pInfo->tableListInfo->pTableList); + size_t tableListSize = tableListGetSize(pInfo->tableListInfo); if (!pInfo->hasGroupId) { pInfo->hasGroupId = true; @@ -4856,7 +4820,7 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { return NULL; } pInfo->tableStartIndex = 0; - pInfo->groupId = ((STableKeyInfo*)taosArrayGet(pInfo->tableListInfo->pTableList, pInfo->tableStartIndex))->groupId; + pInfo->groupId = ((STableKeyInfo*)tableListGetInfo(pInfo->tableListInfo, pInfo->tableStartIndex))->groupId; startGroupTableMergeScan(pOperator); } @@ -4875,8 +4839,7 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { break; } pInfo->tableStartIndex = pInfo->tableEndIndex + 1; - pInfo->groupId = - ((STableKeyInfo*)taosArrayGet(pInfo->tableListInfo->pTableList, pInfo->tableStartIndex))->groupId; + pInfo->groupId = tableListGetInfo(pInfo->tableListInfo, pInfo->tableStartIndex)->groupId; startGroupTableMergeScan(pOperator); } } From 46a6d9ab991f882673546fc9d1946f5661a39c61 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sun, 30 Oct 2022 22:23:27 +0800 Subject: [PATCH 48/81] refactor: do some internal refactor. --- source/libs/executor/inc/executil.h | 6 +++++- source/libs/executor/inc/executorimpl.h | 4 ---- source/libs/executor/src/executil.c | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index 306b7443b5..31492cafa8 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -23,6 +23,7 @@ #include "tpagedbuf.h" #include "tsimplehash.h" #include "vnode.h" +#include "executor.h" #define T_LONG_JMP(_obj, _c) \ do { \ @@ -98,7 +99,10 @@ typedef struct SColMatchInfo { typedef struct STableListInfo STableListInfo; struct SqlFunctionCtx; -STableListInfo*tableListCreate(); +int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, + STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, const char* id); + +STableListInfo* tableListCreate(); void* tableListDestroy(STableListInfo* pTableListInfo); void tableListClear(STableListInfo* pTableListInfo); int32_t tableListGetOutputGroups(const STableListInfo* pTableList); diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index cd80032a71..cad4b562b8 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -1065,10 +1065,6 @@ uint64_t calGroupIdByData(SPartitionBySupporter* pParSup, SExprSupp* pExprSup, S int32_t finalizeResultRows(SDiskbasedBuf* pBuf, SResultRowPosition* resultRowPosition, SExprSupp* pSup, SSDataBlock* pBlock, SExecTaskInfo* pTaskInfo); -int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, - STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, - const char* idstr); - SOperatorInfo* createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSortPhysiNode* pSortPhyNode, SExecTaskInfo* pTaskInfo); SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanNode, STableListInfo* pTableListInfo, diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index d5b0d27ad5..d6ec44c4df 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1695,6 +1695,7 @@ uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid) { return pKeyInfo->groupId; } +// TODO handle the group offset info, fix it, the rule of group output will be broken by this function int32_t tableListAddTableInfo(STableListInfo* pTableList, uint64_t uid, uint64_t gid) { if (pTableList->map == NULL) { ASSERT(taosArrayGetSize(pTableList->pTableList) == 0); From a3ed903dfd38ba82ef037a5bf78bf8a24b5bacda Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sun, 30 Oct 2022 22:26:11 +0800 Subject: [PATCH 49/81] refactor: do some internal refactor. --- source/libs/executor/src/executil.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index d6ec44c4df..be83a7c392 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -496,6 +496,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, int64_t suid, SArray* } } } + pResBlock->info.rows = rows; // int64_t st1 = taosGetTimestampUs(); @@ -946,11 +947,6 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, STableListInfo* pListInfo) { int32_t code = TSDB_CODE_SUCCESS; - pListInfo->pTableList = taosArrayInit(8, sizeof(STableKeyInfo)); - if (pListInfo->pTableList == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } - uint64_t tableUid = pScanNode->uid; pListInfo->suid = pScanNode->suid; SArray* res = taosArrayInit(8, sizeof(uint64_t)); @@ -1960,7 +1956,7 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags return code; } - pTableListInfo->numOfOuputGroups = 1; + ASSERT(pTableListInfo->numOfOuputGroups == 1); int64_t st1 = taosGetTimestampUs(); qDebug("generate queried table list completed, elapsed time:%.2f ms %s", (st1 - st) / 1000.0, idStr); @@ -1979,4 +1975,4 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags qDebug("generate group id map completed, elapsed time:%.2f ms %s", (st2 - st1) / 1000.0, idStr); return TSDB_CODE_SUCCESS; -} \ No newline at end of file +} From 55509833dbfa41a402cb67b43865750f8b3c51f8 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Mon, 31 Oct 2022 09:23:33 +0800 Subject: [PATCH 50/81] cron trim --- source/os/src/osMemory.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/os/src/osMemory.c b/source/os/src/osMemory.c index 2949d08d61..78fa362179 100644 --- a/source/os/src/osMemory.c +++ b/source/os/src/osMemory.c @@ -338,5 +338,10 @@ int64_t taosMemorySize(void *ptr) { } void taosMemoryTrim(int32_t size) { - malloc_trim(size); +#if defined(WINDOWS) || defined(DARWIN) + // do nothing + return; +#else + malloc_trim(size); +#endif } From 864e2c60a70c6051c006c058ba7d1b5947d3e226 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 31 Oct 2022 09:48:23 +0800 Subject: [PATCH 51/81] fix(query): invoke the different api for extract queried table list. --- source/libs/executor/inc/executil.h | 2 - source/libs/executor/src/executil.c | 82 +++---------------------- source/libs/executor/src/executorimpl.c | 4 +- 3 files changed, 10 insertions(+), 78 deletions(-) diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index 31492cafa8..76a3359b5b 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -142,8 +142,6 @@ int32_t getNumOfTotalRes(SGroupResInfo* pGroupResInfo); SSDataBlock* createResDataBlock(SDataBlockDescNode* pNode); EDealRes doTranslateTagExpr(SNode** pNode, void* pContext); -int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, SNode* pTagIndexCond, - STableListInfo* pListInfo); int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode, char* keyBuf, uint64_t* pGroupId); size_t getTableTagsBufLen(const SNodeList* pGroups); diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index be83a7c392..82427f6eff 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -46,6 +46,8 @@ typedef struct tagFilterAssist { static int32_t removeInvalidTable(SArray* uids, SHashObj* tags); static int32_t optimizeTbnameInCond(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond, SHashObj* tags); static int32_t optimizeTbnameInCondImpl(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond); +static int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, + SNode* pTagIndexCond, STableListInfo* pListInfo); static int64_t getLimit(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->limit; } static int64_t getOffset(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->offset; } @@ -1006,13 +1008,14 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, size_t numOfTables = taosArrayGetSize(res); for (int i = 0; i < numOfTables; i++) { STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0}; - void* p = taosArrayPush(pListInfo->pTableList, &info); + + void* p = taosArrayPush(pListInfo->pTableList, &info); if (p == NULL) { taosArrayDestroy(res); return TSDB_CODE_OUT_OF_MEMORY; } - qDebug("tagfilter get uid:%" PRId64 "", info.uid); + qDebug("tagfilter get uid:%" PRIu64 "", info.uid); } taosArrayDestroy(res); @@ -1825,81 +1828,10 @@ static int32_t sortTableGroup(STableListInfo* pTableListInfo) { pTableListInfo->groupOffset = taosMemoryMalloc(sizeof(int32_t) * pTableListInfo->numOfOuputGroups); memcpy(pTableListInfo->groupOffset, taosArrayGet(pList, 0), sizeof(int32_t) * pTableListInfo->numOfOuputGroups); taosArrayDestroy(pList); - -# if 0 - SArray* sortSupport = taosArrayInit(16, sizeof(uint64_t)); - if (sortSupport == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } - - size_t num = taosArrayGetSize(pTableListInfo->pTableList); - for (int32_t i = 0; i < num; i++) { - STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); - uint64_t* groupId = taosHashGet(pTableListInfo->map, &info->uid, sizeof(uint64_t)); - - int32_t index = taosArraySearchIdx(sortSupport, groupId, compareUint64Val, TD_EQ); - if (index == -1) { - void* p = taosArraySearch(sortSupport, groupId, compareUint64Val, TD_GT); - - SArray* tGroup = taosArrayInit(8, sizeof(STableKeyInfo)); - if (tGroup == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (taosArrayPush(tGroup, info) == NULL) { - qError("taos push info array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (p == NULL) { - if (taosArrayPush(sortSupport, groupId) == NULL) { - qError("taos push support array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (taosArrayPush(pTableListInfo->pGroupList, &tGroup) == NULL) { - qError("taos push group array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - } else { - int32_t pos = TARRAY_ELEM_IDX(sortSupport, p); - if (taosArrayInsert(sortSupport, pos, groupId) == NULL) { - qError("taos insert support array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - - if (taosArrayInsert(pTableListInfo->pGroupList, pos, &tGroup) == NULL) { - qError("taos insert group array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - } - } else { - SArray* tGroup = (SArray*)taosArrayGetP(pTableListInfo->pGroupList, index); - if (taosArrayPush(tGroup, info) == NULL) { - qError("taos push uid array error"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - } - } - - taosArrayDestroy(sortSupport); -#endif - return TDB_CODE_SUCCESS; - - _error: -// taosArrayDestroy(sortSupport); - return code; } -int32_t setGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { +int32_t buildGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { int32_t code = TSDB_CODE_SUCCESS; ASSERT(pTableListInfo->map != NULL); @@ -1966,7 +1898,7 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags return TSDB_CODE_SUCCESS; } - code = setGroupIdMapForAllTables(pTableListInfo, pHandle, pGroupTags, groupSort); + code = buildGroupIdMapForAllTables(pTableListInfo, pHandle, pGroupTags, groupSort); if (code != TSDB_CODE_SUCCESS) { return code; } diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 0d9d6eae06..8a2d92af02 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3490,7 +3490,9 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo pOperator = createSysTableScanOperatorInfo(pHandle, pSysScanPhyNode, pUser, pTaskInfo); } else if (QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN == type) { STagScanPhysiNode* pScanPhyNode = (STagScanPhysiNode*)pPhyNode; - int32_t code = getTableList(pHandle->meta, pHandle->vnode, pScanPhyNode, pTagCond, pTagIndexCond, pTableListInfo); + + int32_t code = createScanTableListInfo(pScanPhyNode, NULL, false, pHandle, pTableListInfo, pTagCond, + pTagIndexCond, GET_TASKID(pTaskInfo)); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; qError("failed to getTableList, code: %s", tstrerror(code)); From ae4354c2774f51715968473c9fb043ad2d102d2a Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Mon, 31 Oct 2022 10:30:54 +0800 Subject: [PATCH 52/81] enh: add sql command 'drop dnode id force' --- include/common/tmsg.h | 1 + include/common/ttokendef.h | 547 +- include/libs/nodes/cmdnodes.h | 1 + source/common/src/tmsg.c | 2 + source/libs/parser/inc/parAst.h | 2 +- source/libs/parser/inc/sql.y | 9 +- source/libs/parser/src/parAstCreater.c | 3 +- source/libs/parser/src/parTokenizer.c | 1 + source/libs/parser/src/parTranslater.c | 1 + source/libs/parser/src/sql.c | 6882 ++++++++++--------- source/libs/parser/test/parInitialDTest.cpp | 18 +- 11 files changed, 3805 insertions(+), 3662 deletions(-) diff --git a/include/common/tmsg.h b/include/common/tmsg.h index b445aed244..282cee015e 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -1478,6 +1478,7 @@ typedef struct { int32_t dnodeId; char fqdn[TSDB_FQDN_LEN]; int32_t port; + int8_t force; } SDropDnodeReq; int32_t tSerializeSDropDnodeReq(void* buf, int32_t bufLen, SDropDnodeReq* pReq); diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index dcd060205b..f5c99fcae7 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -66,280 +66,281 @@ #define TK_PORT 48 #define TK_DNODES 49 #define TK_NK_IPTOKEN 50 -#define TK_LOCAL 51 -#define TK_QNODE 52 -#define TK_BNODE 53 -#define TK_SNODE 54 -#define TK_MNODE 55 -#define TK_DATABASE 56 -#define TK_USE 57 -#define TK_FLUSH 58 -#define TK_TRIM 59 -#define TK_IF 60 -#define TK_NOT 61 -#define TK_EXISTS 62 -#define TK_BUFFER 63 -#define TK_CACHEMODEL 64 -#define TK_CACHESIZE 65 -#define TK_COMP 66 -#define TK_DURATION 67 -#define TK_NK_VARIABLE 68 -#define TK_MAXROWS 69 -#define TK_MINROWS 70 -#define TK_KEEP 71 -#define TK_PAGES 72 -#define TK_PAGESIZE 73 -#define TK_TSDB_PAGESIZE 74 -#define TK_PRECISION 75 -#define TK_REPLICA 76 -#define TK_STRICT 77 -#define TK_VGROUPS 78 -#define TK_SINGLE_STABLE 79 -#define TK_RETENTIONS 80 -#define TK_SCHEMALESS 81 -#define TK_WAL_LEVEL 82 -#define TK_WAL_FSYNC_PERIOD 83 -#define TK_WAL_RETENTION_PERIOD 84 -#define TK_WAL_RETENTION_SIZE 85 -#define TK_WAL_ROLL_PERIOD 86 -#define TK_WAL_SEGMENT_SIZE 87 -#define TK_STT_TRIGGER 88 -#define TK_TABLE_PREFIX 89 -#define TK_TABLE_SUFFIX 90 -#define TK_NK_COLON 91 -#define TK_MAX_SPEED 92 -#define TK_TABLE 93 -#define TK_NK_LP 94 -#define TK_NK_RP 95 -#define TK_STABLE 96 -#define TK_ADD 97 -#define TK_COLUMN 98 -#define TK_MODIFY 99 -#define TK_RENAME 100 -#define TK_TAG 101 -#define TK_SET 102 -#define TK_NK_EQ 103 -#define TK_USING 104 -#define TK_TAGS 105 -#define TK_COMMENT 106 -#define TK_BOOL 107 -#define TK_TINYINT 108 -#define TK_SMALLINT 109 -#define TK_INT 110 -#define TK_INTEGER 111 -#define TK_BIGINT 112 -#define TK_FLOAT 113 -#define TK_DOUBLE 114 -#define TK_BINARY 115 -#define TK_TIMESTAMP 116 -#define TK_NCHAR 117 -#define TK_UNSIGNED 118 -#define TK_JSON 119 -#define TK_VARCHAR 120 -#define TK_MEDIUMBLOB 121 -#define TK_BLOB 122 -#define TK_VARBINARY 123 -#define TK_DECIMAL 124 -#define TK_MAX_DELAY 125 -#define TK_WATERMARK 126 -#define TK_ROLLUP 127 -#define TK_TTL 128 -#define TK_SMA 129 -#define TK_FIRST 130 -#define TK_LAST 131 -#define TK_SHOW 132 -#define TK_DATABASES 133 -#define TK_TABLES 134 -#define TK_STABLES 135 -#define TK_MNODES 136 -#define TK_QNODES 137 -#define TK_FUNCTIONS 138 -#define TK_INDEXES 139 -#define TK_ACCOUNTS 140 -#define TK_APPS 141 -#define TK_CONNECTIONS 142 -#define TK_LICENCES 143 -#define TK_GRANTS 144 -#define TK_QUERIES 145 -#define TK_SCORES 146 -#define TK_TOPICS 147 -#define TK_VARIABLES 148 -#define TK_CLUSTER 149 -#define TK_BNODES 150 -#define TK_SNODES 151 -#define TK_TRANSACTIONS 152 -#define TK_DISTRIBUTED 153 -#define TK_CONSUMERS 154 -#define TK_SUBSCRIPTIONS 155 -#define TK_VNODES 156 -#define TK_LIKE 157 -#define TK_INDEX 158 -#define TK_FUNCTION 159 -#define TK_INTERVAL 160 -#define TK_TOPIC 161 -#define TK_AS 162 -#define TK_WITH 163 -#define TK_META 164 -#define TK_CONSUMER 165 -#define TK_GROUP 166 -#define TK_DESC 167 -#define TK_DESCRIBE 168 -#define TK_RESET 169 -#define TK_QUERY 170 -#define TK_CACHE 171 -#define TK_EXPLAIN 172 -#define TK_ANALYZE 173 -#define TK_VERBOSE 174 -#define TK_NK_BOOL 175 -#define TK_RATIO 176 -#define TK_NK_FLOAT 177 -#define TK_OUTPUTTYPE 178 -#define TK_AGGREGATE 179 -#define TK_BUFSIZE 180 -#define TK_STREAM 181 -#define TK_INTO 182 -#define TK_TRIGGER 183 -#define TK_AT_ONCE 184 -#define TK_WINDOW_CLOSE 185 -#define TK_IGNORE 186 -#define TK_EXPIRED 187 -#define TK_FILL_HISTORY 188 -#define TK_SUBTABLE 189 -#define TK_KILL 190 -#define TK_CONNECTION 191 -#define TK_TRANSACTION 192 -#define TK_BALANCE 193 -#define TK_VGROUP 194 -#define TK_MERGE 195 -#define TK_REDISTRIBUTE 196 -#define TK_SPLIT 197 -#define TK_DELETE 198 -#define TK_INSERT 199 -#define TK_NULL 200 -#define TK_NK_QUESTION 201 -#define TK_NK_ARROW 202 -#define TK_ROWTS 203 -#define TK_TBNAME 204 -#define TK_QSTART 205 -#define TK_QEND 206 -#define TK_QDURATION 207 -#define TK_WSTART 208 -#define TK_WEND 209 -#define TK_WDURATION 210 -#define TK_IROWTS 211 -#define TK_QTAGS 212 -#define TK_CAST 213 -#define TK_NOW 214 -#define TK_TODAY 215 -#define TK_TIMEZONE 216 -#define TK_CLIENT_VERSION 217 -#define TK_SERVER_VERSION 218 -#define TK_SERVER_STATUS 219 -#define TK_CURRENT_USER 220 -#define TK_COUNT 221 -#define TK_LAST_ROW 222 -#define TK_CASE 223 -#define TK_END 224 -#define TK_WHEN 225 -#define TK_THEN 226 -#define TK_ELSE 227 -#define TK_BETWEEN 228 -#define TK_IS 229 -#define TK_NK_LT 230 -#define TK_NK_GT 231 -#define TK_NK_LE 232 -#define TK_NK_GE 233 -#define TK_NK_NE 234 -#define TK_MATCH 235 -#define TK_NMATCH 236 -#define TK_CONTAINS 237 -#define TK_IN 238 -#define TK_JOIN 239 -#define TK_INNER 240 -#define TK_SELECT 241 -#define TK_DISTINCT 242 -#define TK_WHERE 243 -#define TK_PARTITION 244 -#define TK_BY 245 -#define TK_SESSION 246 -#define TK_STATE_WINDOW 247 -#define TK_SLIDING 248 -#define TK_FILL 249 -#define TK_VALUE 250 -#define TK_NONE 251 -#define TK_PREV 252 -#define TK_LINEAR 253 -#define TK_NEXT 254 -#define TK_HAVING 255 -#define TK_RANGE 256 -#define TK_EVERY 257 -#define TK_ORDER 258 -#define TK_SLIMIT 259 -#define TK_SOFFSET 260 -#define TK_LIMIT 261 -#define TK_OFFSET 262 -#define TK_ASC 263 -#define TK_NULLS 264 -#define TK_ABORT 265 -#define TK_AFTER 266 -#define TK_ATTACH 267 -#define TK_BEFORE 268 -#define TK_BEGIN 269 -#define TK_BITAND 270 -#define TK_BITNOT 271 -#define TK_BITOR 272 -#define TK_BLOCKS 273 -#define TK_CHANGE 274 -#define TK_COMMA 275 -#define TK_COMPACT 276 -#define TK_CONCAT 277 -#define TK_CONFLICT 278 -#define TK_COPY 279 -#define TK_DEFERRED 280 -#define TK_DELIMITERS 281 -#define TK_DETACH 282 -#define TK_DIVIDE 283 -#define TK_DOT 284 -#define TK_EACH 285 -#define TK_FAIL 286 -#define TK_FILE 287 -#define TK_FOR 288 -#define TK_GLOB 289 -#define TK_ID 290 -#define TK_IMMEDIATE 291 -#define TK_IMPORT 292 -#define TK_INITIALLY 293 -#define TK_INSTEAD 294 -#define TK_ISNULL 295 -#define TK_KEY 296 -#define TK_MODULES 297 -#define TK_NK_BITNOT 298 -#define TK_NK_SEMI 299 -#define TK_NOTNULL 300 -#define TK_OF 301 -#define TK_PLUS 302 -#define TK_PRIVILEGE 303 -#define TK_RAISE 304 -#define TK_REPLACE 305 -#define TK_RESTRICT 306 -#define TK_ROW 307 -#define TK_SEMI 308 -#define TK_STAR 309 -#define TK_STATEMENT 310 -#define TK_STRING 311 -#define TK_TIMES 312 -#define TK_UPDATE 313 -#define TK_VALUES 314 -#define TK_VARIABLE 315 -#define TK_VIEW 316 -#define TK_WAL 317 +#define TK_FORCE 51 +#define TK_LOCAL 52 +#define TK_QNODE 53 +#define TK_BNODE 54 +#define TK_SNODE 55 +#define TK_MNODE 56 +#define TK_DATABASE 57 +#define TK_USE 58 +#define TK_FLUSH 59 +#define TK_TRIM 60 +#define TK_IF 61 +#define TK_NOT 62 +#define TK_EXISTS 63 +#define TK_BUFFER 64 +#define TK_CACHEMODEL 65 +#define TK_CACHESIZE 66 +#define TK_COMP 67 +#define TK_DURATION 68 +#define TK_NK_VARIABLE 69 +#define TK_MAXROWS 70 +#define TK_MINROWS 71 +#define TK_KEEP 72 +#define TK_PAGES 73 +#define TK_PAGESIZE 74 +#define TK_TSDB_PAGESIZE 75 +#define TK_PRECISION 76 +#define TK_REPLICA 77 +#define TK_STRICT 78 +#define TK_VGROUPS 79 +#define TK_SINGLE_STABLE 80 +#define TK_RETENTIONS 81 +#define TK_SCHEMALESS 82 +#define TK_WAL_LEVEL 83 +#define TK_WAL_FSYNC_PERIOD 84 +#define TK_WAL_RETENTION_PERIOD 85 +#define TK_WAL_RETENTION_SIZE 86 +#define TK_WAL_ROLL_PERIOD 87 +#define TK_WAL_SEGMENT_SIZE 88 +#define TK_STT_TRIGGER 89 +#define TK_TABLE_PREFIX 90 +#define TK_TABLE_SUFFIX 91 +#define TK_NK_COLON 92 +#define TK_MAX_SPEED 93 +#define TK_TABLE 94 +#define TK_NK_LP 95 +#define TK_NK_RP 96 +#define TK_STABLE 97 +#define TK_ADD 98 +#define TK_COLUMN 99 +#define TK_MODIFY 100 +#define TK_RENAME 101 +#define TK_TAG 102 +#define TK_SET 103 +#define TK_NK_EQ 104 +#define TK_USING 105 +#define TK_TAGS 106 +#define TK_COMMENT 107 +#define TK_BOOL 108 +#define TK_TINYINT 109 +#define TK_SMALLINT 110 +#define TK_INT 111 +#define TK_INTEGER 112 +#define TK_BIGINT 113 +#define TK_FLOAT 114 +#define TK_DOUBLE 115 +#define TK_BINARY 116 +#define TK_TIMESTAMP 117 +#define TK_NCHAR 118 +#define TK_UNSIGNED 119 +#define TK_JSON 120 +#define TK_VARCHAR 121 +#define TK_MEDIUMBLOB 122 +#define TK_BLOB 123 +#define TK_VARBINARY 124 +#define TK_DECIMAL 125 +#define TK_MAX_DELAY 126 +#define TK_WATERMARK 127 +#define TK_ROLLUP 128 +#define TK_TTL 129 +#define TK_SMA 130 +#define TK_FIRST 131 +#define TK_LAST 132 +#define TK_SHOW 133 +#define TK_DATABASES 134 +#define TK_TABLES 135 +#define TK_STABLES 136 +#define TK_MNODES 137 +#define TK_QNODES 138 +#define TK_FUNCTIONS 139 +#define TK_INDEXES 140 +#define TK_ACCOUNTS 141 +#define TK_APPS 142 +#define TK_CONNECTIONS 143 +#define TK_LICENCES 144 +#define TK_GRANTS 145 +#define TK_QUERIES 146 +#define TK_SCORES 147 +#define TK_TOPICS 148 +#define TK_VARIABLES 149 +#define TK_CLUSTER 150 +#define TK_BNODES 151 +#define TK_SNODES 152 +#define TK_TRANSACTIONS 153 +#define TK_DISTRIBUTED 154 +#define TK_CONSUMERS 155 +#define TK_SUBSCRIPTIONS 156 +#define TK_VNODES 157 +#define TK_LIKE 158 +#define TK_INDEX 159 +#define TK_FUNCTION 160 +#define TK_INTERVAL 161 +#define TK_TOPIC 162 +#define TK_AS 163 +#define TK_WITH 164 +#define TK_META 165 +#define TK_CONSUMER 166 +#define TK_GROUP 167 +#define TK_DESC 168 +#define TK_DESCRIBE 169 +#define TK_RESET 170 +#define TK_QUERY 171 +#define TK_CACHE 172 +#define TK_EXPLAIN 173 +#define TK_ANALYZE 174 +#define TK_VERBOSE 175 +#define TK_NK_BOOL 176 +#define TK_RATIO 177 +#define TK_NK_FLOAT 178 +#define TK_OUTPUTTYPE 179 +#define TK_AGGREGATE 180 +#define TK_BUFSIZE 181 +#define TK_STREAM 182 +#define TK_INTO 183 +#define TK_TRIGGER 184 +#define TK_AT_ONCE 185 +#define TK_WINDOW_CLOSE 186 +#define TK_IGNORE 187 +#define TK_EXPIRED 188 +#define TK_FILL_HISTORY 189 +#define TK_SUBTABLE 190 +#define TK_KILL 191 +#define TK_CONNECTION 192 +#define TK_TRANSACTION 193 +#define TK_BALANCE 194 +#define TK_VGROUP 195 +#define TK_MERGE 196 +#define TK_REDISTRIBUTE 197 +#define TK_SPLIT 198 +#define TK_DELETE 199 +#define TK_INSERT 200 +#define TK_NULL 201 +#define TK_NK_QUESTION 202 +#define TK_NK_ARROW 203 +#define TK_ROWTS 204 +#define TK_TBNAME 205 +#define TK_QSTART 206 +#define TK_QEND 207 +#define TK_QDURATION 208 +#define TK_WSTART 209 +#define TK_WEND 210 +#define TK_WDURATION 211 +#define TK_IROWTS 212 +#define TK_QTAGS 213 +#define TK_CAST 214 +#define TK_NOW 215 +#define TK_TODAY 216 +#define TK_TIMEZONE 217 +#define TK_CLIENT_VERSION 218 +#define TK_SERVER_VERSION 219 +#define TK_SERVER_STATUS 220 +#define TK_CURRENT_USER 221 +#define TK_COUNT 222 +#define TK_LAST_ROW 223 +#define TK_CASE 224 +#define TK_END 225 +#define TK_WHEN 226 +#define TK_THEN 227 +#define TK_ELSE 228 +#define TK_BETWEEN 229 +#define TK_IS 230 +#define TK_NK_LT 231 +#define TK_NK_GT 232 +#define TK_NK_LE 233 +#define TK_NK_GE 234 +#define TK_NK_NE 235 +#define TK_MATCH 236 +#define TK_NMATCH 237 +#define TK_CONTAINS 238 +#define TK_IN 239 +#define TK_JOIN 240 +#define TK_INNER 241 +#define TK_SELECT 242 +#define TK_DISTINCT 243 +#define TK_WHERE 244 +#define TK_PARTITION 245 +#define TK_BY 246 +#define TK_SESSION 247 +#define TK_STATE_WINDOW 248 +#define TK_SLIDING 249 +#define TK_FILL 250 +#define TK_VALUE 251 +#define TK_NONE 252 +#define TK_PREV 253 +#define TK_LINEAR 254 +#define TK_NEXT 255 +#define TK_HAVING 256 +#define TK_RANGE 257 +#define TK_EVERY 258 +#define TK_ORDER 259 +#define TK_SLIMIT 260 +#define TK_SOFFSET 261 +#define TK_LIMIT 262 +#define TK_OFFSET 263 +#define TK_ASC 264 +#define TK_NULLS 265 +#define TK_ABORT 266 +#define TK_AFTER 267 +#define TK_ATTACH 268 +#define TK_BEFORE 269 +#define TK_BEGIN 270 +#define TK_BITAND 271 +#define TK_BITNOT 272 +#define TK_BITOR 273 +#define TK_BLOCKS 274 +#define TK_CHANGE 275 +#define TK_COMMA 276 +#define TK_COMPACT 277 +#define TK_CONCAT 278 +#define TK_CONFLICT 279 +#define TK_COPY 280 +#define TK_DEFERRED 281 +#define TK_DELIMITERS 282 +#define TK_DETACH 283 +#define TK_DIVIDE 284 +#define TK_DOT 285 +#define TK_EACH 286 +#define TK_FAIL 287 +#define TK_FILE 288 +#define TK_FOR 289 +#define TK_GLOB 290 +#define TK_ID 291 +#define TK_IMMEDIATE 292 +#define TK_IMPORT 293 +#define TK_INITIALLY 294 +#define TK_INSTEAD 295 +#define TK_ISNULL 296 +#define TK_KEY 297 +#define TK_MODULES 298 +#define TK_NK_BITNOT 299 +#define TK_NK_SEMI 300 +#define TK_NOTNULL 301 +#define TK_OF 302 +#define TK_PLUS 303 +#define TK_PRIVILEGE 304 +#define TK_RAISE 305 +#define TK_REPLACE 306 +#define TK_RESTRICT 307 +#define TK_ROW 308 +#define TK_SEMI 309 +#define TK_STAR 310 +#define TK_STATEMENT 311 +#define TK_STRING 312 +#define TK_TIMES 313 +#define TK_UPDATE 314 +#define TK_VALUES 315 +#define TK_VARIABLE 316 +#define TK_VIEW 317 +#define TK_WAL 318 -#define TK_NK_SPACE 300 -#define TK_NK_COMMENT 301 -#define TK_NK_ILLEGAL 302 -#define TK_NK_HEX 303 // hex number 0x123 -#define TK_NK_OCT 304 // oct number -#define TK_NK_BIN 305 // bin format data 0b111 +#define TK_NK_SPACE 600 +#define TK_NK_COMMENT 601 +#define TK_NK_ILLEGAL 602 +#define TK_NK_HEX 603 // hex number 0x123 +#define TK_NK_OCT 604 // oct number +#define TK_NK_BIN 605 // bin format data 0b111 #define TK_NK_NIL 65535 diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index 43746630f9..59f64f1863 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -235,6 +235,7 @@ typedef struct SDropDnodeStmt { int32_t dnodeId; char fqdn[TSDB_FQDN_LEN]; int32_t port; + bool force; } SDropDnodeStmt; typedef struct SAlterDnodeStmt { diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index ce9b60668e..073e6bc8c6 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -1485,6 +1485,7 @@ int32_t tSerializeSDropDnodeReq(void *buf, int32_t bufLen, SDropDnodeReq *pReq) if (tEncodeI32(&encoder, pReq->dnodeId) < 0) return -1; if (tEncodeCStr(&encoder, pReq->fqdn) < 0) return -1; if (tEncodeI32(&encoder, pReq->port) < 0) return -1; + if (tEncodeI8(&encoder, pReq->force) < 0) return -1; tEndEncode(&encoder); int32_t tlen = encoder.pos; @@ -1500,6 +1501,7 @@ int32_t tDeserializeSDropDnodeReq(void *buf, int32_t bufLen, SDropDnodeReq *pReq if (tDecodeI32(&decoder, &pReq->dnodeId) < 0) return -1; if (tDecodeCStrTo(&decoder, pReq->fqdn) < 0) return -1; if (tDecodeI32(&decoder, &pReq->port) < 0) return -1; + if (tDecodeI8(&decoder, &pReq->force) < 0) return -1; tEndDecode(&decoder); tDecoderClear(&decoder); diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index 09d1a5e772..86940a9d7a 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -182,7 +182,7 @@ SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const ST SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, const SToken* pVal); SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName); SNode* createCreateDnodeStmt(SAstCreateContext* pCxt, const SToken* pFqdn, const SToken* pPort); -SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode); +SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, bool force); SNode* createAlterDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, const SToken* pConfig, const SToken* pValue); SNode* createCreateIndexStmt(SAstCreateContext* pCxt, EIndexType type, bool ignoreExists, SNode* pIndexName, SNode* pRealTable, SNodeList* pCols, SNode* pOptions); diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 00e40cfc50..b143f1624e 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -120,8 +120,8 @@ priv_level(A) ::= db_name(B) NK_DOT NK_STAR. /************************************************ create/drop/alter dnode *********************************************/ cmd ::= CREATE DNODE dnode_endpoint(A). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); } cmd ::= CREATE DNODE dnode_endpoint(A) PORT NK_INTEGER(B). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); } -cmd ::= DROP DNODE NK_INTEGER(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); } -cmd ::= DROP DNODE dnode_endpoint(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); } +cmd ::= DROP DNODE NK_INTEGER(A) force_opt(B). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B); } +cmd ::= DROP DNODE dnode_endpoint(A) force_opt(B). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B); } cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); } cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B) NK_STRING(C). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, &C); } cmd ::= ALTER ALL DNODES NK_STRING(A). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, NULL); } @@ -133,6 +133,11 @@ dnode_endpoint(A) ::= NK_STRING(B). dnode_endpoint(A) ::= NK_ID(B). { A = B; } dnode_endpoint(A) ::= NK_IPTOKEN(B). { A = B; } +%type force_opt { bool } +%destructor force_opt { } +force_opt(A) ::= . { A = false; } +force_opt(A) ::= FORCE. { A = true; } + /************************************************ alter local *********************************************************/ cmd ::= ALTER LOCAL NK_STRING(A). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); } cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index df8e8554a7..49685112a9 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1457,7 +1457,7 @@ SNode* createCreateDnodeStmt(SAstCreateContext* pCxt, const SToken* pFqdn, const return (SNode*)pStmt; } -SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode) { +SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, bool force) { CHECK_PARSER_STATUS(pCxt); SDropDnodeStmt* pStmt = (SDropDnodeStmt*)nodesMakeNode(QUERY_NODE_DROP_DNODE_STMT); CHECK_OUT_OF_MEM(pStmt); @@ -1469,6 +1469,7 @@ SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode) { return NULL; } } + pStmt->force = force; return (SNode*)pStmt; } diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c index 82a4e8000b..88a1d39ff2 100644 --- a/source/libs/parser/src/parTokenizer.c +++ b/source/libs/parser/src/parTokenizer.c @@ -97,6 +97,7 @@ static SKeyword keywordTable[] = { {"FLOAT", TK_FLOAT}, {"FLUSH", TK_FLUSH}, {"FROM", TK_FROM}, + {"FORCE", TK_FORCE}, {"FUNCTION", TK_FUNCTION}, {"FUNCTIONS", TK_FUNCTIONS}, {"GRANT", TK_GRANT}, diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index bffeb06f7c..dd04da203c 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -4995,6 +4995,7 @@ static int32_t translateDropDnode(STranslateContext* pCxt, SDropDnodeStmt* pStmt dropReq.dnodeId = pStmt->dnodeId; strcpy(dropReq.fqdn, pStmt->fqdn); dropReq.port = pStmt->port; + dropReq.force = pStmt->force; return buildCmdMsg(pCxt, TDMT_MND_DROP_DNODE, (FSerializeFunc)tSerializeSDropDnodeReq, &dropReq); } diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index 790bb0664c..292060515c 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -104,26 +104,26 @@ #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 450 +#define YYNOCODE 452 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SToken typedef union { int yyinit; ParseTOKENTYPE yy0; - int64_t yy9; - SToken yy29; - EOrder yy38; - bool yy137; - SAlterOption yy245; - SNodeList* yy424; - int32_t yy460; - SDataType yy484; - int8_t yy503; - EFillMode yy594; - EJoinType yy612; - EOperatorType yy740; - ENullOrder yy757; - SNode* yy812; + EOperatorType yy4; + int64_t yy37; + SAlterOption yy101; + SNode* yy232; + SDataType yy264; + SNodeList* yy288; + SToken yy481; + int8_t yy607; + EFillMode yy614; + int32_t yy692; + EJoinType yy700; + bool yy777; + ENullOrder yy833; + EOrder yy866; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -139,17 +139,17 @@ typedef union { #define ParseCTX_FETCH #define ParseCTX_STORE #define YYFALLBACK 1 -#define YYNSTATE 699 -#define YYNRULE 526 -#define YYNTOKEN 318 -#define YY_MAX_SHIFT 698 -#define YY_MIN_SHIFTREDUCE 1033 -#define YY_MAX_SHIFTREDUCE 1558 -#define YY_ERROR_ACTION 1559 -#define YY_ACCEPT_ACTION 1560 -#define YY_NO_ACTION 1561 -#define YY_MIN_REDUCE 1562 -#define YY_MAX_REDUCE 2087 +#define YYNSTATE 701 +#define YYNRULE 528 +#define YYNTOKEN 319 +#define YY_MAX_SHIFT 700 +#define YY_MIN_SHIFTREDUCE 1036 +#define YY_MAX_SHIFTREDUCE 1563 +#define YY_ERROR_ACTION 1564 +#define YY_ACCEPT_ACTION 1565 +#define YY_NO_ACTION 1566 +#define YY_MIN_REDUCE 1567 +#define YY_MAX_REDUCE 2094 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -216,753 +216,861 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2801) +#define YY_ACTTAB_COUNT (3333) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 1889, 34, 268, 1889, 1702, 1066, 448, 1903, 449, 1597, - /* 10 */ 1704, 1885, 44, 42, 1885, 456, 396, 449, 1597, 1817, - /* 20 */ 351, 1885, 1339, 43, 41, 40, 39, 38, 1365, 40, - /* 30 */ 39, 38, 591, 1419, 154, 1337, 1921, 1881, 1887, 339, - /* 40 */ 1881, 1887, 345, 1716, 592, 1070, 1071, 1881, 1887, 1871, - /* 50 */ 598, 604, 30, 598, 311, 157, 1414, 1574, 37, 36, - /* 60 */ 598, 17, 43, 41, 40, 39, 38, 1903, 1345, 44, - /* 70 */ 42, 1489, 1901, 1364, 1759, 1760, 1937, 351, 576, 1339, - /* 80 */ 97, 1902, 1904, 608, 1906, 1907, 603, 1083, 598, 1082, - /* 90 */ 1419, 77, 1337, 168, 1, 1990, 1921, 1493, 58, 344, - /* 100 */ 1986, 77, 484, 1364, 605, 588, 46, 2058, 591, 1871, - /* 110 */ 2062, 604, 173, 1414, 1709, 125, 695, 1084, 17, 536, - /* 120 */ 2016, 550, 575, 171, 1708, 1345, 336, 2059, 577, 1814, - /* 130 */ 1421, 1422, 606, 52, 132, 591, 1937, 1563, 1232, 1233, - /* 140 */ 98, 350, 1904, 608, 1906, 1907, 603, 58, 598, 356, - /* 150 */ 1713, 1, 1758, 1760, 1083, 1990, 1082, 1585, 110, 315, - /* 160 */ 1986, 109, 108, 107, 106, 105, 104, 103, 102, 101, - /* 170 */ 2058, 130, 465, 695, 58, 1340, 1365, 1338, 389, 433, - /* 180 */ 388, 337, 46, 1584, 1084, 575, 171, 1421, 1422, 154, - /* 190 */ 2059, 577, 590, 169, 1998, 1999, 1364, 2003, 1715, 1871, - /* 200 */ 1343, 1344, 1583, 1394, 1395, 1397, 1398, 1399, 1400, 1401, - /* 210 */ 1402, 1403, 1404, 600, 596, 1412, 1413, 1415, 1416, 1417, - /* 220 */ 1418, 1420, 1423, 3, 47, 1871, 1691, 550, 1560, 502, - /* 230 */ 501, 500, 1340, 94, 1338, 186, 185, 126, 496, 120, - /* 240 */ 641, 174, 495, 494, 1871, 174, 486, 127, 493, 499, - /* 250 */ 220, 1921, 228, 174, 492, 1705, 1713, 1343, 1344, 570, - /* 260 */ 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - /* 270 */ 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, - /* 280 */ 3, 44, 42, 698, 1807, 1890, 465, 1396, 366, 351, - /* 290 */ 58, 1339, 81, 233, 174, 179, 1885, 275, 569, 1903, - /* 300 */ 588, 11, 1419, 156, 1337, 532, 79, 313, 1666, 1582, - /* 310 */ 540, 165, 538, 1366, 1581, 588, 688, 684, 680, 676, - /* 320 */ 273, 174, 1881, 1887, 1765, 1414, 1765, 566, 1921, 132, - /* 330 */ 17, 338, 516, 355, 2058, 598, 605, 1345, 44, 42, - /* 340 */ 1763, 1871, 1763, 604, 132, 514, 351, 512, 1339, 2064, - /* 350 */ 171, 1871, 1316, 1317, 2059, 577, 1871, 95, 1150, 1419, - /* 360 */ 241, 1337, 385, 1, 606, 579, 121, 550, 1937, 2005, - /* 370 */ 583, 174, 295, 350, 1904, 608, 1906, 1907, 603, 120, - /* 380 */ 598, 130, 1414, 387, 383, 695, 491, 17, 265, 1998, - /* 390 */ 587, 1152, 586, 547, 1345, 2058, 1713, 2002, 1515, 1421, - /* 400 */ 1422, 571, 2058, 170, 1998, 1999, 1363, 2003, 167, 2063, - /* 410 */ 575, 171, 62, 572, 567, 2059, 577, 575, 171, 490, - /* 420 */ 1, 1752, 2059, 577, 110, 230, 633, 109, 108, 107, - /* 430 */ 106, 105, 104, 103, 102, 101, 1562, 174, 2058, 498, - /* 440 */ 497, 489, 695, 1310, 1340, 223, 1338, 1429, 563, 1513, - /* 450 */ 1514, 1516, 1517, 1364, 2062, 267, 1421, 1422, 2059, 2061, - /* 460 */ 119, 118, 117, 116, 115, 114, 113, 112, 111, 1343, - /* 470 */ 1344, 595, 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, - /* 480 */ 1403, 1404, 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, - /* 490 */ 1420, 1423, 3, 1450, 11, 11, 1698, 9, 234, 235, - /* 500 */ 453, 1340, 58, 1338, 1627, 1858, 1362, 1190, 630, 629, - /* 510 */ 628, 1194, 627, 1196, 1197, 626, 1199, 623, 1689, 1205, - /* 520 */ 620, 1207, 1208, 617, 614, 1486, 1343, 1344, 327, 1394, - /* 530 */ 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 600, - /* 540 */ 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, 3, - /* 550 */ 44, 42, 373, 550, 1580, 2063, 313, 1579, 351, 540, - /* 560 */ 1339, 538, 354, 447, 31, 176, 451, 502, 501, 500, - /* 570 */ 154, 1419, 1578, 1337, 1455, 126, 496, 1667, 641, 1715, - /* 580 */ 495, 494, 1713, 1903, 2058, 2005, 493, 499, 328, 584, - /* 590 */ 326, 325, 492, 488, 1414, 1345, 1871, 490, 182, 1871, - /* 600 */ 2062, 552, 1903, 1962, 2059, 2060, 1345, 44, 42, 1424, - /* 610 */ 1440, 550, 1921, 2001, 1871, 351, 653, 1339, 588, 489, - /* 620 */ 605, 550, 1700, 394, 1577, 1871, 357, 604, 1419, 1765, - /* 630 */ 1337, 1921, 8, 395, 154, 74, 320, 1396, 73, 605, - /* 640 */ 1713, 550, 1696, 1715, 1871, 1763, 604, 132, 1901, 174, - /* 650 */ 1713, 1414, 1937, 405, 695, 390, 158, 1902, 1904, 608, - /* 660 */ 1906, 1907, 603, 1345, 598, 1690, 1871, 1901, 1421, 1422, - /* 670 */ 1713, 1937, 532, 550, 576, 97, 1902, 1904, 608, 1906, - /* 680 */ 1907, 603, 2063, 598, 130, 419, 1367, 87, 2078, 8, - /* 690 */ 1990, 666, 664, 455, 344, 1986, 451, 555, 2027, 1366, - /* 700 */ 224, 2058, 1713, 2058, 2024, 599, 172, 1998, 1999, 1706, - /* 710 */ 2003, 695, 554, 1340, 1962, 1338, 2064, 171, 575, 171, - /* 720 */ 1576, 2059, 577, 2059, 577, 1421, 1422, 1573, 37, 36, - /* 730 */ 13, 12, 43, 41, 40, 39, 38, 2005, 1343, 1344, - /* 740 */ 1367, 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, - /* 750 */ 1404, 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, - /* 760 */ 1423, 3, 1871, 1485, 1813, 2000, 306, 1807, 550, 1871, - /* 770 */ 1340, 639, 1338, 221, 1548, 1812, 1743, 306, 180, 174, - /* 780 */ 420, 37, 36, 1364, 1572, 43, 41, 40, 39, 38, - /* 790 */ 145, 144, 636, 635, 634, 1343, 1344, 1713, 1394, 1395, - /* 800 */ 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 600, 596, - /* 810 */ 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, 3, 44, - /* 820 */ 42, 536, 507, 1807, 1462, 639, 1871, 351, 243, 1339, - /* 830 */ 1571, 1815, 580, 128, 184, 637, 1961, 517, 1756, 227, - /* 840 */ 1419, 267, 1337, 32, 145, 144, 636, 635, 634, 37, - /* 850 */ 36, 219, 1903, 43, 41, 40, 39, 38, 550, 404, - /* 860 */ 1570, 550, 1569, 1414, 632, 510, 550, 1765, 1525, 504, - /* 870 */ 463, 1903, 1871, 464, 218, 1345, 44, 42, 1710, 80, - /* 880 */ 550, 1921, 244, 1764, 351, 638, 1339, 1713, 1756, 605, - /* 890 */ 1713, 7, 137, 527, 1871, 1713, 604, 1419, 1794, 1337, - /* 900 */ 1921, 8, 1871, 654, 1871, 1683, 550, 72, 605, 1713, - /* 910 */ 550, 64, 1892, 1871, 63, 604, 280, 1901, 528, 1743, - /* 920 */ 1414, 1937, 533, 695, 1903, 159, 1902, 1904, 608, 1906, - /* 930 */ 1907, 603, 1345, 598, 1688, 1713, 1901, 1421, 1422, 1713, - /* 940 */ 1937, 1568, 550, 1567, 97, 1902, 1904, 608, 1906, 1907, - /* 950 */ 603, 1575, 598, 1921, 238, 1070, 1071, 2078, 1, 1990, - /* 960 */ 1894, 605, 550, 344, 1986, 2063, 1871, 1396, 604, 2010, - /* 970 */ 1482, 1713, 2030, 2052, 546, 550, 262, 578, 2079, 143, - /* 980 */ 695, 564, 1340, 1871, 1338, 1871, 1348, 548, 483, 1901, - /* 990 */ 1566, 1713, 1565, 1937, 1421, 1422, 397, 159, 1902, 1904, - /* 1000 */ 608, 1906, 1907, 603, 1713, 598, 45, 1343, 1344, 398, - /* 1010 */ 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - /* 1020 */ 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, - /* 1030 */ 3, 51, 1871, 206, 1871, 48, 4, 50, 531, 1340, - /* 1040 */ 639, 1338, 211, 13, 12, 209, 414, 161, 213, 581, - /* 1050 */ 2080, 212, 482, 478, 474, 470, 205, 1548, 1287, 145, - /* 1060 */ 144, 636, 635, 634, 1343, 1344, 1624, 1394, 1395, 1397, - /* 1070 */ 1398, 1399, 1400, 1401, 1402, 1403, 1404, 600, 596, 1412, - /* 1080 */ 1413, 1415, 1416, 1417, 1418, 1420, 1423, 3, 310, 550, - /* 1090 */ 1362, 1614, 1482, 78, 256, 215, 203, 427, 214, 1922, - /* 1100 */ 438, 549, 37, 36, 1609, 1607, 43, 41, 40, 39, - /* 1110 */ 38, 217, 232, 503, 216, 93, 138, 411, 1713, 439, - /* 1120 */ 1347, 413, 1557, 1558, 362, 90, 505, 508, 1351, 672, - /* 1130 */ 671, 670, 669, 361, 1598, 668, 667, 133, 662, 661, - /* 1140 */ 660, 659, 658, 657, 656, 655, 147, 651, 650, 649, - /* 1150 */ 360, 359, 646, 645, 644, 643, 642, 155, 202, 196, - /* 1160 */ 647, 201, 286, 323, 236, 461, 37, 36, 543, 2020, - /* 1170 */ 43, 41, 40, 39, 38, 400, 284, 66, 1753, 142, - /* 1180 */ 65, 194, 1130, 535, 37, 36, 143, 60, 43, 41, - /* 1190 */ 40, 39, 38, 589, 248, 60, 190, 444, 442, 1903, - /* 1200 */ 532, 26, 45, 437, 2, 648, 432, 431, 430, 429, - /* 1210 */ 426, 425, 424, 423, 422, 418, 417, 416, 415, 324, - /* 1220 */ 408, 407, 406, 264, 402, 401, 322, 1128, 1921, 2058, - /* 1230 */ 45, 240, 1110, 58, 261, 367, 605, 316, 1183, 1512, - /* 1240 */ 372, 1871, 5, 604, 2064, 171, 251, 1456, 1603, 2059, - /* 1250 */ 577, 1303, 37, 36, 1405, 550, 43, 41, 40, 39, - /* 1260 */ 38, 1555, 1350, 321, 1901, 1111, 612, 269, 1937, 142, - /* 1270 */ 276, 96, 97, 1902, 1904, 608, 1906, 1907, 603, 1448, - /* 1280 */ 598, 183, 279, 129, 1713, 141, 1961, 1990, 143, 399, - /* 1290 */ 122, 344, 1986, 142, 37, 36, 690, 435, 43, 41, - /* 1300 */ 40, 39, 38, 364, 1362, 363, 71, 70, 393, 37, - /* 1310 */ 36, 178, 550, 43, 41, 40, 39, 38, 1211, 403, - /* 1320 */ 532, 1215, 532, 409, 358, 421, 428, 1809, 434, 309, - /* 1330 */ 440, 187, 381, 1449, 379, 375, 371, 368, 365, 1505, - /* 1340 */ 1222, 1713, 1220, 436, 441, 146, 443, 445, 1368, 2058, - /* 1350 */ 1903, 2058, 1370, 446, 454, 457, 193, 1554, 195, 458, - /* 1360 */ 1369, 459, 1371, 462, 2064, 171, 2064, 171, 460, 2059, - /* 1370 */ 577, 2059, 577, 198, 200, 466, 75, 76, 204, 1921, - /* 1380 */ 174, 485, 487, 1703, 208, 1699, 210, 592, 148, 149, - /* 1390 */ 99, 312, 1871, 1903, 604, 519, 521, 1701, 1697, 150, - /* 1400 */ 151, 522, 222, 277, 33, 348, 1443, 1444, 1445, 1446, - /* 1410 */ 1447, 1451, 1452, 1453, 1454, 1901, 1848, 526, 225, 1937, - /* 1420 */ 523, 529, 1921, 97, 1902, 1904, 608, 1906, 1907, 603, - /* 1430 */ 605, 598, 534, 333, 562, 1871, 168, 604, 1990, 229, - /* 1440 */ 139, 544, 344, 1986, 537, 1847, 1819, 541, 153, 140, - /* 1450 */ 545, 335, 84, 278, 1903, 86, 1714, 1367, 1901, 558, - /* 1460 */ 565, 2012, 1937, 2017, 560, 6, 97, 1902, 1904, 608, - /* 1470 */ 1906, 1907, 603, 2021, 598, 246, 1903, 561, 574, 2078, - /* 1480 */ 340, 1990, 2031, 1921, 2036, 344, 1986, 2035, 250, 568, - /* 1490 */ 559, 605, 255, 162, 257, 2009, 1871, 557, 604, 556, - /* 1500 */ 260, 341, 258, 585, 259, 1921, 1482, 2057, 2081, 1366, - /* 1510 */ 582, 131, 2006, 605, 57, 88, 610, 263, 1871, 1901, - /* 1520 */ 604, 1971, 1684, 1937, 1757, 281, 520, 97, 1902, 1904, - /* 1530 */ 608, 1906, 1907, 603, 1903, 598, 272, 691, 692, 694, - /* 1540 */ 1965, 1901, 1990, 532, 49, 1937, 344, 1986, 305, 97, - /* 1550 */ 1902, 1904, 608, 1906, 1907, 603, 293, 598, 1865, 304, - /* 1560 */ 347, 346, 1963, 1921, 1990, 285, 303, 283, 344, 1986, - /* 1570 */ 1353, 605, 2058, 1864, 68, 1863, 1871, 1862, 604, 69, - /* 1580 */ 1859, 1419, 369, 1346, 370, 1331, 1332, 2064, 171, 177, - /* 1590 */ 374, 1857, 2059, 577, 1903, 376, 377, 378, 1856, 1901, - /* 1600 */ 380, 1339, 1855, 1937, 1414, 382, 1854, 97, 1902, 1904, - /* 1610 */ 608, 1906, 1907, 603, 1337, 598, 1345, 384, 1853, 1306, - /* 1620 */ 553, 386, 1990, 1921, 1305, 1830, 344, 1986, 1829, 391, - /* 1630 */ 392, 605, 1828, 1827, 1275, 1802, 1871, 1801, 604, 1799, - /* 1640 */ 1798, 134, 1797, 1800, 1796, 135, 1795, 1345, 1793, 1792, - /* 1650 */ 1791, 181, 410, 1790, 412, 1903, 1789, 1788, 1787, 1901, - /* 1660 */ 1786, 1785, 1784, 1937, 594, 1783, 1782, 98, 1902, 1904, - /* 1670 */ 608, 1906, 1907, 603, 1781, 598, 1780, 1779, 1778, 1777, - /* 1680 */ 1776, 1775, 1990, 136, 1921, 1774, 1989, 1986, 166, 334, - /* 1690 */ 1773, 1772, 605, 1771, 1770, 695, 1769, 1871, 1768, 604, - /* 1700 */ 1767, 1766, 1158, 1629, 1277, 1628, 1626, 188, 189, 1903, - /* 1710 */ 1594, 191, 123, 1073, 1593, 192, 450, 452, 1072, 1843, - /* 1720 */ 1901, 1837, 124, 1354, 1937, 1349, 1826, 1825, 302, 1902, - /* 1730 */ 1904, 608, 1906, 1907, 603, 199, 598, 1811, 1921, 1692, - /* 1740 */ 1625, 197, 1623, 467, 468, 1621, 605, 471, 1357, 1359, - /* 1750 */ 469, 1871, 1903, 604, 1340, 473, 1338, 1103, 1619, 475, - /* 1760 */ 472, 1617, 596, 1412, 1413, 1415, 1416, 1417, 1418, 476, - /* 1770 */ 479, 477, 480, 481, 1901, 1606, 1903, 1605, 1937, 1343, - /* 1780 */ 1344, 1921, 98, 1902, 1904, 608, 1906, 1907, 603, 602, - /* 1790 */ 598, 1590, 1694, 1225, 1871, 59, 604, 1990, 1226, 1693, - /* 1800 */ 1149, 593, 1986, 1148, 1147, 1921, 1140, 1146, 207, 1145, - /* 1810 */ 663, 1142, 665, 605, 1141, 1139, 1615, 1901, 1871, 329, - /* 1820 */ 604, 1937, 1610, 330, 1608, 301, 1902, 1904, 608, 1906, - /* 1830 */ 1907, 603, 601, 598, 551, 1955, 506, 331, 1589, 509, - /* 1840 */ 511, 1901, 1903, 1588, 513, 1937, 1587, 515, 100, 98, - /* 1850 */ 1902, 1904, 608, 1906, 1907, 603, 25, 598, 1842, 1323, - /* 1860 */ 1836, 1312, 1903, 524, 1990, 152, 1824, 1822, 226, 1987, - /* 1870 */ 1823, 1921, 2063, 1821, 1820, 18, 539, 53, 231, 602, - /* 1880 */ 525, 530, 332, 1321, 1871, 1320, 604, 1818, 237, 542, - /* 1890 */ 82, 1921, 1810, 83, 239, 242, 85, 90, 19, 605, - /* 1900 */ 20, 27, 56, 1527, 1871, 1903, 604, 1901, 1431, 15, - /* 1910 */ 254, 1937, 10, 245, 249, 301, 1902, 1904, 608, 1906, - /* 1920 */ 1907, 603, 247, 598, 1509, 1956, 1511, 1901, 160, 1903, - /* 1930 */ 252, 1937, 1504, 28, 1921, 158, 1902, 1904, 608, 1906, - /* 1940 */ 1907, 603, 605, 598, 253, 1892, 89, 1871, 1547, 604, - /* 1950 */ 29, 1548, 1430, 61, 22, 1542, 1541, 342, 1921, 1546, - /* 1960 */ 1545, 343, 266, 349, 1891, 163, 605, 1479, 21, 1355, - /* 1970 */ 1901, 1871, 1478, 604, 1937, 16, 55, 2028, 297, 1902, - /* 1980 */ 1904, 608, 1906, 1907, 603, 54, 598, 12, 1441, 1903, - /* 1990 */ 1940, 164, 1409, 1407, 1901, 1406, 597, 35, 1937, 175, - /* 2000 */ 14, 1387, 302, 1902, 1904, 608, 1906, 1907, 603, 1903, - /* 2010 */ 598, 23, 607, 609, 1189, 611, 353, 24, 1921, 615, - /* 2020 */ 631, 613, 573, 352, 1379, 1212, 605, 1209, 616, 618, - /* 2030 */ 1206, 1871, 619, 604, 1200, 621, 622, 624, 1921, 1198, - /* 2040 */ 625, 1221, 270, 91, 1217, 92, 605, 640, 67, 1204, - /* 2050 */ 1101, 1871, 1903, 604, 1901, 1203, 1136, 1156, 1937, 1202, - /* 2060 */ 1135, 1201, 302, 1902, 1904, 608, 1906, 1907, 603, 652, - /* 2070 */ 598, 1903, 1134, 1133, 518, 1132, 1131, 1129, 1937, 1127, - /* 2080 */ 1126, 1921, 295, 1902, 1904, 608, 1906, 1907, 603, 605, - /* 2090 */ 598, 1125, 271, 1123, 1871, 1122, 604, 1121, 1120, 1119, - /* 2100 */ 1921, 1118, 1117, 1116, 1153, 1151, 1113, 1112, 605, 1109, - /* 2110 */ 1107, 1108, 1622, 1871, 1106, 604, 673, 1901, 1620, 675, - /* 2120 */ 674, 1937, 677, 679, 1903, 287, 1902, 1904, 608, 1906, - /* 2130 */ 1907, 603, 678, 598, 1618, 681, 1901, 682, 683, 1616, - /* 2140 */ 1937, 685, 1903, 686, 288, 1902, 1904, 608, 1906, 1907, - /* 2150 */ 603, 1604, 598, 1921, 687, 689, 1063, 1586, 274, 693, - /* 2160 */ 1561, 605, 1341, 282, 696, 697, 1871, 1561, 604, 1561, - /* 2170 */ 1561, 1921, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, - /* 2180 */ 1561, 1561, 1561, 1561, 1871, 1561, 604, 1561, 1561, 1901, - /* 2190 */ 1561, 1561, 1561, 1937, 1561, 1561, 1561, 289, 1902, 1904, - /* 2200 */ 608, 1906, 1907, 603, 1561, 598, 1903, 1901, 1561, 1561, - /* 2210 */ 1561, 1937, 1561, 1561, 1561, 296, 1902, 1904, 608, 1906, - /* 2220 */ 1907, 603, 1561, 598, 1561, 1561, 1903, 1561, 1561, 1561, - /* 2230 */ 1561, 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, - /* 2240 */ 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1561, - /* 2250 */ 604, 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, - /* 2260 */ 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1903, - /* 2270 */ 604, 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1561, 298, - /* 2280 */ 1902, 1904, 608, 1906, 1907, 603, 1561, 598, 1903, 1561, - /* 2290 */ 1561, 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1921, 290, - /* 2300 */ 1902, 1904, 608, 1906, 1907, 603, 605, 598, 1561, 1561, - /* 2310 */ 1561, 1871, 1561, 604, 1561, 1561, 1561, 1921, 1561, 1561, - /* 2320 */ 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, - /* 2330 */ 1871, 1903, 604, 1561, 1901, 1561, 1561, 1561, 1937, 1561, - /* 2340 */ 1561, 1561, 299, 1902, 1904, 608, 1906, 1907, 603, 1561, - /* 2350 */ 598, 1561, 1561, 1901, 1561, 1903, 1561, 1937, 1561, 1561, - /* 2360 */ 1921, 291, 1902, 1904, 608, 1906, 1907, 603, 605, 598, - /* 2370 */ 1561, 1561, 1561, 1871, 1903, 604, 1561, 1561, 1561, 1561, - /* 2380 */ 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, 1561, - /* 2390 */ 1561, 1561, 605, 1561, 1561, 1561, 1901, 1871, 1561, 604, - /* 2400 */ 1937, 1561, 1561, 1921, 300, 1902, 1904, 608, 1906, 1907, - /* 2410 */ 603, 605, 598, 1561, 1561, 1561, 1871, 1561, 604, 1561, - /* 2420 */ 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1561, 292, 1902, - /* 2430 */ 1904, 608, 1906, 1907, 603, 1903, 598, 1561, 1561, 1901, - /* 2440 */ 1561, 1561, 1561, 1937, 1561, 1561, 1561, 307, 1902, 1904, - /* 2450 */ 608, 1906, 1907, 603, 1561, 598, 1561, 1561, 1561, 1561, - /* 2460 */ 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, 1561, - /* 2470 */ 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1561, 604, - /* 2480 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1903, 1561, - /* 2490 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, - /* 2500 */ 1901, 1561, 1561, 1561, 1937, 1561, 1903, 1561, 308, 1902, - /* 2510 */ 1904, 608, 1906, 1907, 603, 1561, 598, 1921, 1561, 1561, - /* 2520 */ 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, - /* 2530 */ 1871, 1561, 604, 1561, 1561, 1921, 1561, 1561, 1561, 1561, - /* 2540 */ 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1561, - /* 2550 */ 604, 1561, 1561, 1901, 1561, 1561, 1561, 1937, 1561, 1561, - /* 2560 */ 1561, 1915, 1902, 1904, 608, 1906, 1907, 603, 1561, 598, - /* 2570 */ 1903, 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1561, 1914, - /* 2580 */ 1902, 1904, 608, 1906, 1907, 603, 1561, 598, 1561, 1561, - /* 2590 */ 1903, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1921, - /* 2600 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, - /* 2610 */ 1561, 1561, 1871, 1561, 604, 1561, 1561, 1561, 1561, 1921, - /* 2620 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, - /* 2630 */ 1561, 1561, 1871, 1903, 604, 1901, 1561, 1561, 1561, 1937, - /* 2640 */ 1561, 1561, 1561, 1913, 1902, 1904, 608, 1906, 1907, 603, - /* 2650 */ 1561, 598, 1903, 1561, 1561, 1901, 1561, 1561, 1561, 1937, - /* 2660 */ 1561, 1561, 1921, 317, 1902, 1904, 608, 1906, 1907, 603, - /* 2670 */ 605, 598, 1561, 1561, 1561, 1871, 1561, 604, 1561, 1561, - /* 2680 */ 1561, 1921, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, - /* 2690 */ 1561, 1561, 1561, 1561, 1871, 1903, 604, 1561, 1901, 1561, - /* 2700 */ 1561, 1561, 1937, 1561, 1561, 1561, 318, 1902, 1904, 608, - /* 2710 */ 1906, 1907, 603, 1561, 598, 1561, 1561, 1901, 1561, 1903, - /* 2720 */ 1561, 1937, 1561, 1561, 1921, 314, 1902, 1904, 608, 1906, - /* 2730 */ 1907, 603, 605, 598, 1561, 1561, 1561, 1871, 1561, 604, - /* 2740 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1921, 1561, - /* 2750 */ 1561, 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, 1561, - /* 2760 */ 1901, 1871, 1561, 604, 1937, 1561, 1561, 1561, 319, 1902, - /* 2770 */ 1904, 608, 1906, 1907, 603, 1561, 598, 1561, 1561, 1561, - /* 2780 */ 1561, 1561, 1561, 1561, 1901, 1561, 1561, 1561, 1937, 1561, - /* 2790 */ 1561, 1561, 294, 1902, 1904, 608, 1906, 1907, 603, 1561, - /* 2800 */ 598, + /* 0 */ 450, 167, 451, 1602, 77, 458, 1711, 451, 1602, 538, + /* 10 */ 1824, 552, 44, 42, 1759, 339, 338, 1892, 1069, 1821, + /* 20 */ 353, 1568, 1344, 154, 120, 552, 1896, 1716, 593, 1897, + /* 30 */ 1910, 488, 1722, 1424, 156, 1342, 593, 1892, 52, 1673, + /* 40 */ 1892, 1720, 110, 1888, 1894, 109, 108, 107, 106, 105, + /* 50 */ 104, 103, 102, 101, 590, 1720, 600, 1419, 1073, 1074, + /* 60 */ 1928, 1370, 17, 1888, 1894, 341, 1888, 1894, 607, 1350, + /* 70 */ 44, 42, 1494, 1878, 449, 606, 600, 453, 353, 600, + /* 80 */ 1344, 467, 37, 36, 132, 1772, 43, 41, 40, 39, + /* 90 */ 38, 1424, 1910, 1342, 1372, 1, 608, 157, 552, 1579, + /* 100 */ 1944, 1771, 1896, 46, 98, 352, 1911, 610, 1913, 1914, + /* 110 */ 605, 176, 600, 1892, 58, 1419, 552, 697, 1910, 1997, + /* 120 */ 17, 130, 1928, 317, 1993, 398, 1698, 1350, 1720, 120, + /* 130 */ 607, 1426, 1427, 635, 2065, 1878, 493, 606, 47, 1888, + /* 140 */ 1894, 347, 592, 169, 2005, 2006, 1720, 2010, 1928, 577, + /* 150 */ 171, 455, 600, 1, 2066, 579, 607, 1367, 1908, 77, + /* 160 */ 1590, 1878, 1944, 606, 313, 329, 97, 1909, 1911, 610, + /* 170 */ 1913, 1914, 605, 125, 600, 697, 1345, 129, 1343, 141, + /* 180 */ 1968, 1997, 1715, 1928, 1908, 346, 1993, 467, 1944, 1426, + /* 190 */ 1427, 572, 159, 1909, 1911, 610, 1913, 1914, 605, 435, + /* 200 */ 600, 1348, 1349, 1878, 1399, 1400, 1402, 1403, 1404, 1405, + /* 210 */ 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, + /* 220 */ 1422, 1423, 1425, 1428, 3, 1565, 330, 1369, 328, 327, + /* 230 */ 571, 490, 222, 573, 1345, 492, 1343, 246, 457, 236, + /* 240 */ 237, 453, 174, 110, 580, 2086, 109, 108, 107, 106, + /* 250 */ 105, 104, 103, 102, 101, 186, 185, 491, 182, 1348, + /* 260 */ 1349, 174, 1399, 1400, 1402, 1403, 1404, 1405, 1406, 1407, + /* 270 */ 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, 1422, 1423, + /* 280 */ 1425, 1428, 3, 44, 42, 174, 368, 1371, 79, 315, + /* 290 */ 643, 353, 542, 1344, 540, 74, 1696, 315, 73, 593, + /* 300 */ 542, 1910, 540, 534, 1424, 2070, 1342, 1195, 632, 631, + /* 310 */ 630, 1199, 629, 1201, 1202, 628, 1204, 625, 230, 1210, + /* 320 */ 622, 1212, 1213, 619, 616, 11, 358, 9, 1419, 1765, + /* 330 */ 1767, 1928, 2065, 17, 2065, 2012, 62, 1498, 87, 607, + /* 340 */ 1350, 44, 42, 1369, 1878, 1865, 606, 2071, 171, 353, + /* 350 */ 2069, 1344, 2066, 579, 2066, 2068, 58, 643, 81, 700, + /* 360 */ 1713, 58, 1424, 2009, 1342, 1520, 1, 608, 387, 7, + /* 370 */ 1086, 1944, 1085, 277, 46, 297, 352, 1911, 610, 1913, + /* 380 */ 1914, 605, 1567, 600, 1368, 207, 1419, 165, 697, 389, + /* 390 */ 385, 17, 375, 690, 686, 682, 678, 275, 1350, 1491, + /* 400 */ 1087, 1155, 1426, 1427, 11, 2065, 119, 118, 117, 116, + /* 410 */ 115, 114, 113, 112, 111, 565, 1518, 1519, 1521, 1522, + /* 420 */ 577, 171, 1772, 1350, 1, 2066, 579, 58, 1589, 322, + /* 430 */ 269, 504, 503, 502, 95, 1157, 1434, 243, 1770, 126, + /* 440 */ 498, 391, 1369, 390, 497, 496, 697, 1345, 655, 1343, + /* 450 */ 495, 501, 392, 1697, 1369, 1370, 494, 1814, 37, 36, + /* 460 */ 1426, 1427, 43, 41, 40, 39, 38, 578, 179, 534, + /* 470 */ 549, 1878, 1348, 1349, 1709, 1399, 1400, 1402, 1403, 1404, + /* 480 */ 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, + /* 490 */ 1421, 1422, 1423, 1425, 1428, 3, 2065, 11, 2065, 1772, + /* 500 */ 34, 270, 232, 174, 1705, 1345, 340, 1343, 174, 1707, + /* 510 */ 94, 577, 171, 2071, 171, 1770, 2066, 579, 2066, 579, + /* 520 */ 1315, 174, 225, 229, 127, 1766, 1767, 1910, 1401, 58, + /* 530 */ 1348, 1349, 1712, 1399, 1400, 1402, 1403, 1404, 1405, 1406, + /* 540 */ 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, 1422, + /* 550 */ 1423, 1425, 1428, 3, 44, 42, 2070, 1928, 500, 499, + /* 560 */ 641, 356, 353, 80, 1344, 607, 1237, 1238, 568, 154, + /* 570 */ 1878, 1487, 606, 1371, 174, 1424, 1814, 1342, 1722, 145, + /* 580 */ 144, 638, 637, 636, 37, 36, 1910, 180, 43, 41, + /* 590 */ 40, 39, 38, 1908, 554, 552, 1969, 1944, 1086, 1419, + /* 600 */ 1085, 158, 1909, 1911, 610, 1913, 1914, 605, 396, 600, + /* 610 */ 1772, 1350, 44, 42, 1429, 1455, 1928, 357, 1560, 518, + /* 620 */ 353, 336, 1344, 552, 607, 1720, 1770, 1401, 1087, 1878, + /* 630 */ 1703, 606, 516, 1424, 514, 1342, 397, 8, 1490, 235, + /* 640 */ 37, 36, 557, 2034, 43, 41, 40, 39, 38, 1553, + /* 650 */ 359, 226, 1908, 1720, 574, 569, 1944, 1419, 154, 697, + /* 660 */ 304, 1909, 1911, 610, 1913, 1914, 605, 1722, 600, 1350, + /* 670 */ 349, 348, 1530, 1426, 1427, 1344, 174, 37, 36, 552, + /* 680 */ 1358, 43, 41, 40, 39, 38, 31, 223, 1342, 552, + /* 690 */ 1750, 1424, 407, 1351, 30, 8, 1460, 2012, 1321, 1322, + /* 700 */ 37, 36, 421, 538, 43, 41, 40, 39, 38, 1720, + /* 710 */ 2012, 552, 26, 1822, 1559, 1419, 269, 697, 1345, 1720, + /* 720 */ 1343, 2069, 1350, 32, 422, 2008, 399, 1350, 1510, 37, + /* 730 */ 36, 1426, 1427, 43, 41, 40, 39, 38, 2007, 400, + /* 740 */ 2070, 1720, 128, 1348, 1349, 1968, 1399, 1400, 1402, 1403, + /* 750 */ 1404, 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, + /* 760 */ 1420, 1421, 1422, 1423, 1425, 1428, 3, 13, 12, 2065, + /* 770 */ 697, 40, 39, 38, 601, 596, 1345, 641, 1343, 43, + /* 780 */ 41, 40, 39, 38, 174, 2069, 634, 37, 36, 2066, + /* 790 */ 2067, 43, 41, 40, 39, 38, 145, 144, 638, 637, + /* 800 */ 636, 1348, 1349, 143, 1399, 1400, 1402, 1403, 1404, 1405, + /* 810 */ 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, + /* 820 */ 1422, 1423, 1425, 1428, 3, 44, 42, 492, 552, 1345, + /* 830 */ 1820, 1343, 308, 353, 1359, 1344, 1354, 585, 556, 552, + /* 840 */ 1969, 465, 668, 666, 529, 1588, 1424, 1587, 1342, 491, + /* 850 */ 552, 537, 466, 1814, 1348, 1349, 51, 1910, 1720, 1362, + /* 860 */ 1364, 1369, 1467, 1717, 184, 1073, 1074, 1586, 534, 1720, + /* 870 */ 1419, 1585, 1674, 598, 1417, 1418, 1420, 1421, 1422, 1423, + /* 880 */ 1720, 552, 1350, 44, 42, 552, 552, 1928, 1878, 1580, + /* 890 */ 1878, 353, 366, 1344, 137, 607, 1634, 2065, 530, 535, + /* 900 */ 1878, 656, 606, 1690, 1424, 1584, 1342, 406, 8, 534, + /* 910 */ 1878, 1720, 2071, 171, 1878, 1720, 1720, 2066, 579, 1621, + /* 920 */ 1819, 1583, 308, 1908, 1582, 2017, 1487, 1944, 1419, 1581, + /* 930 */ 697, 98, 1909, 1911, 610, 1913, 1914, 605, 2065, 600, + /* 940 */ 1350, 505, 153, 1578, 1426, 1427, 1997, 1577, 1878, 1614, + /* 950 */ 1996, 1993, 552, 2071, 171, 72, 1576, 552, 2066, 579, + /* 960 */ 504, 503, 502, 45, 1878, 240, 1, 1878, 126, 498, + /* 970 */ 360, 507, 1878, 497, 496, 639, 2037, 581, 1763, 495, + /* 980 */ 501, 206, 1720, 1372, 208, 494, 1878, 1720, 697, 1345, + /* 990 */ 1878, 1343, 365, 1695, 522, 582, 1575, 264, 161, 1878, + /* 1000 */ 1574, 1573, 1426, 1427, 484, 480, 476, 472, 205, 534, + /* 1010 */ 640, 534, 234, 1763, 1348, 1349, 1292, 1399, 1400, 1402, + /* 1020 */ 1403, 1404, 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, + /* 1030 */ 1418, 1420, 1421, 1422, 1423, 1425, 1428, 3, 2065, 1878, + /* 1040 */ 2065, 154, 566, 1878, 1878, 78, 1401, 1345, 203, 1343, + /* 1050 */ 1723, 48, 4, 2071, 171, 2071, 171, 586, 2066, 579, + /* 1060 */ 2066, 579, 37, 36, 1572, 238, 43, 41, 40, 39, + /* 1070 */ 38, 1571, 1348, 1349, 1631, 1399, 1400, 1402, 1403, 1404, + /* 1080 */ 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, + /* 1090 */ 1421, 1422, 1423, 1425, 1428, 3, 312, 1801, 1367, 282, + /* 1100 */ 641, 590, 1750, 50, 533, 429, 590, 1878, 440, 213, + /* 1110 */ 202, 196, 211, 201, 1878, 215, 138, 463, 214, 145, + /* 1120 */ 144, 638, 637, 636, 1570, 413, 245, 441, 142, 217, + /* 1130 */ 415, 132, 216, 194, 219, 143, 132, 218, 674, 673, + /* 1140 */ 672, 671, 363, 258, 670, 669, 133, 664, 663, 662, + /* 1150 */ 661, 660, 659, 658, 657, 147, 653, 652, 651, 362, + /* 1160 */ 361, 648, 647, 646, 645, 644, 155, 1878, 130, 545, + /* 1170 */ 552, 288, 325, 130, 597, 1562, 1563, 13, 12, 60, + /* 1180 */ 1353, 242, 2070, 548, 402, 286, 66, 1612, 1188, 65, + /* 1190 */ 170, 2005, 2006, 1608, 2010, 172, 2005, 2006, 250, 2010, + /* 1200 */ 1720, 60, 1929, 45, 364, 45, 190, 446, 444, 510, + /* 1210 */ 614, 142, 439, 583, 1910, 434, 433, 432, 431, 428, + /* 1220 */ 427, 426, 425, 424, 420, 419, 418, 417, 326, 410, + /* 1230 */ 409, 408, 1517, 404, 403, 324, 1352, 1603, 1899, 1760, + /* 1240 */ 552, 692, 552, 58, 1928, 143, 416, 552, 2027, 122, + /* 1250 */ 591, 253, 594, 550, 1461, 551, 1410, 1878, 281, 606, + /* 1260 */ 271, 37, 36, 1216, 1220, 43, 41, 40, 39, 38, + /* 1270 */ 1720, 509, 1720, 93, 266, 1553, 590, 1720, 263, 2, + /* 1280 */ 1908, 96, 578, 90, 1944, 5, 519, 1901, 97, 1909, + /* 1290 */ 1911, 610, 1913, 1914, 605, 1115, 600, 142, 1227, 369, + /* 1300 */ 221, 168, 1225, 1997, 374, 323, 132, 346, 1993, 1308, + /* 1310 */ 278, 2065, 649, 1445, 512, 318, 71, 70, 395, 506, + /* 1320 */ 173, 178, 183, 1356, 220, 1910, 577, 171, 2023, 1116, + /* 1330 */ 650, 2066, 579, 401, 1135, 437, 405, 411, 1367, 311, + /* 1340 */ 430, 423, 383, 121, 381, 377, 373, 370, 367, 1816, + /* 1350 */ 146, 1910, 1133, 436, 438, 1928, 442, 1453, 443, 1373, + /* 1360 */ 448, 64, 187, 594, 63, 267, 2005, 589, 1878, 588, + /* 1370 */ 606, 456, 2065, 445, 1375, 447, 459, 193, 1374, 1355, + /* 1380 */ 460, 1928, 1376, 195, 461, 462, 198, 577, 171, 607, + /* 1390 */ 174, 1908, 2066, 579, 1878, 1944, 606, 464, 200, 97, + /* 1400 */ 1909, 1911, 610, 1913, 1914, 605, 75, 600, 1089, 468, + /* 1410 */ 76, 1454, 168, 485, 1997, 204, 486, 1908, 346, 1993, + /* 1420 */ 487, 1944, 489, 99, 1710, 97, 1909, 1911, 610, 1913, + /* 1430 */ 1914, 605, 314, 600, 210, 1706, 521, 523, 2085, 2024, + /* 1440 */ 1997, 212, 148, 149, 346, 1993, 1708, 1704, 279, 224, + /* 1450 */ 150, 151, 1855, 524, 2031, 528, 227, 531, 536, 231, + /* 1460 */ 564, 525, 546, 1910, 84, 335, 539, 1854, 1826, 543, + /* 1470 */ 280, 337, 86, 1721, 1372, 139, 560, 567, 2043, 562, + /* 1480 */ 140, 2042, 33, 350, 1448, 1449, 1450, 1451, 1452, 1456, + /* 1490 */ 1457, 1458, 1459, 1928, 547, 248, 6, 563, 342, 252, + /* 1500 */ 2019, 607, 2028, 570, 2038, 576, 1878, 561, 606, 559, + /* 1510 */ 558, 257, 343, 587, 2064, 2088, 584, 1487, 1371, 262, + /* 1520 */ 57, 131, 88, 1691, 2013, 612, 283, 274, 1764, 1908, + /* 1530 */ 1910, 693, 694, 1944, 696, 49, 295, 97, 1909, 1911, + /* 1540 */ 610, 1913, 1914, 605, 307, 600, 306, 162, 259, 260, + /* 1550 */ 2085, 1978, 1997, 285, 261, 305, 346, 1993, 287, 1872, + /* 1560 */ 1928, 1871, 265, 68, 1870, 1869, 2059, 69, 607, 371, + /* 1570 */ 372, 1336, 1337, 1878, 1866, 606, 177, 376, 1864, 378, + /* 1580 */ 379, 380, 1863, 382, 1910, 1862, 384, 1861, 386, 1860, + /* 1590 */ 388, 1311, 1310, 1837, 1836, 393, 1908, 394, 1835, 1834, + /* 1600 */ 1944, 1809, 1280, 1808, 97, 1909, 1911, 610, 1913, 1914, + /* 1610 */ 605, 1806, 600, 134, 1928, 1805, 1804, 2085, 1807, 1997, + /* 1620 */ 181, 135, 607, 346, 1993, 1803, 1802, 1878, 1800, 606, + /* 1630 */ 1799, 1798, 412, 2016, 1797, 414, 1796, 1795, 1910, 1794, + /* 1640 */ 1793, 1792, 1791, 1790, 1789, 1788, 1787, 1786, 1785, 1784, + /* 1650 */ 1908, 1783, 1782, 1781, 1944, 136, 1780, 1779, 97, 1909, + /* 1660 */ 1911, 610, 1913, 1914, 605, 1778, 600, 1777, 1928, 1776, + /* 1670 */ 1775, 1972, 1282, 1997, 188, 1635, 607, 346, 1993, 1774, + /* 1680 */ 1773, 1878, 1636, 606, 189, 1633, 1599, 1076, 1598, 1163, + /* 1690 */ 1075, 1910, 1108, 199, 1832, 1818, 1699, 191, 123, 1850, + /* 1700 */ 1844, 166, 192, 124, 1908, 1833, 452, 454, 1944, 1632, + /* 1710 */ 197, 1630, 97, 1909, 1911, 610, 1913, 1914, 605, 469, + /* 1720 */ 600, 1928, 471, 1628, 470, 1970, 473, 1997, 474, 607, + /* 1730 */ 1626, 346, 1993, 1624, 1878, 1611, 606, 475, 477, 481, + /* 1740 */ 478, 479, 1610, 1595, 1910, 483, 1701, 1231, 482, 1230, + /* 1750 */ 1700, 1154, 1153, 1152, 1151, 1150, 665, 1908, 667, 1147, + /* 1760 */ 1146, 1944, 1145, 1144, 1622, 97, 1909, 1911, 610, 1913, + /* 1770 */ 1914, 605, 59, 600, 1928, 331, 1615, 332, 555, 1613, + /* 1780 */ 1997, 508, 607, 333, 346, 1993, 511, 1878, 1594, 606, + /* 1790 */ 1593, 209, 513, 515, 1592, 517, 1849, 100, 53, 1843, + /* 1800 */ 1317, 152, 526, 1328, 1831, 1910, 1829, 1830, 2070, 25, + /* 1810 */ 1908, 1828, 1827, 18, 1944, 1825, 1326, 233, 98, 1909, + /* 1820 */ 1911, 610, 1913, 1914, 605, 1817, 600, 1325, 532, 1910, + /* 1830 */ 83, 239, 228, 1997, 82, 1928, 85, 595, 1993, 90, + /* 1840 */ 19, 527, 15, 604, 244, 20, 241, 27, 1878, 1436, + /* 1850 */ 606, 56, 1532, 334, 541, 247, 255, 1435, 544, 1928, + /* 1860 */ 10, 29, 249, 1514, 251, 256, 1516, 607, 1509, 160, + /* 1870 */ 1899, 1908, 1878, 254, 606, 1944, 61, 28, 89, 303, + /* 1880 */ 1909, 1911, 610, 1913, 1914, 605, 603, 600, 553, 1962, + /* 1890 */ 22, 1910, 1547, 1546, 344, 1908, 1552, 1553, 1551, 1944, + /* 1900 */ 1550, 345, 268, 98, 1909, 1911, 610, 1913, 1914, 605, + /* 1910 */ 1484, 600, 1483, 55, 1898, 163, 12, 1360, 1997, 1414, + /* 1920 */ 164, 1928, 1947, 1994, 599, 175, 35, 1446, 1412, 604, + /* 1930 */ 1411, 14, 23, 1392, 1878, 1384, 606, 24, 613, 611, + /* 1940 */ 609, 1217, 1910, 355, 615, 617, 1214, 618, 620, 1211, + /* 1950 */ 621, 623, 626, 1194, 21, 624, 16, 1908, 1205, 1209, + /* 1960 */ 1203, 1944, 54, 1208, 1226, 303, 1909, 1911, 610, 1913, + /* 1970 */ 1914, 605, 1928, 600, 1222, 1963, 272, 627, 91, 633, + /* 1980 */ 607, 92, 67, 1106, 642, 1878, 1207, 606, 1141, 1140, + /* 1990 */ 1206, 1139, 1138, 1137, 1136, 1134, 1910, 1132, 1131, 1130, + /* 2000 */ 1128, 1161, 1127, 1126, 654, 1125, 1124, 1123, 1908, 273, + /* 2010 */ 1122, 1121, 1944, 1158, 1910, 1156, 158, 1909, 1911, 610, + /* 2020 */ 1913, 1914, 605, 1118, 600, 1117, 1928, 1114, 1113, 1112, + /* 2030 */ 1111, 1629, 675, 677, 607, 1627, 676, 679, 680, 1878, + /* 2040 */ 681, 606, 1625, 683, 1928, 684, 1623, 687, 685, 689, + /* 2050 */ 688, 1609, 607, 691, 1066, 1591, 276, 1878, 2035, 606, + /* 2060 */ 695, 1566, 1908, 1346, 699, 284, 1944, 1566, 698, 1566, + /* 2070 */ 299, 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1566, + /* 2080 */ 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 159, 1909, + /* 2090 */ 1911, 610, 1913, 1914, 605, 1566, 600, 1910, 1566, 1566, + /* 2100 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2110 */ 1566, 1566, 1566, 1566, 575, 1566, 1566, 1566, 1566, 1566, + /* 2120 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1928, 1566, 1566, + /* 2130 */ 1566, 1566, 351, 1566, 1566, 607, 1566, 1566, 1566, 1566, + /* 2140 */ 1878, 2087, 606, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2150 */ 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2160 */ 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, + /* 2170 */ 1566, 304, 1909, 1911, 610, 1913, 1914, 605, 1566, 600, + /* 2180 */ 1566, 1566, 1928, 1566, 1566, 1566, 1566, 354, 1566, 1566, + /* 2190 */ 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, + /* 2200 */ 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2210 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1908, 1566, + /* 2220 */ 1566, 1566, 1944, 1566, 1566, 1566, 304, 1909, 1911, 610, + /* 2230 */ 1913, 1914, 605, 1928, 600, 1566, 1566, 1566, 1566, 1566, + /* 2240 */ 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, + /* 2250 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, 1566, 1566, + /* 2260 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 520, + /* 2270 */ 1566, 1566, 1566, 1944, 1566, 1566, 1566, 297, 1909, 1911, + /* 2280 */ 610, 1913, 1914, 605, 1566, 600, 1566, 1928, 1566, 1566, + /* 2290 */ 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, + /* 2300 */ 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, 1910, 1566, + /* 2310 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2320 */ 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, + /* 2330 */ 1566, 289, 1909, 1911, 610, 1913, 1914, 605, 1928, 600, + /* 2340 */ 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, + /* 2350 */ 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2360 */ 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2370 */ 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, + /* 2380 */ 1910, 1566, 290, 1909, 1911, 610, 1913, 1914, 605, 1566, + /* 2390 */ 600, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2400 */ 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, + /* 2410 */ 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, + /* 2420 */ 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, 1908, 1566, + /* 2430 */ 1566, 1566, 1944, 1566, 1566, 1566, 291, 1909, 1911, 610, + /* 2440 */ 1913, 1914, 605, 1566, 600, 1566, 1908, 1566, 1566, 1566, + /* 2450 */ 1944, 1566, 1566, 1566, 298, 1909, 1911, 610, 1913, 1914, + /* 2460 */ 605, 1566, 600, 1910, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2470 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2480 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2490 */ 1566, 1566, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2500 */ 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, + /* 2510 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, 1566, + /* 2520 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1908, + /* 2530 */ 1566, 1566, 1566, 1944, 1566, 1566, 1566, 300, 1909, 1911, + /* 2540 */ 610, 1913, 1914, 605, 1566, 600, 1566, 1566, 1928, 1566, + /* 2550 */ 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, + /* 2560 */ 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, 1910, + /* 2570 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2580 */ 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, + /* 2590 */ 1566, 1566, 292, 1909, 1911, 610, 1913, 1914, 605, 1928, + /* 2600 */ 600, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, + /* 2610 */ 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, + /* 2620 */ 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2630 */ 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, + /* 2640 */ 1566, 1566, 1566, 301, 1909, 1911, 610, 1913, 1914, 605, + /* 2650 */ 1566, 600, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2660 */ 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, + /* 2670 */ 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, + /* 2680 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1908, + /* 2690 */ 1566, 1566, 1566, 1944, 1566, 1566, 1566, 293, 1909, 1911, + /* 2700 */ 610, 1913, 1914, 605, 1928, 600, 1566, 1566, 1566, 1566, + /* 2710 */ 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, + /* 2720 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, 1566, + /* 2730 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2740 */ 1908, 1566, 1566, 1566, 1944, 1566, 1910, 1566, 302, 1909, + /* 2750 */ 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1928, 1566, + /* 2760 */ 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, + /* 2770 */ 1566, 1878, 1566, 606, 1566, 1566, 1928, 1566, 1566, 1566, + /* 2780 */ 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, + /* 2790 */ 1566, 606, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, + /* 2800 */ 1566, 1566, 294, 1909, 1911, 610, 1913, 1914, 605, 1566, + /* 2810 */ 600, 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, + /* 2820 */ 309, 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1910, + /* 2830 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2840 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2850 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1928, + /* 2860 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, + /* 2870 */ 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, + /* 2880 */ 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, + /* 2890 */ 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, + /* 2900 */ 1566, 1566, 1566, 310, 1909, 1911, 610, 1913, 1914, 605, + /* 2910 */ 1566, 600, 1566, 1566, 1928, 1566, 1566, 1566, 1566, 1566, + /* 2920 */ 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, + /* 2930 */ 1566, 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, + /* 2940 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2950 */ 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 1922, 1909, + /* 2960 */ 1911, 610, 1913, 1914, 605, 1928, 600, 1566, 1566, 1566, + /* 2970 */ 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, + /* 2980 */ 606, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, + /* 2990 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3000 */ 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 1921, + /* 3010 */ 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1928, + /* 3020 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, + /* 3030 */ 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, + /* 3040 */ 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3050 */ 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, + /* 3060 */ 1566, 1566, 1566, 1920, 1909, 1911, 610, 1913, 1914, 605, + /* 3070 */ 1928, 600, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, + /* 3080 */ 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, + /* 3090 */ 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, + /* 3100 */ 1566, 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, + /* 3110 */ 1944, 1566, 1910, 1566, 319, 1909, 1911, 610, 1913, 1914, + /* 3120 */ 605, 1566, 600, 1566, 1928, 1566, 1566, 1566, 1566, 1566, + /* 3130 */ 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, + /* 3140 */ 1566, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3150 */ 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, + /* 3160 */ 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 320, 1909, + /* 3170 */ 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1908, 1566, + /* 3180 */ 1566, 1566, 1944, 1566, 1566, 1566, 316, 1909, 1911, 610, + /* 3190 */ 1913, 1914, 605, 1566, 600, 1910, 1566, 1566, 1566, 1566, + /* 3200 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3210 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3220 */ 1566, 1566, 1566, 1566, 1566, 1928, 1566, 1566, 1566, 1566, + /* 3230 */ 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, + /* 3240 */ 606, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3250 */ 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3260 */ 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 321, + /* 3270 */ 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1566, + /* 3280 */ 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, + /* 3290 */ 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, + /* 3300 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3310 */ 1566, 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, + /* 3320 */ 1944, 1566, 1566, 1566, 296, 1909, 1911, 610, 1913, 1914, + /* 3330 */ 605, 1566, 600, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 352, 410, 411, 352, 351, 4, 325, 321, 327, 328, - /* 10 */ 352, 363, 12, 13, 363, 325, 329, 327, 328, 0, - /* 20 */ 20, 363, 22, 12, 13, 14, 15, 16, 20, 14, - /* 30 */ 15, 16, 20, 33, 350, 35, 350, 389, 390, 391, - /* 40 */ 389, 390, 391, 359, 358, 44, 45, 389, 390, 363, - /* 50 */ 402, 365, 2, 402, 367, 320, 56, 322, 8, 9, - /* 60 */ 402, 61, 12, 13, 14, 15, 16, 321, 68, 12, - /* 70 */ 13, 14, 386, 20, 364, 365, 390, 20, 395, 22, - /* 80 */ 394, 395, 396, 397, 398, 399, 400, 20, 402, 22, - /* 90 */ 33, 333, 35, 407, 94, 409, 350, 14, 94, 413, - /* 100 */ 414, 333, 35, 20, 358, 329, 94, 424, 20, 363, - /* 110 */ 3, 365, 426, 56, 356, 347, 116, 50, 61, 365, - /* 120 */ 434, 329, 439, 440, 356, 68, 372, 444, 445, 375, - /* 130 */ 130, 131, 386, 341, 358, 20, 390, 0, 130, 131, - /* 140 */ 394, 395, 396, 397, 398, 399, 400, 94, 402, 361, - /* 150 */ 358, 94, 364, 365, 20, 409, 22, 321, 21, 413, - /* 160 */ 414, 24, 25, 26, 27, 28, 29, 30, 31, 32, - /* 170 */ 424, 395, 60, 116, 94, 175, 20, 177, 174, 78, - /* 180 */ 176, 342, 94, 321, 50, 439, 440, 130, 131, 350, - /* 190 */ 444, 445, 416, 417, 418, 419, 20, 421, 359, 363, - /* 200 */ 200, 201, 321, 203, 204, 205, 206, 207, 208, 209, + /* 0 */ 326, 351, 328, 329, 335, 326, 354, 328, 329, 367, + /* 10 */ 0, 330, 12, 13, 364, 344, 374, 365, 4, 377, + /* 20 */ 20, 0, 22, 352, 343, 330, 354, 358, 20, 354, + /* 30 */ 322, 350, 361, 33, 336, 35, 20, 365, 343, 341, + /* 40 */ 365, 360, 21, 391, 392, 24, 25, 26, 27, 28, + /* 50 */ 29, 30, 31, 32, 330, 360, 404, 57, 44, 45, + /* 60 */ 352, 20, 62, 391, 392, 393, 391, 392, 360, 69, + /* 70 */ 12, 13, 14, 365, 327, 367, 404, 330, 20, 404, + /* 80 */ 22, 61, 8, 9, 360, 352, 12, 13, 14, 15, + /* 90 */ 16, 33, 322, 35, 20, 95, 388, 321, 330, 323, + /* 100 */ 392, 368, 354, 95, 396, 397, 398, 399, 400, 401, + /* 110 */ 402, 343, 404, 365, 95, 57, 330, 117, 322, 411, + /* 120 */ 62, 397, 352, 415, 416, 330, 0, 69, 360, 343, + /* 130 */ 360, 131, 132, 106, 426, 365, 350, 367, 95, 391, + /* 140 */ 392, 393, 418, 419, 420, 421, 360, 423, 352, 441, + /* 150 */ 442, 14, 404, 95, 446, 447, 360, 20, 388, 335, + /* 160 */ 322, 365, 392, 367, 369, 37, 396, 397, 398, 399, + /* 170 */ 400, 401, 402, 349, 404, 117, 176, 407, 178, 409, + /* 180 */ 410, 411, 358, 352, 388, 415, 416, 61, 392, 131, + /* 190 */ 132, 360, 396, 397, 398, 399, 400, 401, 402, 79, + /* 200 */ 404, 201, 202, 365, 204, 205, 206, 207, 208, 209, /* 210 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - /* 220 */ 220, 221, 222, 223, 94, 363, 0, 329, 318, 63, - /* 230 */ 64, 65, 175, 331, 177, 134, 135, 71, 72, 341, - /* 240 */ 60, 241, 76, 77, 363, 241, 348, 345, 82, 83, - /* 250 */ 126, 350, 56, 241, 88, 353, 358, 200, 201, 358, - /* 260 */ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - /* 270 */ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - /* 280 */ 223, 12, 13, 19, 358, 352, 60, 204, 378, 20, - /* 290 */ 94, 22, 96, 125, 241, 369, 363, 33, 397, 321, - /* 300 */ 329, 225, 33, 334, 35, 395, 182, 183, 339, 321, - /* 310 */ 186, 47, 188, 20, 321, 329, 52, 53, 54, 55, - /* 320 */ 56, 241, 389, 390, 350, 56, 350, 160, 350, 358, - /* 330 */ 61, 357, 21, 357, 424, 402, 358, 68, 12, 13, - /* 340 */ 366, 363, 366, 365, 358, 34, 20, 36, 22, 439, - /* 350 */ 440, 363, 184, 185, 444, 445, 363, 93, 35, 33, - /* 360 */ 96, 35, 170, 94, 386, 258, 395, 329, 390, 392, - /* 370 */ 43, 241, 394, 395, 396, 397, 398, 399, 400, 341, - /* 380 */ 402, 395, 56, 191, 192, 116, 348, 61, 417, 418, - /* 390 */ 419, 68, 421, 129, 68, 424, 358, 420, 200, 130, - /* 400 */ 131, 20, 424, 417, 418, 419, 20, 421, 349, 395, - /* 410 */ 439, 440, 4, 246, 247, 444, 445, 439, 440, 106, - /* 420 */ 94, 362, 444, 445, 21, 161, 105, 24, 25, 26, - /* 430 */ 27, 28, 29, 30, 31, 32, 0, 241, 424, 336, - /* 440 */ 337, 128, 116, 179, 175, 181, 177, 14, 250, 251, - /* 450 */ 252, 253, 254, 20, 440, 162, 130, 131, 444, 445, - /* 460 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 200, - /* 470 */ 201, 61, 203, 204, 205, 206, 207, 208, 209, 210, - /* 480 */ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - /* 490 */ 221, 222, 223, 157, 225, 225, 351, 227, 125, 126, - /* 500 */ 14, 175, 94, 177, 0, 0, 20, 107, 108, 109, - /* 510 */ 110, 111, 112, 113, 114, 115, 116, 117, 0, 119, - /* 520 */ 120, 121, 122, 123, 124, 4, 200, 201, 37, 203, - /* 530 */ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - /* 540 */ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - /* 550 */ 12, 13, 47, 329, 321, 395, 183, 321, 20, 186, - /* 560 */ 22, 188, 342, 326, 228, 341, 329, 63, 64, 65, - /* 570 */ 350, 33, 321, 35, 238, 71, 72, 339, 60, 359, - /* 580 */ 76, 77, 358, 321, 424, 392, 82, 83, 97, 262, - /* 590 */ 99, 100, 88, 102, 56, 68, 363, 106, 56, 363, - /* 600 */ 440, 406, 321, 408, 444, 445, 68, 12, 13, 14, - /* 610 */ 200, 329, 350, 420, 363, 20, 68, 22, 329, 128, - /* 620 */ 358, 329, 351, 341, 321, 363, 342, 365, 33, 350, - /* 630 */ 35, 350, 94, 341, 350, 93, 357, 204, 96, 358, - /* 640 */ 358, 329, 351, 359, 363, 366, 365, 358, 386, 241, - /* 650 */ 358, 56, 390, 341, 116, 378, 394, 395, 396, 397, - /* 660 */ 398, 399, 400, 68, 402, 0, 363, 386, 130, 131, - /* 670 */ 358, 390, 395, 329, 395, 394, 395, 396, 397, 398, - /* 680 */ 399, 400, 3, 402, 395, 341, 20, 331, 407, 94, - /* 690 */ 409, 336, 337, 326, 413, 414, 329, 435, 436, 20, - /* 700 */ 351, 424, 358, 424, 423, 351, 417, 418, 419, 353, - /* 710 */ 421, 116, 406, 175, 408, 177, 439, 440, 439, 440, - /* 720 */ 321, 444, 445, 444, 445, 130, 131, 321, 8, 9, - /* 730 */ 1, 2, 12, 13, 14, 15, 16, 392, 200, 201, - /* 740 */ 20, 203, 204, 205, 206, 207, 208, 209, 210, 211, - /* 750 */ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - /* 760 */ 222, 223, 363, 242, 374, 420, 376, 358, 329, 363, - /* 770 */ 175, 106, 177, 343, 95, 374, 346, 376, 369, 241, - /* 780 */ 341, 8, 9, 20, 321, 12, 13, 14, 15, 16, - /* 790 */ 125, 126, 127, 128, 129, 200, 201, 358, 203, 204, - /* 800 */ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - /* 810 */ 215, 216, 217, 218, 219, 220, 221, 222, 223, 12, - /* 820 */ 13, 365, 4, 358, 95, 106, 363, 20, 162, 22, - /* 830 */ 321, 375, 43, 405, 369, 360, 408, 19, 363, 56, - /* 840 */ 33, 162, 35, 2, 125, 126, 127, 128, 129, 8, - /* 850 */ 9, 33, 321, 12, 13, 14, 15, 16, 329, 105, - /* 860 */ 321, 329, 321, 56, 351, 47, 329, 350, 95, 51, - /* 870 */ 341, 321, 363, 341, 56, 68, 12, 13, 341, 96, - /* 880 */ 329, 350, 162, 366, 20, 360, 22, 358, 363, 358, - /* 890 */ 358, 39, 341, 382, 363, 358, 365, 33, 0, 35, - /* 900 */ 350, 94, 363, 338, 363, 340, 329, 153, 358, 358, - /* 910 */ 329, 93, 46, 363, 96, 365, 343, 386, 341, 346, - /* 920 */ 56, 390, 341, 116, 321, 394, 395, 396, 397, 398, - /* 930 */ 399, 400, 68, 402, 0, 358, 386, 130, 131, 358, - /* 940 */ 390, 321, 329, 321, 394, 395, 396, 397, 398, 399, - /* 950 */ 400, 322, 402, 350, 341, 44, 45, 407, 94, 409, - /* 960 */ 94, 358, 329, 413, 414, 3, 363, 204, 365, 239, - /* 970 */ 240, 358, 393, 423, 341, 329, 448, 446, 447, 43, - /* 980 */ 116, 437, 175, 363, 177, 363, 35, 341, 330, 386, - /* 990 */ 321, 358, 321, 390, 130, 131, 22, 394, 395, 396, - /* 1000 */ 397, 398, 399, 400, 358, 402, 43, 200, 201, 35, - /* 1010 */ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - /* 1020 */ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - /* 1030 */ 223, 95, 363, 33, 363, 42, 43, 162, 163, 175, - /* 1040 */ 106, 177, 98, 1, 2, 101, 148, 47, 98, 260, - /* 1050 */ 447, 101, 52, 53, 54, 55, 56, 95, 95, 125, - /* 1060 */ 126, 127, 128, 129, 200, 201, 0, 203, 204, 205, - /* 1070 */ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - /* 1080 */ 216, 217, 218, 219, 220, 221, 222, 223, 18, 329, - /* 1090 */ 20, 0, 240, 93, 431, 98, 96, 27, 101, 350, - /* 1100 */ 30, 341, 8, 9, 0, 0, 12, 13, 14, 15, - /* 1110 */ 16, 98, 43, 22, 101, 94, 43, 47, 358, 49, - /* 1120 */ 35, 51, 130, 131, 330, 104, 22, 22, 177, 63, - /* 1130 */ 64, 65, 66, 67, 328, 69, 70, 71, 72, 73, - /* 1140 */ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - /* 1150 */ 84, 85, 86, 87, 88, 89, 90, 18, 158, 159, - /* 1160 */ 13, 161, 23, 93, 95, 165, 8, 9, 95, 393, - /* 1170 */ 12, 13, 14, 15, 16, 105, 37, 38, 362, 43, - /* 1180 */ 41, 181, 35, 378, 8, 9, 43, 43, 12, 13, - /* 1190 */ 14, 15, 16, 422, 43, 43, 57, 58, 59, 321, - /* 1200 */ 395, 43, 43, 133, 425, 13, 136, 137, 138, 139, - /* 1210 */ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - /* 1220 */ 150, 151, 152, 441, 154, 155, 156, 35, 350, 424, - /* 1230 */ 43, 95, 35, 94, 415, 388, 358, 61, 95, 95, - /* 1240 */ 47, 363, 243, 365, 439, 440, 95, 95, 0, 444, - /* 1250 */ 445, 173, 8, 9, 95, 329, 12, 13, 14, 15, - /* 1260 */ 16, 167, 177, 387, 386, 68, 43, 341, 390, 43, - /* 1270 */ 380, 132, 394, 395, 396, 397, 398, 399, 400, 103, - /* 1280 */ 402, 42, 95, 405, 358, 407, 408, 409, 43, 370, - /* 1290 */ 43, 413, 414, 43, 8, 9, 48, 157, 12, 13, - /* 1300 */ 14, 15, 16, 378, 20, 378, 167, 168, 169, 8, - /* 1310 */ 9, 172, 329, 12, 13, 14, 15, 16, 95, 370, - /* 1320 */ 395, 95, 395, 368, 341, 329, 370, 329, 368, 190, - /* 1330 */ 92, 329, 193, 157, 195, 196, 197, 198, 199, 95, - /* 1340 */ 95, 358, 95, 368, 335, 95, 329, 329, 20, 424, - /* 1350 */ 321, 424, 20, 323, 323, 384, 333, 263, 333, 365, - /* 1360 */ 20, 377, 20, 377, 439, 440, 439, 440, 379, 444, - /* 1370 */ 445, 444, 445, 333, 333, 329, 333, 333, 333, 350, - /* 1380 */ 241, 323, 350, 350, 350, 350, 350, 358, 350, 350, - /* 1390 */ 329, 323, 363, 321, 365, 189, 385, 350, 350, 350, - /* 1400 */ 350, 180, 331, 384, 228, 229, 230, 231, 232, 233, - /* 1410 */ 234, 235, 236, 237, 238, 386, 363, 365, 331, 390, - /* 1420 */ 383, 329, 350, 394, 395, 396, 397, 398, 399, 400, - /* 1430 */ 358, 402, 329, 377, 248, 363, 407, 365, 409, 331, - /* 1440 */ 373, 159, 413, 414, 363, 363, 363, 363, 162, 373, - /* 1450 */ 371, 363, 331, 346, 321, 331, 358, 20, 386, 363, - /* 1460 */ 249, 433, 390, 434, 363, 255, 394, 395, 396, 397, - /* 1470 */ 398, 399, 400, 393, 402, 373, 321, 363, 166, 407, - /* 1480 */ 363, 409, 393, 350, 430, 413, 414, 430, 373, 363, - /* 1490 */ 257, 358, 432, 430, 429, 423, 363, 256, 365, 244, - /* 1500 */ 388, 264, 428, 261, 427, 350, 240, 443, 449, 20, - /* 1510 */ 259, 358, 392, 358, 94, 94, 354, 442, 363, 386, - /* 1520 */ 365, 412, 340, 390, 363, 329, 378, 394, 395, 396, - /* 1530 */ 397, 398, 399, 400, 321, 402, 331, 36, 324, 323, - /* 1540 */ 407, 386, 409, 395, 381, 390, 413, 414, 376, 394, - /* 1550 */ 395, 396, 397, 398, 399, 400, 344, 402, 0, 344, - /* 1560 */ 12, 13, 407, 350, 409, 319, 344, 332, 413, 414, - /* 1570 */ 22, 358, 424, 0, 182, 0, 363, 0, 365, 42, - /* 1580 */ 0, 33, 35, 35, 194, 35, 35, 439, 440, 35, - /* 1590 */ 194, 0, 444, 445, 321, 35, 35, 194, 0, 386, - /* 1600 */ 194, 22, 0, 390, 56, 35, 0, 394, 395, 396, - /* 1610 */ 397, 398, 399, 400, 35, 402, 68, 22, 0, 177, - /* 1620 */ 407, 35, 409, 350, 175, 0, 413, 414, 0, 171, - /* 1630 */ 170, 358, 0, 0, 46, 0, 363, 0, 365, 0, - /* 1640 */ 0, 42, 0, 0, 0, 42, 0, 68, 0, 0, - /* 1650 */ 0, 148, 35, 0, 148, 321, 0, 0, 0, 386, - /* 1660 */ 0, 0, 0, 390, 116, 0, 0, 394, 395, 396, - /* 1670 */ 397, 398, 399, 400, 0, 402, 0, 0, 0, 0, - /* 1680 */ 0, 0, 409, 42, 350, 0, 413, 414, 43, 355, - /* 1690 */ 0, 0, 358, 0, 0, 116, 0, 363, 0, 365, - /* 1700 */ 0, 0, 35, 0, 22, 0, 0, 56, 56, 321, - /* 1710 */ 0, 42, 39, 14, 0, 40, 46, 46, 14, 0, - /* 1720 */ 386, 0, 39, 175, 390, 177, 0, 0, 394, 395, - /* 1730 */ 396, 397, 398, 399, 400, 166, 402, 0, 350, 0, - /* 1740 */ 0, 39, 0, 35, 47, 0, 358, 35, 200, 201, - /* 1750 */ 39, 363, 321, 365, 175, 39, 177, 62, 0, 35, - /* 1760 */ 47, 0, 214, 215, 216, 217, 218, 219, 220, 47, - /* 1770 */ 35, 39, 47, 39, 386, 0, 321, 0, 390, 200, - /* 1780 */ 201, 350, 394, 395, 396, 397, 398, 399, 400, 358, - /* 1790 */ 402, 0, 0, 22, 363, 103, 365, 409, 35, 0, - /* 1800 */ 35, 413, 414, 35, 22, 350, 22, 35, 101, 35, - /* 1810 */ 43, 35, 43, 358, 35, 35, 0, 386, 363, 22, - /* 1820 */ 365, 390, 0, 22, 0, 394, 395, 396, 397, 398, - /* 1830 */ 399, 400, 401, 402, 403, 404, 49, 22, 0, 35, - /* 1840 */ 35, 386, 321, 0, 35, 390, 0, 22, 20, 394, - /* 1850 */ 395, 396, 397, 398, 399, 400, 94, 402, 0, 95, - /* 1860 */ 0, 35, 321, 22, 409, 178, 0, 0, 159, 414, - /* 1870 */ 0, 350, 3, 0, 0, 94, 187, 162, 95, 358, - /* 1880 */ 162, 164, 162, 35, 363, 35, 365, 0, 94, 160, - /* 1890 */ 94, 350, 0, 39, 158, 46, 94, 104, 43, 358, - /* 1900 */ 43, 94, 43, 95, 363, 321, 365, 386, 224, 245, - /* 1910 */ 46, 390, 226, 94, 94, 394, 395, 396, 397, 398, - /* 1920 */ 399, 400, 95, 402, 95, 404, 95, 386, 94, 321, - /* 1930 */ 94, 390, 95, 94, 350, 394, 395, 396, 397, 398, - /* 1940 */ 399, 400, 358, 402, 43, 46, 94, 363, 95, 365, - /* 1950 */ 43, 95, 224, 3, 43, 35, 35, 35, 350, 35, - /* 1960 */ 35, 35, 46, 355, 46, 46, 358, 95, 245, 22, - /* 1970 */ 386, 363, 95, 365, 390, 245, 43, 436, 394, 395, - /* 1980 */ 396, 397, 398, 399, 400, 239, 402, 2, 200, 321, - /* 1990 */ 94, 46, 95, 95, 386, 95, 94, 94, 390, 46, - /* 2000 */ 94, 22, 394, 395, 396, 397, 398, 399, 400, 321, - /* 2010 */ 402, 94, 202, 105, 22, 35, 35, 94, 350, 35, - /* 2020 */ 106, 94, 438, 355, 95, 95, 358, 95, 94, 35, - /* 2030 */ 95, 363, 94, 365, 95, 35, 94, 35, 350, 95, - /* 2040 */ 94, 35, 43, 94, 22, 94, 358, 61, 94, 118, - /* 2050 */ 62, 363, 321, 365, 386, 118, 35, 68, 390, 118, - /* 2060 */ 35, 118, 394, 395, 396, 397, 398, 399, 400, 91, - /* 2070 */ 402, 321, 35, 35, 386, 35, 35, 35, 390, 35, - /* 2080 */ 35, 350, 394, 395, 396, 397, 398, 399, 400, 358, - /* 2090 */ 402, 35, 43, 35, 363, 35, 365, 22, 35, 22, - /* 2100 */ 350, 35, 35, 35, 68, 35, 35, 35, 358, 35, - /* 2110 */ 22, 35, 0, 363, 35, 365, 35, 386, 0, 39, - /* 2120 */ 47, 390, 35, 39, 321, 394, 395, 396, 397, 398, - /* 2130 */ 399, 400, 47, 402, 0, 35, 386, 47, 39, 0, - /* 2140 */ 390, 35, 321, 47, 394, 395, 396, 397, 398, 399, - /* 2150 */ 400, 0, 402, 350, 39, 35, 35, 0, 22, 21, - /* 2160 */ 450, 358, 22, 22, 21, 20, 363, 450, 365, 450, - /* 2170 */ 450, 350, 450, 450, 450, 450, 450, 450, 450, 358, - /* 2180 */ 450, 450, 450, 450, 363, 450, 365, 450, 450, 386, - /* 2190 */ 450, 450, 450, 390, 450, 450, 450, 394, 395, 396, - /* 2200 */ 397, 398, 399, 400, 450, 402, 321, 386, 450, 450, - /* 2210 */ 450, 390, 450, 450, 450, 394, 395, 396, 397, 398, - /* 2220 */ 399, 400, 450, 402, 450, 450, 321, 450, 450, 450, - /* 2230 */ 450, 450, 450, 450, 450, 350, 450, 450, 450, 450, - /* 2240 */ 450, 450, 450, 358, 450, 450, 450, 450, 363, 450, - /* 2250 */ 365, 450, 450, 450, 450, 350, 450, 450, 450, 450, - /* 2260 */ 450, 450, 450, 358, 450, 450, 450, 450, 363, 321, - /* 2270 */ 365, 386, 450, 450, 450, 390, 450, 450, 450, 394, - /* 2280 */ 395, 396, 397, 398, 399, 400, 450, 402, 321, 450, - /* 2290 */ 450, 386, 450, 450, 450, 390, 450, 450, 350, 394, - /* 2300 */ 395, 396, 397, 398, 399, 400, 358, 402, 450, 450, - /* 2310 */ 450, 363, 450, 365, 450, 450, 450, 350, 450, 450, - /* 2320 */ 450, 450, 450, 450, 450, 358, 450, 450, 450, 450, - /* 2330 */ 363, 321, 365, 450, 386, 450, 450, 450, 390, 450, - /* 2340 */ 450, 450, 394, 395, 396, 397, 398, 399, 400, 450, - /* 2350 */ 402, 450, 450, 386, 450, 321, 450, 390, 450, 450, - /* 2360 */ 350, 394, 395, 396, 397, 398, 399, 400, 358, 402, - /* 2370 */ 450, 450, 450, 363, 321, 365, 450, 450, 450, 450, - /* 2380 */ 450, 450, 450, 450, 350, 450, 450, 450, 450, 450, - /* 2390 */ 450, 450, 358, 450, 450, 450, 386, 363, 450, 365, - /* 2400 */ 390, 450, 450, 350, 394, 395, 396, 397, 398, 399, - /* 2410 */ 400, 358, 402, 450, 450, 450, 363, 450, 365, 450, - /* 2420 */ 386, 450, 450, 450, 390, 450, 450, 450, 394, 395, - /* 2430 */ 396, 397, 398, 399, 400, 321, 402, 450, 450, 386, - /* 2440 */ 450, 450, 450, 390, 450, 450, 450, 394, 395, 396, - /* 2450 */ 397, 398, 399, 400, 450, 402, 450, 450, 450, 450, - /* 2460 */ 450, 450, 450, 450, 350, 450, 450, 450, 450, 450, - /* 2470 */ 450, 450, 358, 450, 450, 450, 450, 363, 450, 365, - /* 2480 */ 450, 450, 450, 450, 450, 450, 450, 450, 321, 450, - /* 2490 */ 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, - /* 2500 */ 386, 450, 450, 450, 390, 450, 321, 450, 394, 395, - /* 2510 */ 396, 397, 398, 399, 400, 450, 402, 350, 450, 450, - /* 2520 */ 450, 450, 450, 450, 450, 358, 450, 450, 450, 450, - /* 2530 */ 363, 450, 365, 450, 450, 350, 450, 450, 450, 450, - /* 2540 */ 450, 450, 450, 358, 450, 450, 450, 450, 363, 450, - /* 2550 */ 365, 450, 450, 386, 450, 450, 450, 390, 450, 450, - /* 2560 */ 450, 394, 395, 396, 397, 398, 399, 400, 450, 402, - /* 2570 */ 321, 386, 450, 450, 450, 390, 450, 450, 450, 394, - /* 2580 */ 395, 396, 397, 398, 399, 400, 450, 402, 450, 450, - /* 2590 */ 321, 450, 450, 450, 450, 450, 450, 450, 450, 350, - /* 2600 */ 450, 450, 450, 450, 450, 450, 450, 358, 450, 450, - /* 2610 */ 450, 450, 363, 450, 365, 450, 450, 450, 450, 350, - /* 2620 */ 450, 450, 450, 450, 450, 450, 450, 358, 450, 450, - /* 2630 */ 450, 450, 363, 321, 365, 386, 450, 450, 450, 390, - /* 2640 */ 450, 450, 450, 394, 395, 396, 397, 398, 399, 400, - /* 2650 */ 450, 402, 321, 450, 450, 386, 450, 450, 450, 390, - /* 2660 */ 450, 450, 350, 394, 395, 396, 397, 398, 399, 400, - /* 2670 */ 358, 402, 450, 450, 450, 363, 450, 365, 450, 450, - /* 2680 */ 450, 350, 450, 450, 450, 450, 450, 450, 450, 358, - /* 2690 */ 450, 450, 450, 450, 363, 321, 365, 450, 386, 450, - /* 2700 */ 450, 450, 390, 450, 450, 450, 394, 395, 396, 397, - /* 2710 */ 398, 399, 400, 450, 402, 450, 450, 386, 450, 321, - /* 2720 */ 450, 390, 450, 450, 350, 394, 395, 396, 397, 398, - /* 2730 */ 399, 400, 358, 402, 450, 450, 450, 363, 450, 365, - /* 2740 */ 450, 450, 450, 450, 450, 450, 450, 450, 350, 450, - /* 2750 */ 450, 450, 450, 450, 450, 450, 358, 450, 450, 450, - /* 2760 */ 386, 363, 450, 365, 390, 450, 450, 450, 394, 395, - /* 2770 */ 396, 397, 398, 399, 400, 450, 402, 450, 450, 450, - /* 2780 */ 450, 450, 450, 450, 386, 450, 450, 450, 390, 450, - /* 2790 */ 450, 450, 394, 395, 396, 397, 398, 399, 400, 450, - /* 2800 */ 402, + /* 220 */ 220, 221, 222, 223, 224, 319, 98, 20, 100, 101, + /* 230 */ 399, 103, 127, 20, 176, 107, 178, 163, 327, 126, + /* 240 */ 127, 330, 242, 21, 448, 449, 24, 25, 26, 27, + /* 250 */ 28, 29, 30, 31, 32, 135, 136, 129, 57, 201, + /* 260 */ 202, 242, 204, 205, 206, 207, 208, 209, 210, 211, + /* 270 */ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + /* 280 */ 222, 223, 224, 12, 13, 242, 380, 20, 183, 184, + /* 290 */ 61, 20, 187, 22, 189, 94, 0, 184, 97, 20, + /* 300 */ 187, 322, 189, 397, 33, 397, 35, 108, 109, 110, + /* 310 */ 111, 112, 113, 114, 115, 116, 117, 118, 57, 120, + /* 320 */ 121, 122, 123, 124, 125, 226, 363, 228, 57, 366, + /* 330 */ 367, 352, 426, 62, 426, 394, 4, 14, 333, 360, + /* 340 */ 69, 12, 13, 20, 365, 0, 367, 441, 442, 20, + /* 350 */ 442, 22, 446, 447, 446, 447, 95, 61, 97, 19, + /* 360 */ 355, 95, 33, 422, 35, 201, 95, 388, 171, 39, + /* 370 */ 20, 392, 22, 33, 95, 396, 397, 398, 399, 400, + /* 380 */ 401, 402, 0, 404, 20, 35, 57, 47, 117, 192, + /* 390 */ 193, 62, 47, 53, 54, 55, 56, 57, 69, 4, + /* 400 */ 50, 35, 131, 132, 226, 426, 24, 25, 26, 27, + /* 410 */ 28, 29, 30, 31, 32, 251, 252, 253, 254, 255, + /* 420 */ 441, 442, 352, 69, 95, 446, 447, 95, 322, 359, + /* 430 */ 163, 64, 65, 66, 94, 69, 14, 97, 368, 72, + /* 440 */ 73, 175, 20, 177, 77, 78, 117, 176, 69, 178, + /* 450 */ 83, 84, 380, 0, 20, 20, 89, 360, 8, 9, + /* 460 */ 131, 132, 12, 13, 14, 15, 16, 397, 371, 397, + /* 470 */ 130, 365, 201, 202, 353, 204, 205, 206, 207, 208, + /* 480 */ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + /* 490 */ 219, 220, 221, 222, 223, 224, 426, 226, 426, 352, + /* 500 */ 412, 413, 162, 242, 353, 176, 359, 178, 242, 353, + /* 510 */ 333, 441, 442, 441, 442, 368, 446, 447, 446, 447, + /* 520 */ 180, 242, 182, 57, 347, 366, 367, 322, 205, 95, + /* 530 */ 201, 202, 355, 204, 205, 206, 207, 208, 209, 210, + /* 540 */ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + /* 550 */ 221, 222, 223, 224, 12, 13, 3, 352, 338, 339, + /* 560 */ 107, 344, 20, 97, 22, 360, 131, 132, 161, 352, + /* 570 */ 365, 241, 367, 20, 242, 33, 360, 35, 361, 126, + /* 580 */ 127, 128, 129, 130, 8, 9, 322, 371, 12, 13, + /* 590 */ 14, 15, 16, 388, 408, 330, 410, 392, 20, 57, + /* 600 */ 22, 396, 397, 398, 399, 400, 401, 402, 343, 404, + /* 610 */ 352, 69, 12, 13, 14, 158, 352, 359, 168, 21, + /* 620 */ 20, 357, 22, 330, 360, 360, 368, 205, 50, 365, + /* 630 */ 353, 367, 34, 33, 36, 35, 343, 95, 243, 126, + /* 640 */ 8, 9, 437, 438, 12, 13, 14, 15, 16, 96, + /* 650 */ 344, 353, 388, 360, 247, 248, 392, 57, 352, 117, + /* 660 */ 396, 397, 398, 399, 400, 401, 402, 361, 404, 69, + /* 670 */ 12, 13, 96, 131, 132, 22, 242, 8, 9, 330, + /* 680 */ 22, 12, 13, 14, 15, 16, 229, 345, 35, 330, + /* 690 */ 348, 33, 343, 35, 2, 95, 239, 394, 185, 186, + /* 700 */ 8, 9, 343, 367, 12, 13, 14, 15, 16, 360, + /* 710 */ 394, 330, 43, 377, 264, 57, 163, 117, 176, 360, + /* 720 */ 178, 3, 69, 2, 343, 422, 22, 69, 96, 8, + /* 730 */ 9, 131, 132, 12, 13, 14, 15, 16, 422, 35, + /* 740 */ 397, 360, 407, 201, 202, 410, 204, 205, 206, 207, + /* 750 */ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + /* 760 */ 218, 219, 220, 221, 222, 223, 224, 1, 2, 426, + /* 770 */ 117, 14, 15, 16, 353, 117, 176, 107, 178, 12, + /* 780 */ 13, 14, 15, 16, 242, 442, 353, 8, 9, 446, + /* 790 */ 447, 12, 13, 14, 15, 16, 126, 127, 128, 129, + /* 800 */ 130, 201, 202, 43, 204, 205, 206, 207, 208, 209, + /* 810 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + /* 820 */ 220, 221, 222, 223, 224, 12, 13, 107, 330, 176, + /* 830 */ 376, 178, 378, 20, 176, 22, 178, 43, 408, 330, + /* 840 */ 410, 343, 338, 339, 384, 322, 33, 322, 35, 129, + /* 850 */ 330, 380, 343, 360, 201, 202, 96, 322, 360, 201, + /* 860 */ 202, 20, 96, 343, 371, 44, 45, 322, 397, 360, + /* 870 */ 57, 322, 341, 215, 216, 217, 218, 219, 220, 221, + /* 880 */ 360, 330, 69, 12, 13, 330, 330, 352, 365, 323, + /* 890 */ 365, 20, 380, 22, 343, 360, 0, 426, 343, 343, + /* 900 */ 365, 340, 367, 342, 33, 322, 35, 106, 95, 397, + /* 910 */ 365, 360, 441, 442, 365, 360, 360, 446, 447, 0, + /* 920 */ 376, 322, 378, 388, 322, 240, 241, 392, 57, 322, + /* 930 */ 117, 396, 397, 398, 399, 400, 401, 402, 426, 404, + /* 940 */ 69, 22, 163, 322, 131, 132, 411, 322, 365, 0, + /* 950 */ 415, 416, 330, 441, 442, 154, 322, 330, 446, 447, + /* 960 */ 64, 65, 66, 43, 365, 343, 95, 365, 72, 73, + /* 970 */ 343, 22, 365, 77, 78, 362, 395, 259, 365, 83, + /* 980 */ 84, 331, 360, 20, 33, 89, 365, 360, 117, 176, + /* 990 */ 365, 178, 380, 0, 380, 43, 322, 450, 47, 365, + /* 1000 */ 322, 322, 131, 132, 53, 54, 55, 56, 57, 397, + /* 1010 */ 362, 397, 43, 365, 201, 202, 96, 204, 205, 206, + /* 1020 */ 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + /* 1030 */ 217, 218, 219, 220, 221, 222, 223, 224, 426, 365, + /* 1040 */ 426, 352, 439, 365, 365, 94, 205, 176, 97, 178, + /* 1050 */ 361, 42, 43, 441, 442, 441, 442, 263, 446, 447, + /* 1060 */ 446, 447, 8, 9, 322, 96, 12, 13, 14, 15, + /* 1070 */ 16, 322, 201, 202, 0, 204, 205, 206, 207, 208, + /* 1080 */ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + /* 1090 */ 219, 220, 221, 222, 223, 224, 18, 0, 20, 345, + /* 1100 */ 107, 330, 348, 163, 164, 27, 330, 365, 30, 99, + /* 1110 */ 159, 160, 102, 162, 365, 99, 43, 166, 102, 126, + /* 1120 */ 127, 128, 129, 130, 322, 47, 163, 49, 43, 99, + /* 1130 */ 52, 360, 102, 182, 99, 43, 360, 102, 64, 65, + /* 1140 */ 66, 67, 68, 433, 70, 71, 72, 73, 74, 75, + /* 1150 */ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + /* 1160 */ 86, 87, 88, 89, 90, 91, 18, 365, 397, 96, + /* 1170 */ 330, 23, 94, 397, 62, 131, 132, 1, 2, 43, + /* 1180 */ 35, 96, 3, 343, 106, 37, 38, 0, 96, 41, + /* 1190 */ 419, 420, 421, 0, 423, 419, 420, 421, 43, 423, + /* 1200 */ 360, 43, 352, 43, 331, 43, 58, 59, 60, 22, + /* 1210 */ 43, 43, 134, 261, 322, 137, 138, 139, 140, 141, + /* 1220 */ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + /* 1230 */ 152, 153, 96, 155, 156, 157, 35, 329, 46, 364, + /* 1240 */ 330, 48, 330, 95, 352, 43, 149, 330, 395, 43, + /* 1250 */ 424, 96, 360, 343, 96, 343, 96, 365, 96, 367, + /* 1260 */ 343, 8, 9, 96, 96, 12, 13, 14, 15, 16, + /* 1270 */ 360, 4, 360, 95, 443, 96, 330, 360, 417, 427, + /* 1280 */ 388, 133, 397, 105, 392, 244, 19, 95, 396, 397, + /* 1290 */ 398, 399, 400, 401, 402, 35, 404, 43, 96, 390, + /* 1300 */ 33, 409, 96, 411, 47, 389, 360, 415, 416, 174, + /* 1310 */ 382, 426, 13, 201, 47, 62, 168, 169, 170, 52, + /* 1320 */ 428, 173, 42, 178, 57, 322, 441, 442, 436, 69, + /* 1330 */ 13, 446, 447, 372, 35, 158, 372, 370, 20, 191, + /* 1340 */ 372, 330, 194, 397, 196, 197, 198, 199, 200, 330, + /* 1350 */ 96, 322, 35, 370, 370, 352, 93, 104, 337, 20, + /* 1360 */ 324, 94, 330, 360, 97, 419, 420, 421, 365, 423, + /* 1370 */ 367, 324, 426, 330, 20, 330, 386, 335, 20, 178, + /* 1380 */ 367, 352, 20, 335, 379, 381, 335, 441, 442, 360, + /* 1390 */ 242, 388, 446, 447, 365, 392, 367, 379, 335, 396, + /* 1400 */ 397, 398, 399, 400, 401, 402, 335, 404, 51, 330, + /* 1410 */ 335, 158, 409, 332, 411, 335, 332, 388, 415, 416, + /* 1420 */ 324, 392, 352, 330, 352, 396, 397, 398, 399, 400, + /* 1430 */ 401, 402, 324, 404, 352, 352, 190, 387, 409, 436, + /* 1440 */ 411, 352, 352, 352, 415, 416, 352, 352, 386, 333, + /* 1450 */ 352, 352, 365, 181, 425, 367, 333, 330, 330, 333, + /* 1460 */ 249, 385, 160, 322, 333, 379, 365, 365, 365, 365, + /* 1470 */ 348, 365, 333, 360, 20, 375, 365, 250, 432, 365, + /* 1480 */ 375, 432, 229, 230, 231, 232, 233, 234, 235, 236, + /* 1490 */ 237, 238, 239, 352, 373, 375, 256, 365, 365, 375, + /* 1500 */ 435, 360, 395, 365, 395, 167, 365, 258, 367, 257, + /* 1510 */ 245, 434, 265, 262, 445, 451, 260, 241, 20, 390, + /* 1520 */ 95, 360, 95, 342, 394, 356, 330, 333, 365, 388, + /* 1530 */ 322, 36, 325, 392, 324, 383, 346, 396, 397, 398, + /* 1540 */ 399, 400, 401, 402, 378, 404, 346, 432, 431, 430, + /* 1550 */ 409, 414, 411, 334, 429, 346, 415, 416, 320, 0, + /* 1560 */ 352, 0, 444, 183, 0, 0, 425, 42, 360, 35, + /* 1570 */ 195, 35, 35, 365, 0, 367, 35, 195, 0, 35, + /* 1580 */ 35, 195, 0, 195, 322, 0, 35, 0, 22, 0, + /* 1590 */ 35, 178, 176, 0, 0, 172, 388, 171, 0, 0, + /* 1600 */ 392, 0, 46, 0, 396, 397, 398, 399, 400, 401, + /* 1610 */ 402, 0, 404, 42, 352, 0, 0, 409, 0, 411, + /* 1620 */ 149, 42, 360, 415, 416, 0, 0, 365, 0, 367, + /* 1630 */ 0, 0, 35, 425, 0, 149, 0, 0, 322, 0, + /* 1640 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 1650 */ 388, 0, 0, 0, 392, 42, 0, 0, 396, 397, + /* 1660 */ 398, 399, 400, 401, 402, 0, 404, 0, 352, 0, + /* 1670 */ 0, 409, 22, 411, 57, 0, 360, 415, 416, 0, + /* 1680 */ 0, 365, 0, 367, 57, 0, 0, 14, 0, 35, + /* 1690 */ 14, 322, 63, 167, 0, 0, 0, 42, 39, 0, + /* 1700 */ 0, 43, 40, 39, 388, 0, 46, 46, 392, 0, + /* 1710 */ 39, 0, 396, 397, 398, 399, 400, 401, 402, 35, + /* 1720 */ 404, 352, 39, 0, 47, 409, 35, 411, 47, 360, + /* 1730 */ 0, 415, 416, 0, 365, 0, 367, 39, 35, 35, + /* 1740 */ 47, 39, 0, 0, 322, 39, 0, 35, 47, 22, + /* 1750 */ 0, 35, 35, 22, 35, 35, 43, 388, 43, 35, + /* 1760 */ 35, 392, 22, 35, 0, 396, 397, 398, 399, 400, + /* 1770 */ 401, 402, 104, 404, 352, 22, 0, 22, 409, 0, + /* 1780 */ 411, 49, 360, 22, 415, 416, 35, 365, 0, 367, + /* 1790 */ 0, 102, 35, 35, 0, 22, 0, 20, 163, 0, + /* 1800 */ 35, 179, 22, 96, 0, 322, 0, 0, 3, 95, + /* 1810 */ 388, 0, 0, 95, 392, 0, 35, 96, 396, 397, + /* 1820 */ 398, 399, 400, 401, 402, 0, 404, 35, 165, 322, + /* 1830 */ 39, 95, 160, 411, 95, 352, 95, 415, 416, 105, + /* 1840 */ 43, 163, 246, 360, 46, 43, 159, 95, 365, 225, + /* 1850 */ 367, 43, 96, 163, 188, 95, 43, 225, 161, 352, + /* 1860 */ 227, 43, 96, 96, 95, 46, 96, 360, 96, 95, + /* 1870 */ 46, 388, 365, 95, 367, 392, 3, 95, 95, 396, + /* 1880 */ 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + /* 1890 */ 43, 322, 35, 35, 35, 388, 96, 96, 35, 392, + /* 1900 */ 35, 35, 46, 396, 397, 398, 399, 400, 401, 402, + /* 1910 */ 96, 404, 96, 43, 46, 46, 2, 22, 411, 96, + /* 1920 */ 46, 352, 95, 416, 95, 46, 95, 201, 96, 360, + /* 1930 */ 96, 95, 95, 22, 365, 96, 367, 95, 35, 106, + /* 1940 */ 203, 96, 322, 35, 95, 35, 96, 95, 35, 96, + /* 1950 */ 95, 35, 35, 22, 246, 95, 246, 388, 96, 119, + /* 1960 */ 96, 392, 240, 119, 35, 396, 397, 398, 399, 400, + /* 1970 */ 401, 402, 352, 404, 22, 406, 43, 95, 95, 107, + /* 1980 */ 360, 95, 95, 63, 62, 365, 119, 367, 35, 35, + /* 1990 */ 119, 35, 35, 35, 35, 35, 322, 35, 35, 35, + /* 2000 */ 35, 69, 35, 22, 92, 35, 22, 35, 388, 43, + /* 2010 */ 35, 35, 392, 69, 322, 35, 396, 397, 398, 399, + /* 2020 */ 400, 401, 402, 35, 404, 35, 352, 35, 35, 22, + /* 2030 */ 35, 0, 35, 39, 360, 0, 47, 35, 47, 365, + /* 2040 */ 39, 367, 0, 35, 352, 47, 0, 35, 39, 39, + /* 2050 */ 47, 0, 360, 35, 35, 0, 22, 365, 438, 367, + /* 2060 */ 21, 452, 388, 22, 20, 22, 392, 452, 21, 452, + /* 2070 */ 396, 397, 398, 399, 400, 401, 402, 452, 404, 452, + /* 2080 */ 388, 452, 452, 452, 392, 452, 452, 452, 396, 397, + /* 2090 */ 398, 399, 400, 401, 402, 452, 404, 322, 452, 452, + /* 2100 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2110 */ 452, 452, 452, 452, 440, 452, 452, 452, 452, 452, + /* 2120 */ 452, 452, 452, 452, 452, 452, 452, 352, 452, 452, + /* 2130 */ 452, 452, 357, 452, 452, 360, 452, 452, 452, 452, + /* 2140 */ 365, 449, 367, 452, 452, 452, 452, 452, 452, 452, + /* 2150 */ 452, 452, 322, 452, 452, 452, 452, 452, 452, 452, + /* 2160 */ 452, 452, 452, 388, 452, 452, 452, 392, 452, 452, + /* 2170 */ 452, 396, 397, 398, 399, 400, 401, 402, 452, 404, + /* 2180 */ 452, 452, 352, 452, 452, 452, 452, 357, 452, 452, + /* 2190 */ 360, 452, 452, 452, 452, 365, 452, 367, 452, 452, + /* 2200 */ 452, 452, 452, 322, 452, 452, 452, 452, 452, 452, + /* 2210 */ 452, 452, 452, 452, 452, 452, 452, 452, 388, 452, + /* 2220 */ 452, 452, 392, 452, 452, 452, 396, 397, 398, 399, + /* 2230 */ 400, 401, 402, 352, 404, 452, 452, 452, 452, 452, + /* 2240 */ 452, 360, 452, 452, 452, 452, 365, 452, 367, 452, + /* 2250 */ 452, 452, 452, 452, 452, 452, 452, 322, 452, 452, + /* 2260 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 388, + /* 2270 */ 452, 452, 452, 392, 452, 452, 452, 396, 397, 398, + /* 2280 */ 399, 400, 401, 402, 452, 404, 452, 352, 452, 452, + /* 2290 */ 452, 452, 452, 452, 452, 360, 452, 452, 452, 452, + /* 2300 */ 365, 452, 367, 452, 452, 452, 452, 452, 322, 452, + /* 2310 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2320 */ 452, 452, 452, 388, 452, 452, 452, 392, 452, 452, + /* 2330 */ 452, 396, 397, 398, 399, 400, 401, 402, 352, 404, + /* 2340 */ 452, 452, 452, 452, 452, 452, 360, 452, 452, 452, + /* 2350 */ 452, 365, 452, 367, 452, 452, 452, 452, 452, 452, + /* 2360 */ 452, 452, 322, 452, 452, 452, 452, 452, 452, 452, + /* 2370 */ 452, 452, 452, 452, 388, 452, 452, 452, 392, 452, + /* 2380 */ 322, 452, 396, 397, 398, 399, 400, 401, 402, 452, + /* 2390 */ 404, 452, 352, 452, 452, 452, 452, 452, 452, 452, + /* 2400 */ 360, 452, 452, 452, 452, 365, 452, 367, 452, 452, + /* 2410 */ 352, 452, 452, 452, 452, 452, 452, 452, 360, 452, + /* 2420 */ 452, 452, 452, 365, 452, 367, 452, 452, 388, 452, + /* 2430 */ 452, 452, 392, 452, 452, 452, 396, 397, 398, 399, + /* 2440 */ 400, 401, 402, 452, 404, 452, 388, 452, 452, 452, + /* 2450 */ 392, 452, 452, 452, 396, 397, 398, 399, 400, 401, + /* 2460 */ 402, 452, 404, 322, 452, 452, 452, 452, 452, 452, + /* 2470 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2480 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2490 */ 452, 452, 452, 352, 452, 452, 452, 452, 452, 452, + /* 2500 */ 452, 360, 452, 452, 452, 452, 365, 452, 367, 452, + /* 2510 */ 452, 452, 452, 452, 452, 452, 452, 452, 322, 452, + /* 2520 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 388, + /* 2530 */ 452, 452, 452, 392, 452, 452, 452, 396, 397, 398, + /* 2540 */ 399, 400, 401, 402, 452, 404, 452, 452, 352, 452, + /* 2550 */ 452, 452, 452, 452, 452, 452, 360, 452, 452, 452, + /* 2560 */ 452, 365, 452, 367, 452, 452, 452, 452, 452, 322, + /* 2570 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2580 */ 452, 452, 452, 452, 388, 452, 452, 452, 392, 452, + /* 2590 */ 452, 452, 396, 397, 398, 399, 400, 401, 402, 352, + /* 2600 */ 404, 452, 452, 452, 452, 452, 452, 360, 452, 452, + /* 2610 */ 452, 452, 365, 452, 367, 452, 452, 452, 452, 452, + /* 2620 */ 452, 452, 452, 322, 452, 452, 452, 452, 452, 452, + /* 2630 */ 452, 452, 452, 452, 452, 388, 452, 452, 452, 392, + /* 2640 */ 452, 452, 452, 396, 397, 398, 399, 400, 401, 402, + /* 2650 */ 452, 404, 452, 352, 452, 452, 452, 452, 452, 452, + /* 2660 */ 452, 360, 452, 452, 452, 452, 365, 452, 367, 452, + /* 2670 */ 452, 452, 452, 452, 322, 452, 452, 452, 452, 452, + /* 2680 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 388, + /* 2690 */ 452, 452, 452, 392, 452, 452, 452, 396, 397, 398, + /* 2700 */ 399, 400, 401, 402, 352, 404, 452, 452, 452, 452, + /* 2710 */ 452, 452, 360, 452, 452, 452, 452, 365, 452, 367, + /* 2720 */ 452, 452, 452, 452, 452, 452, 452, 452, 322, 452, + /* 2730 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2740 */ 388, 452, 452, 452, 392, 452, 322, 452, 396, 397, + /* 2750 */ 398, 399, 400, 401, 402, 452, 404, 452, 352, 452, + /* 2760 */ 452, 452, 452, 452, 452, 452, 360, 452, 452, 452, + /* 2770 */ 452, 365, 452, 367, 452, 452, 352, 452, 452, 452, + /* 2780 */ 452, 452, 452, 452, 360, 452, 452, 452, 452, 365, + /* 2790 */ 452, 367, 452, 452, 388, 452, 452, 452, 392, 452, + /* 2800 */ 452, 452, 396, 397, 398, 399, 400, 401, 402, 452, + /* 2810 */ 404, 452, 388, 452, 452, 452, 392, 452, 452, 452, + /* 2820 */ 396, 397, 398, 399, 400, 401, 402, 452, 404, 322, + /* 2830 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2840 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2850 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 352, + /* 2860 */ 452, 452, 452, 452, 452, 452, 452, 360, 452, 452, + /* 2870 */ 452, 452, 365, 452, 367, 452, 452, 452, 452, 452, + /* 2880 */ 452, 452, 452, 452, 322, 452, 452, 452, 452, 452, + /* 2890 */ 452, 452, 452, 452, 452, 388, 452, 452, 452, 392, + /* 2900 */ 452, 452, 452, 396, 397, 398, 399, 400, 401, 402, + /* 2910 */ 452, 404, 452, 452, 352, 452, 452, 452, 452, 452, + /* 2920 */ 452, 452, 360, 452, 452, 452, 452, 365, 452, 367, + /* 2930 */ 452, 452, 452, 452, 452, 322, 452, 452, 452, 452, + /* 2940 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2950 */ 388, 452, 452, 452, 392, 452, 452, 452, 396, 397, + /* 2960 */ 398, 399, 400, 401, 402, 352, 404, 452, 452, 452, + /* 2970 */ 452, 452, 452, 360, 452, 452, 452, 452, 365, 452, + /* 2980 */ 367, 452, 452, 452, 452, 452, 452, 452, 452, 322, + /* 2990 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3000 */ 452, 388, 452, 452, 452, 392, 452, 452, 452, 396, + /* 3010 */ 397, 398, 399, 400, 401, 402, 452, 404, 452, 352, + /* 3020 */ 452, 452, 452, 452, 452, 452, 452, 360, 452, 452, + /* 3030 */ 452, 452, 365, 452, 367, 452, 452, 452, 452, 452, + /* 3040 */ 322, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3050 */ 452, 452, 452, 452, 452, 388, 452, 452, 452, 392, + /* 3060 */ 452, 452, 452, 396, 397, 398, 399, 400, 401, 402, + /* 3070 */ 352, 404, 452, 452, 452, 452, 452, 452, 360, 452, + /* 3080 */ 452, 452, 452, 365, 452, 367, 452, 452, 452, 452, + /* 3090 */ 452, 452, 452, 452, 322, 452, 452, 452, 452, 452, + /* 3100 */ 452, 452, 452, 452, 452, 452, 388, 452, 452, 452, + /* 3110 */ 392, 452, 322, 452, 396, 397, 398, 399, 400, 401, + /* 3120 */ 402, 452, 404, 452, 352, 452, 452, 452, 452, 452, + /* 3130 */ 452, 452, 360, 452, 452, 452, 452, 365, 452, 367, + /* 3140 */ 452, 452, 352, 452, 452, 452, 452, 452, 452, 452, + /* 3150 */ 360, 452, 452, 452, 452, 365, 452, 367, 452, 452, + /* 3160 */ 388, 452, 452, 452, 392, 452, 452, 452, 396, 397, + /* 3170 */ 398, 399, 400, 401, 402, 452, 404, 452, 388, 452, + /* 3180 */ 452, 452, 392, 452, 452, 452, 396, 397, 398, 399, + /* 3190 */ 400, 401, 402, 452, 404, 322, 452, 452, 452, 452, + /* 3200 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3210 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3220 */ 452, 452, 452, 452, 452, 352, 452, 452, 452, 452, + /* 3230 */ 452, 452, 452, 360, 452, 452, 452, 452, 365, 452, + /* 3240 */ 367, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3250 */ 322, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3260 */ 452, 388, 452, 452, 452, 392, 452, 452, 452, 396, + /* 3270 */ 397, 398, 399, 400, 401, 402, 452, 404, 452, 452, + /* 3280 */ 352, 452, 452, 452, 452, 452, 452, 452, 360, 452, + /* 3290 */ 452, 452, 452, 365, 452, 367, 452, 452, 452, 452, + /* 3300 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3310 */ 452, 452, 452, 452, 452, 452, 388, 452, 452, 452, + /* 3320 */ 392, 452, 452, 452, 396, 397, 398, 399, 400, 401, + /* 3330 */ 402, 452, 404, }; -#define YY_SHIFT_COUNT (698) +#define YY_SHIFT_COUNT (700) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (2157) +#define YY_SHIFT_MAX (2055) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 1139, 0, 57, 269, 57, 326, 326, 326, 538, 326, - /* 10 */ 326, 326, 326, 326, 595, 807, 807, 864, 807, 807, - /* 20 */ 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, - /* 30 */ 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, - /* 40 */ 807, 807, 807, 807, 807, 807, 12, 53, 88, 4, - /* 50 */ 196, 80, 130, 80, 88, 88, 1548, 1548, 80, 1548, - /* 60 */ 1548, 408, 80, 115, 115, 1, 1, 8, 115, 115, - /* 70 */ 115, 115, 115, 115, 115, 115, 115, 115, 112, 115, - /* 80 */ 115, 115, 156, 115, 115, 176, 115, 115, 176, 381, - /* 90 */ 115, 176, 176, 176, 115, 180, 1070, 1176, 1176, 166, - /* 100 */ 403, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, - /* 110 */ 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, - /* 120 */ 491, 679, 8, 486, 486, 226, 323, 518, 270, 270, - /* 130 */ 293, 293, 293, 323, 386, 386, 386, 321, 156, 19, - /* 140 */ 19, 76, 176, 176, 527, 527, 321, 548, 400, 400, - /* 150 */ 400, 400, 400, 400, 400, 264, 504, 137, 720, 1094, - /* 160 */ 198, 67, 167, 83, 433, 134, 911, 313, 666, 730, - /* 170 */ 852, 107, 730, 993, 521, 763, 999, 1193, 1078, 1239, - /* 180 */ 1239, 1140, 1284, 1284, 1239, 1140, 1140, 1238, 1284, 1284, - /* 190 */ 1284, 1328, 1328, 1332, 112, 156, 112, 1340, 1342, 112, - /* 200 */ 1340, 112, 112, 112, 1284, 112, 1328, 176, 176, 176, - /* 210 */ 176, 176, 176, 176, 176, 176, 176, 176, 1284, 1328, - /* 220 */ 527, 1206, 1332, 180, 1221, 156, 180, 1284, 1284, 1340, - /* 230 */ 180, 1186, 527, 527, 527, 527, 1186, 527, 1282, 180, - /* 240 */ 321, 180, 386, 1437, 1437, 527, 1211, 1186, 527, 527, - /* 250 */ 1211, 1186, 527, 527, 176, 1210, 1312, 1211, 1233, 1241, - /* 260 */ 1255, 999, 1237, 1242, 1251, 1266, 386, 1489, 1420, 1421, - /* 270 */ 527, 548, 1284, 180, 1501, 1328, 2801, 2801, 2801, 2801, - /* 280 */ 2801, 2801, 2801, 1066, 1000, 436, 818, 773, 1158, 1244, - /* 290 */ 50, 841, 1286, 665, 1301, 1301, 1301, 1301, 1301, 1301, - /* 300 */ 1301, 1301, 1301, 934, 719, 124, 373, 11, 11, 192, - /* 310 */ 542, 101, 311, 168, 15, 729, 336, 15, 15, 15, - /* 320 */ 936, 505, 974, 754, 898, 944, 950, 997, 1013, 1091, - /* 330 */ 1104, 1105, 783, 875, 963, 1069, 1073, 1136, 1143, 1144, - /* 340 */ 1151, 992, 789, 327, 1042, 1152, 951, 1085, 410, 1159, - /* 350 */ 962, 866, 1187, 1223, 1226, 1245, 1247, 1250, 1021, 1147, - /* 360 */ 1192, 1197, 1248, 1558, 1573, 1392, 1575, 1577, 1537, 1580, - /* 370 */ 1547, 1390, 1550, 1551, 1554, 1396, 1591, 1560, 1561, 1403, - /* 380 */ 1598, 1406, 1602, 1570, 1606, 1595, 1618, 1586, 1442, 1449, - /* 390 */ 1625, 1628, 1458, 1460, 1632, 1633, 1588, 1635, 1637, 1639, - /* 400 */ 1599, 1640, 1642, 1643, 1603, 1644, 1646, 1648, 1649, 1650, - /* 410 */ 1503, 1617, 1653, 1506, 1656, 1657, 1658, 1660, 1661, 1662, - /* 420 */ 1665, 1666, 1674, 1676, 1677, 1678, 1679, 1680, 1681, 1641, - /* 430 */ 1685, 1690, 1691, 1693, 1694, 1682, 1696, 1698, 1700, 1701, - /* 440 */ 1667, 1703, 1651, 1705, 1652, 1706, 1710, 1669, 1673, 1645, - /* 450 */ 1699, 1670, 1704, 1671, 1714, 1675, 1683, 1719, 1721, 1726, - /* 460 */ 1702, 1569, 1727, 1737, 1739, 1695, 1740, 1742, 1708, 1697, - /* 470 */ 1711, 1745, 1712, 1713, 1716, 1758, 1724, 1722, 1732, 1761, - /* 480 */ 1735, 1725, 1734, 1775, 1777, 1791, 1792, 1692, 1707, 1763, - /* 490 */ 1771, 1799, 1765, 1768, 1782, 1772, 1774, 1767, 1769, 1776, - /* 500 */ 1779, 1784, 1780, 1816, 1797, 1822, 1801, 1787, 1824, 1815, - /* 510 */ 1804, 1838, 1805, 1843, 1809, 1846, 1825, 1828, 1764, 1762, - /* 520 */ 1858, 1715, 1826, 1860, 1687, 1841, 1718, 1709, 1866, 1867, - /* 530 */ 1720, 1717, 1869, 1870, 1873, 1874, 1781, 1783, 1848, 1850, - /* 540 */ 1689, 1887, 1794, 1729, 1796, 1892, 1854, 1736, 1802, 1793, - /* 550 */ 1849, 1855, 1684, 1686, 1728, 1857, 1664, 1807, 1808, 1819, - /* 560 */ 1827, 1829, 1820, 1859, 1831, 1834, 1836, 1839, 1837, 1901, - /* 570 */ 1864, 1899, 1852, 1907, 1723, 1853, 1856, 1950, 1911, 1730, - /* 580 */ 1920, 1921, 1922, 1924, 1925, 1926, 1872, 1877, 1916, 1746, - /* 590 */ 1933, 1918, 1919, 1985, 1947, 1788, 1896, 1897, 1902, 1898, - /* 600 */ 1903, 1900, 1945, 1906, 1917, 1953, 1929, 1979, 1810, 1923, - /* 610 */ 1908, 1930, 1980, 1981, 1927, 1932, 1984, 1934, 1935, 1994, - /* 620 */ 1938, 1939, 2000, 1942, 1944, 2002, 1946, 1931, 1937, 1941, - /* 630 */ 1943, 1992, 1914, 1949, 1951, 2006, 1954, 1999, 1999, 2022, - /* 640 */ 1988, 1986, 2021, 2025, 2037, 2038, 2040, 2041, 2042, 2044, - /* 650 */ 2045, 2056, 1989, 1978, 2049, 2058, 2060, 2075, 2063, 2077, - /* 660 */ 2066, 2067, 2068, 2036, 1767, 2070, 1769, 2071, 2072, 2074, - /* 670 */ 2076, 2088, 2079, 2112, 2081, 2073, 2080, 2118, 2087, 2085, - /* 680 */ 2084, 2134, 2100, 2090, 2099, 2139, 2106, 2096, 2115, 2151, - /* 690 */ 2120, 2121, 2157, 2136, 2138, 2140, 2141, 2143, 2145, + /* 0 */ 1148, 0, 58, 271, 58, 329, 329, 329, 542, 329, + /* 10 */ 329, 329, 329, 329, 600, 813, 813, 871, 813, 813, + /* 20 */ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, + /* 30 */ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, + /* 40 */ 813, 813, 813, 813, 813, 813, 279, 434, 8, 266, + /* 50 */ 261, 19, 43, 19, 8, 8, 658, 658, 19, 658, + /* 60 */ 658, 332, 19, 16, 16, 14, 14, 435, 16, 16, + /* 70 */ 16, 16, 16, 16, 16, 16, 16, 16, 20, 16, + /* 80 */ 16, 16, 41, 16, 16, 207, 16, 16, 207, 213, + /* 90 */ 16, 207, 207, 207, 16, 229, 1078, 1253, 1253, 367, + /* 100 */ 222, 653, 653, 653, 653, 653, 653, 653, 653, 653, + /* 110 */ 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, + /* 120 */ 128, 553, 435, 137, 137, 126, 366, 296, 99, 99, + /* 130 */ 267, 267, 267, 366, 364, 364, 364, 27, 41, 10, + /* 140 */ 10, 178, 207, 207, 354, 354, 27, 379, 199, 199, + /* 150 */ 199, 199, 199, 199, 199, 340, 896, 21, 74, 450, + /* 160 */ 164, 350, 407, 323, 422, 578, 821, 720, 963, 685, + /* 170 */ 330, 718, 685, 1009, 395, 841, 1041, 1257, 1135, 1280, + /* 180 */ 1280, 1177, 1318, 1318, 1280, 1177, 1177, 1263, 1318, 1318, + /* 190 */ 1318, 1339, 1339, 1354, 20, 41, 20, 1358, 1362, 20, + /* 200 */ 1358, 20, 20, 20, 1318, 20, 1357, 1357, 1339, 207, + /* 210 */ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, + /* 220 */ 1318, 1339, 354, 1246, 1354, 229, 1272, 41, 229, 1318, + /* 230 */ 1318, 1358, 229, 1211, 354, 354, 354, 354, 1211, 354, + /* 240 */ 1302, 229, 27, 229, 364, 1454, 1454, 354, 1227, 1211, + /* 250 */ 354, 354, 1227, 1211, 354, 354, 207, 1240, 1338, 1227, + /* 260 */ 1249, 1252, 1265, 1041, 1247, 1251, 1256, 1276, 364, 1498, + /* 270 */ 1425, 1427, 354, 379, 1318, 229, 1495, 1339, 3333, 3333, + /* 280 */ 3333, 3333, 3333, 3333, 3333, 1074, 951, 382, 1267, 576, + /* 290 */ 669, 632, 692, 721, 779, 453, 1054, 1054, 1054, 1054, + /* 300 */ 1054, 1054, 1054, 1054, 1054, 993, 670, 105, 113, 767, + /* 310 */ 767, 197, 201, 120, 598, 513, 757, 766, 457, 757, + /* 320 */ 757, 757, 760, 345, 704, 801, 1097, 1010, 1016, 1030, + /* 330 */ 1035, 919, 949, 1187, 466, 940, 920, 969, 1073, 1085, + /* 340 */ 1092, 1136, 1155, 1044, 952, 794, 1176, 1158, 1145, 1201, + /* 350 */ 1112, 1160, 1179, 1192, 1162, 1167, 1168, 1202, 1206, 1254, + /* 360 */ 1178, 1299, 1317, 1260, 1193, 1559, 1561, 1380, 1564, 1565, + /* 370 */ 1525, 1574, 1534, 1375, 1536, 1537, 1541, 1382, 1578, 1544, + /* 380 */ 1545, 1386, 1582, 1388, 1585, 1551, 1587, 1566, 1589, 1555, + /* 390 */ 1413, 1416, 1593, 1594, 1423, 1426, 1598, 1599, 1556, 1601, + /* 400 */ 1603, 1611, 1571, 1615, 1616, 1618, 1579, 1625, 1626, 1628, + /* 410 */ 1630, 1631, 1471, 1597, 1634, 1486, 1636, 1637, 1639, 1640, + /* 420 */ 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1651, + /* 430 */ 1652, 1613, 1653, 1656, 1657, 1665, 1667, 1650, 1669, 1670, + /* 440 */ 1679, 1680, 1654, 1682, 1617, 1675, 1627, 1685, 1686, 1655, + /* 450 */ 1659, 1658, 1673, 1660, 1676, 1661, 1688, 1662, 1664, 1699, + /* 460 */ 1700, 1705, 1671, 1526, 1694, 1695, 1696, 1629, 1709, 1711, + /* 470 */ 1684, 1677, 1683, 1723, 1691, 1681, 1698, 1730, 1703, 1693, + /* 480 */ 1702, 1733, 1704, 1701, 1706, 1735, 1742, 1743, 1746, 1668, + /* 490 */ 1689, 1712, 1727, 1750, 1716, 1717, 1731, 1719, 1720, 1713, + /* 500 */ 1715, 1724, 1725, 1740, 1728, 1764, 1753, 1776, 1755, 1732, + /* 510 */ 1779, 1761, 1751, 1788, 1757, 1790, 1758, 1794, 1773, 1777, + /* 520 */ 1707, 1714, 1796, 1635, 1765, 1799, 1622, 1780, 1678, 1672, + /* 530 */ 1804, 1806, 1690, 1663, 1805, 1807, 1811, 1812, 1718, 1721, + /* 540 */ 1781, 1792, 1666, 1815, 1736, 1697, 1739, 1825, 1791, 1687, + /* 550 */ 1741, 1734, 1798, 1797, 1624, 1633, 1632, 1802, 1596, 1752, + /* 560 */ 1756, 1760, 1766, 1767, 1769, 1808, 1770, 1774, 1778, 1782, + /* 570 */ 1772, 1813, 1819, 1824, 1783, 1818, 1708, 1800, 1801, 1873, + /* 580 */ 1847, 1710, 1857, 1858, 1859, 1863, 1865, 1866, 1814, 1816, + /* 590 */ 1856, 1722, 1870, 1868, 1869, 1914, 1895, 1726, 1827, 1823, + /* 600 */ 1829, 1832, 1831, 1834, 1874, 1836, 1837, 1879, 1839, 1911, + /* 610 */ 1737, 1842, 1833, 1845, 1903, 1908, 1849, 1850, 1910, 1852, + /* 620 */ 1853, 1913, 1855, 1862, 1916, 1860, 1864, 1917, 1882, 1840, + /* 630 */ 1844, 1867, 1871, 1931, 1872, 1883, 1886, 1929, 1887, 1933, + /* 640 */ 1933, 1952, 1920, 1922, 1953, 1954, 1956, 1957, 1958, 1959, + /* 650 */ 1960, 1962, 1963, 1964, 1932, 1912, 1966, 1965, 1967, 1981, + /* 660 */ 1970, 1984, 1972, 1975, 1976, 1944, 1713, 1980, 1715, 1988, + /* 670 */ 1990, 1992, 1993, 2007, 1995, 2031, 1997, 1989, 1994, 2035, + /* 680 */ 2002, 1991, 2001, 2042, 2008, 1998, 2009, 2046, 2012, 2003, + /* 690 */ 2010, 2051, 2018, 2019, 2055, 2034, 2039, 2041, 2043, 2047, + /* 700 */ 2044, }; -#define YY_REDUCE_COUNT (282) -#define YY_REDUCE_MIN (-409) -#define YY_REDUCE_MAX (2398) +#define YY_REDUCE_COUNT (284) +#define YY_REDUCE_MIN (-358) +#define YY_REDUCE_MAX (2928) static const short yy_reduce_ofst[] = { - /* 0 */ -90, -254, -314, 878, 1029, 281, 550, 1072, -22, 1133, - /* 10 */ 1155, 1213, 1273, 1388, 1431, 262, 531, 1455, 1334, 1521, - /* 20 */ 1541, 1584, 603, 1608, 1668, 1688, 1731, 1750, 1803, 1821, - /* 30 */ 1885, 1905, 1948, 1967, 2010, 2034, 2053, 2114, 2167, 2185, - /* 40 */ 2249, 2269, 2312, 2331, 2374, 2398, -29, 279, -224, 277, - /* 50 */ 805, 925, 927, 1148, -14, 289, -352, -349, -317, -342, - /* 60 */ -67, 14, 160, -102, 38, -319, -310, -212, -208, 224, - /* 70 */ 282, 292, 312, 344, 439, 529, 532, 537, -232, 551, - /* 80 */ 577, 581, -246, 613, 633, -161, 646, 760, -26, -99, - /* 90 */ 926, 220, -24, 284, 983, -98, -313, -409, -409, -31, - /* 100 */ -265, -164, -138, -119, -12, -7, 233, 236, 251, 303, - /* 110 */ 399, 406, 463, 509, 539, 541, 620, 622, 669, 671, - /* 120 */ 59, -23, -290, 237, 367, -242, 103, 356, 195, 306, - /* 130 */ -23, 193, 345, 355, -74, 409, 465, 430, 456, 390, - /* 140 */ 401, 428, -316, 517, 475, 525, 573, 565, -347, 145, - /* 150 */ 271, 291, 349, 354, 513, 511, 238, 629, 579, 528, - /* 160 */ 544, 658, 663, 749, 749, 794, 806, 816, 776, 771, - /* 170 */ 771, 782, 771, 819, 779, 749, 847, 876, 890, 919, - /* 180 */ 949, 955, 996, 998, 956, 960, 975, 1009, 1002, 1017, - /* 190 */ 1018, 1030, 1031, 971, 1023, 994, 1025, 984, 989, 1040, - /* 200 */ 986, 1041, 1043, 1044, 1046, 1045, 1058, 1032, 1033, 1034, - /* 210 */ 1035, 1036, 1038, 1039, 1047, 1048, 1049, 1050, 1061, 1068, - /* 220 */ 1053, 1011, 1019, 1071, 1037, 1052, 1087, 1092, 1103, 1056, - /* 230 */ 1108, 1067, 1081, 1082, 1083, 1084, 1076, 1088, 1079, 1121, - /* 240 */ 1107, 1124, 1098, 1080, 1089, 1096, 1054, 1102, 1101, 1114, - /* 250 */ 1057, 1115, 1117, 1126, 749, 1028, 1060, 1063, 1065, 1074, - /* 260 */ 1077, 1112, 1059, 1064, 1075, 771, 1153, 1120, 1109, 1162, - /* 270 */ 1161, 1182, 1196, 1205, 1214, 1216, 1163, 1172, 1212, 1215, - /* 280 */ 1222, 1235, 1246, + /* 0 */ -94, -292, 892, -230, 1003, 1029, 1141, 1208, -21, 1262, + /* 10 */ 1316, 1369, 535, 1422, 1483, 205, -204, 1507, 264, 1569, + /* 20 */ 1620, 1674, 1692, 1775, 1830, 1881, 1935, 1986, 2040, 2058, + /* 30 */ 2141, 2196, 2247, 2301, 2352, 2406, 2424, 2507, 2562, 2613, + /* 40 */ 2667, 2718, 2772, 2790, 2873, 2928, 946, 70, -276, 72, + /* 50 */ 471, 512, 612, 614, 771, 776, -328, -252, 885, -348, + /* 60 */ -325, -92, 343, -319, -214, -326, -321, -37, -305, -232, + /* 70 */ 265, 293, 349, 359, 381, 498, 509, 520, -176, 551, + /* 80 */ 555, 556, -358, 622, 840, -329, 910, 912, 147, -169, + /* 90 */ 917, 217, 258, 306, 627, 177, -205, 88, 88, -302, + /* 100 */ -224, -162, 106, 523, 525, 545, 549, 583, 599, 602, + /* 110 */ 607, 621, 625, 634, 674, 678, 679, 742, 749, 802, + /* 120 */ -350, -59, 159, -253, -89, -331, 220, 5, 186, 430, + /* 130 */ -59, 303, 316, 504, 97, 216, 493, 342, 336, 454, + /* 140 */ 544, 335, 689, -267, 613, 648, 754, 561, 121, 151, + /* 150 */ 156, 277, 298, 421, 433, 460, 531, 566, 581, 547, + /* 160 */ 603, 650, 710, 850, 850, 873, 908, 875, 853, 826, + /* 170 */ 826, 831, 826, 861, 852, 850, 909, 916, 928, 961, + /* 180 */ 964, 967, 1011, 1019, 968, 983, 984, 1021, 1032, 1043, + /* 190 */ 1045, 1036, 1047, 990, 1042, 1013, 1048, 1005, 1004, 1051, + /* 200 */ 1018, 1063, 1071, 1075, 1079, 1080, 1081, 1084, 1096, 1070, + /* 210 */ 1072, 1082, 1083, 1089, 1090, 1091, 1094, 1095, 1098, 1099, + /* 220 */ 1093, 1108, 1087, 1050, 1062, 1116, 1076, 1088, 1123, 1127, + /* 230 */ 1128, 1086, 1126, 1100, 1101, 1102, 1103, 1104, 1105, 1106, + /* 240 */ 1121, 1131, 1122, 1139, 1113, 1107, 1109, 1111, 1046, 1120, + /* 250 */ 1114, 1132, 1049, 1124, 1133, 1138, 850, 1065, 1077, 1115, + /* 260 */ 1117, 1119, 1125, 1129, 1064, 1069, 1118, 826, 1161, 1130, + /* 270 */ 1137, 1169, 1163, 1181, 1196, 1194, 1207, 1210, 1152, 1166, + /* 280 */ 1190, 1200, 1209, 1219, 1238, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 10 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 20 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 30 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 40 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 50 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 60 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 70 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1633, 1559, - /* 80 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 90 */ 1559, 1559, 1559, 1559, 1559, 1631, 1803, 1992, 1559, 1559, - /* 100 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 110 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 120 */ 1559, 2004, 1559, 1559, 1559, 1633, 1559, 1631, 1964, 1964, - /* 130 */ 2004, 2004, 2004, 1559, 1559, 1559, 1559, 1742, 1559, 1844, - /* 140 */ 1844, 1559, 1559, 1559, 1559, 1559, 1742, 1559, 1559, 1559, - /* 150 */ 1559, 1559, 1559, 1559, 1559, 1838, 1559, 1559, 2029, 2082, - /* 160 */ 1559, 1559, 2032, 1559, 1559, 1559, 1559, 1695, 2019, 1996, - /* 170 */ 2010, 2066, 1997, 1994, 2013, 1559, 2023, 1559, 1831, 1808, - /* 180 */ 1808, 1805, 1559, 1559, 1808, 1805, 1805, 1686, 1559, 1559, - /* 190 */ 1559, 1559, 1559, 1559, 1633, 1559, 1633, 1559, 1559, 1633, - /* 200 */ 1559, 1633, 1633, 1633, 1559, 1633, 1559, 1559, 1559, 1559, - /* 210 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 220 */ 1559, 1851, 1559, 1631, 1840, 1559, 1631, 1559, 1559, 1559, - /* 230 */ 1631, 2037, 1559, 1559, 1559, 1559, 2037, 1559, 1559, 1631, - /* 240 */ 1559, 1631, 1559, 1559, 1559, 1559, 2039, 2037, 1559, 1559, - /* 250 */ 2039, 2037, 1559, 1559, 1559, 2051, 2047, 2039, 2055, 2053, - /* 260 */ 2025, 2023, 2085, 2072, 2068, 2010, 1559, 1559, 1559, 1711, - /* 270 */ 1559, 1559, 1559, 1631, 1591, 1559, 1833, 1844, 1745, 1745, - /* 280 */ 1745, 1634, 1564, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 290 */ 1559, 1559, 1559, 1559, 1920, 1559, 2050, 2049, 1968, 1967, - /* 300 */ 1966, 1957, 1919, 1559, 1707, 1559, 1559, 1918, 1917, 1559, - /* 310 */ 1559, 1559, 1559, 1559, 1911, 1559, 1559, 1912, 1910, 1909, - /* 320 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 330 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 340 */ 1559, 1559, 2069, 2073, 1993, 1559, 1559, 1559, 1559, 1559, - /* 350 */ 1902, 1893, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 360 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 370 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 380 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 390 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 400 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 410 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 420 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 430 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 440 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1596, - /* 450 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 460 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 470 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 480 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 490 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1673, 1672, 1559, - /* 500 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 510 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1901, 1559, - /* 520 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 530 */ 1559, 1559, 2065, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 540 */ 1559, 1848, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 550 */ 1559, 1954, 1559, 1559, 1559, 2026, 1559, 1559, 1559, 1559, - /* 560 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 570 */ 1559, 1893, 1559, 2048, 1559, 1559, 2063, 1559, 2067, 1559, - /* 580 */ 1559, 1559, 1559, 1559, 1559, 1559, 2003, 1999, 1559, 1559, - /* 590 */ 1995, 1892, 1559, 1988, 1559, 1559, 1939, 1559, 1559, 1559, - /* 600 */ 1559, 1559, 1559, 1559, 1559, 1559, 1901, 1559, 1905, 1559, - /* 610 */ 1559, 1559, 1559, 1559, 1739, 1559, 1559, 1559, 1559, 1559, - /* 620 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1724, 1722, 1721, - /* 630 */ 1720, 1559, 1717, 1559, 1559, 1559, 1559, 1748, 1747, 1559, - /* 640 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 650 */ 1559, 1559, 1559, 1559, 1653, 1559, 1559, 1559, 1559, 1559, - /* 660 */ 1559, 1559, 1559, 1559, 1644, 1559, 1643, 1559, 1559, 1559, - /* 670 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 680 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 690 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, + /* 0 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 10 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 20 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 30 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 40 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 50 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 60 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 70 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1640, 1564, + /* 80 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 90 */ 1564, 1564, 1564, 1564, 1564, 1638, 1810, 1999, 1564, 1564, + /* 100 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 110 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 120 */ 1564, 2011, 1564, 1564, 1564, 1640, 1564, 1638, 1971, 1971, + /* 130 */ 2011, 2011, 2011, 1564, 1564, 1564, 1564, 1749, 1564, 1851, + /* 140 */ 1851, 1564, 1564, 1564, 1564, 1564, 1749, 1564, 1564, 1564, + /* 150 */ 1564, 1564, 1564, 1564, 1564, 1845, 1564, 1564, 2036, 2089, + /* 160 */ 1564, 1564, 2039, 1564, 1564, 1564, 1564, 1702, 2026, 2003, + /* 170 */ 2017, 2073, 2004, 2001, 2020, 1564, 2030, 1564, 1838, 1815, + /* 180 */ 1815, 1812, 1564, 1564, 1815, 1812, 1812, 1693, 1564, 1564, + /* 190 */ 1564, 1564, 1564, 1564, 1640, 1564, 1640, 1564, 1564, 1640, + /* 200 */ 1564, 1640, 1640, 1640, 1564, 1640, 1619, 1619, 1564, 1564, + /* 210 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 220 */ 1564, 1564, 1564, 1858, 1564, 1638, 1847, 1564, 1638, 1564, + /* 230 */ 1564, 1564, 1638, 2044, 1564, 1564, 1564, 1564, 2044, 1564, + /* 240 */ 1564, 1638, 1564, 1638, 1564, 1564, 1564, 1564, 2046, 2044, + /* 250 */ 1564, 1564, 2046, 2044, 1564, 1564, 1564, 2058, 2054, 2046, + /* 260 */ 2062, 2060, 2032, 2030, 2092, 2079, 2075, 2017, 1564, 1564, + /* 270 */ 1564, 1718, 1564, 1564, 1564, 1638, 1596, 1564, 1840, 1851, + /* 280 */ 1752, 1752, 1752, 1641, 1569, 1564, 1564, 1564, 1564, 1564, + /* 290 */ 1564, 1564, 1564, 1564, 1564, 1564, 1927, 1564, 2057, 2056, + /* 300 */ 1975, 1974, 1973, 1964, 1926, 1564, 1714, 1564, 1564, 1925, + /* 310 */ 1924, 1564, 1564, 1564, 1564, 1564, 1918, 1564, 1564, 1919, + /* 320 */ 1917, 1916, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 330 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 340 */ 1564, 1564, 1564, 1564, 2076, 2080, 2000, 1564, 1564, 1564, + /* 350 */ 1564, 1564, 1909, 1900, 1564, 1564, 1564, 1564, 1564, 1564, + /* 360 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 370 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 380 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 390 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 400 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 410 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 420 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 430 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 440 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 450 */ 1564, 1601, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 460 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 470 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 480 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 490 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1680, + /* 500 */ 1679, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 510 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 520 */ 1908, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 530 */ 1564, 1564, 1564, 1564, 2072, 1564, 1564, 1564, 1564, 1564, + /* 540 */ 1564, 1564, 1564, 1855, 1564, 1564, 1564, 1564, 1564, 1564, + /* 550 */ 1564, 1564, 1564, 1961, 1564, 1564, 1564, 2033, 1564, 1564, + /* 560 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 570 */ 1564, 1564, 1564, 1900, 1564, 2055, 1564, 1564, 2070, 1564, + /* 580 */ 2074, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 2010, 2006, + /* 590 */ 1564, 1564, 2002, 1899, 1564, 1995, 1564, 1564, 1946, 1564, + /* 600 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1908, 1564, + /* 610 */ 1912, 1564, 1564, 1564, 1564, 1564, 1746, 1564, 1564, 1564, + /* 620 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1731, + /* 630 */ 1729, 1728, 1727, 1564, 1724, 1564, 1564, 1564, 1564, 1755, + /* 640 */ 1754, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 650 */ 1564, 1564, 1564, 1564, 1564, 1564, 1660, 1564, 1564, 1564, + /* 660 */ 1564, 1564, 1564, 1564, 1564, 1564, 1651, 1564, 1650, 1564, + /* 670 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 680 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 690 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 700 */ 1564, }; /********** End of lemon-generated parsing tables *****************************/ @@ -1033,6 +1141,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* PORT => nothing */ 0, /* DNODES => nothing */ 0, /* NK_IPTOKEN => nothing */ + 0, /* FORCE => nothing */ 0, /* LOCAL => nothing */ 0, /* QNODE => nothing */ 0, /* BNODE => nothing */ @@ -1206,7 +1315,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* COUNT => nothing */ 0, /* LAST_ROW => nothing */ 0, /* CASE => nothing */ - 265, /* END => ABORT */ + 266, /* END => ABORT */ 0, /* WHEN => nothing */ 0, /* THEN => nothing */ 0, /* ELSE => nothing */ @@ -1248,58 +1357,58 @@ static const YYCODETYPE yyFallback[] = { 0, /* ASC => nothing */ 0, /* NULLS => nothing */ 0, /* ABORT => nothing */ - 265, /* AFTER => ABORT */ - 265, /* ATTACH => ABORT */ - 265, /* BEFORE => ABORT */ - 265, /* BEGIN => ABORT */ - 265, /* BITAND => ABORT */ - 265, /* BITNOT => ABORT */ - 265, /* BITOR => ABORT */ - 265, /* BLOCKS => ABORT */ - 265, /* CHANGE => ABORT */ - 265, /* COMMA => ABORT */ - 265, /* COMPACT => ABORT */ - 265, /* CONCAT => ABORT */ - 265, /* CONFLICT => ABORT */ - 265, /* COPY => ABORT */ - 265, /* DEFERRED => ABORT */ - 265, /* DELIMITERS => ABORT */ - 265, /* DETACH => ABORT */ - 265, /* DIVIDE => ABORT */ - 265, /* DOT => ABORT */ - 265, /* EACH => ABORT */ - 265, /* FAIL => ABORT */ - 265, /* FILE => ABORT */ - 265, /* FOR => ABORT */ - 265, /* GLOB => ABORT */ - 265, /* ID => ABORT */ - 265, /* IMMEDIATE => ABORT */ - 265, /* IMPORT => ABORT */ - 265, /* INITIALLY => ABORT */ - 265, /* INSTEAD => ABORT */ - 265, /* ISNULL => ABORT */ - 265, /* KEY => ABORT */ - 265, /* MODULES => ABORT */ - 265, /* NK_BITNOT => ABORT */ - 265, /* NK_SEMI => ABORT */ - 265, /* NOTNULL => ABORT */ - 265, /* OF => ABORT */ - 265, /* PLUS => ABORT */ - 265, /* PRIVILEGE => ABORT */ - 265, /* RAISE => ABORT */ - 265, /* REPLACE => ABORT */ - 265, /* RESTRICT => ABORT */ - 265, /* ROW => ABORT */ - 265, /* SEMI => ABORT */ - 265, /* STAR => ABORT */ - 265, /* STATEMENT => ABORT */ - 265, /* STRING => ABORT */ - 265, /* TIMES => ABORT */ - 265, /* UPDATE => ABORT */ - 265, /* VALUES => ABORT */ - 265, /* VARIABLE => ABORT */ - 265, /* VIEW => ABORT */ - 265, /* WAL => ABORT */ + 266, /* AFTER => ABORT */ + 266, /* ATTACH => ABORT */ + 266, /* BEFORE => ABORT */ + 266, /* BEGIN => ABORT */ + 266, /* BITAND => ABORT */ + 266, /* BITNOT => ABORT */ + 266, /* BITOR => ABORT */ + 266, /* BLOCKS => ABORT */ + 266, /* CHANGE => ABORT */ + 266, /* COMMA => ABORT */ + 266, /* COMPACT => ABORT */ + 266, /* CONCAT => ABORT */ + 266, /* CONFLICT => ABORT */ + 266, /* COPY => ABORT */ + 266, /* DEFERRED => ABORT */ + 266, /* DELIMITERS => ABORT */ + 266, /* DETACH => ABORT */ + 266, /* DIVIDE => ABORT */ + 266, /* DOT => ABORT */ + 266, /* EACH => ABORT */ + 266, /* FAIL => ABORT */ + 266, /* FILE => ABORT */ + 266, /* FOR => ABORT */ + 266, /* GLOB => ABORT */ + 266, /* ID => ABORT */ + 266, /* IMMEDIATE => ABORT */ + 266, /* IMPORT => ABORT */ + 266, /* INITIALLY => ABORT */ + 266, /* INSTEAD => ABORT */ + 266, /* ISNULL => ABORT */ + 266, /* KEY => ABORT */ + 266, /* MODULES => ABORT */ + 266, /* NK_BITNOT => ABORT */ + 266, /* NK_SEMI => ABORT */ + 266, /* NOTNULL => ABORT */ + 266, /* OF => ABORT */ + 266, /* PLUS => ABORT */ + 266, /* PRIVILEGE => ABORT */ + 266, /* RAISE => ABORT */ + 266, /* REPLACE => ABORT */ + 266, /* RESTRICT => ABORT */ + 266, /* ROW => ABORT */ + 266, /* SEMI => ABORT */ + 266, /* STAR => ABORT */ + 266, /* STATEMENT => ABORT */ + 266, /* STRING => ABORT */ + 266, /* TIMES => ABORT */ + 266, /* UPDATE => ABORT */ + 266, /* VALUES => ABORT */ + 266, /* VARIABLE => ABORT */ + 266, /* VIEW => ABORT */ + 266, /* WAL => ABORT */ }; #endif /* YYFALLBACK */ @@ -1438,405 +1547,407 @@ static const char *const yyTokenName[] = { /* 48 */ "PORT", /* 49 */ "DNODES", /* 50 */ "NK_IPTOKEN", - /* 51 */ "LOCAL", - /* 52 */ "QNODE", - /* 53 */ "BNODE", - /* 54 */ "SNODE", - /* 55 */ "MNODE", - /* 56 */ "DATABASE", - /* 57 */ "USE", - /* 58 */ "FLUSH", - /* 59 */ "TRIM", - /* 60 */ "IF", - /* 61 */ "NOT", - /* 62 */ "EXISTS", - /* 63 */ "BUFFER", - /* 64 */ "CACHEMODEL", - /* 65 */ "CACHESIZE", - /* 66 */ "COMP", - /* 67 */ "DURATION", - /* 68 */ "NK_VARIABLE", - /* 69 */ "MAXROWS", - /* 70 */ "MINROWS", - /* 71 */ "KEEP", - /* 72 */ "PAGES", - /* 73 */ "PAGESIZE", - /* 74 */ "TSDB_PAGESIZE", - /* 75 */ "PRECISION", - /* 76 */ "REPLICA", - /* 77 */ "STRICT", - /* 78 */ "VGROUPS", - /* 79 */ "SINGLE_STABLE", - /* 80 */ "RETENTIONS", - /* 81 */ "SCHEMALESS", - /* 82 */ "WAL_LEVEL", - /* 83 */ "WAL_FSYNC_PERIOD", - /* 84 */ "WAL_RETENTION_PERIOD", - /* 85 */ "WAL_RETENTION_SIZE", - /* 86 */ "WAL_ROLL_PERIOD", - /* 87 */ "WAL_SEGMENT_SIZE", - /* 88 */ "STT_TRIGGER", - /* 89 */ "TABLE_PREFIX", - /* 90 */ "TABLE_SUFFIX", - /* 91 */ "NK_COLON", - /* 92 */ "MAX_SPEED", - /* 93 */ "TABLE", - /* 94 */ "NK_LP", - /* 95 */ "NK_RP", - /* 96 */ "STABLE", - /* 97 */ "ADD", - /* 98 */ "COLUMN", - /* 99 */ "MODIFY", - /* 100 */ "RENAME", - /* 101 */ "TAG", - /* 102 */ "SET", - /* 103 */ "NK_EQ", - /* 104 */ "USING", - /* 105 */ "TAGS", - /* 106 */ "COMMENT", - /* 107 */ "BOOL", - /* 108 */ "TINYINT", - /* 109 */ "SMALLINT", - /* 110 */ "INT", - /* 111 */ "INTEGER", - /* 112 */ "BIGINT", - /* 113 */ "FLOAT", - /* 114 */ "DOUBLE", - /* 115 */ "BINARY", - /* 116 */ "TIMESTAMP", - /* 117 */ "NCHAR", - /* 118 */ "UNSIGNED", - /* 119 */ "JSON", - /* 120 */ "VARCHAR", - /* 121 */ "MEDIUMBLOB", - /* 122 */ "BLOB", - /* 123 */ "VARBINARY", - /* 124 */ "DECIMAL", - /* 125 */ "MAX_DELAY", - /* 126 */ "WATERMARK", - /* 127 */ "ROLLUP", - /* 128 */ "TTL", - /* 129 */ "SMA", - /* 130 */ "FIRST", - /* 131 */ "LAST", - /* 132 */ "SHOW", - /* 133 */ "DATABASES", - /* 134 */ "TABLES", - /* 135 */ "STABLES", - /* 136 */ "MNODES", - /* 137 */ "QNODES", - /* 138 */ "FUNCTIONS", - /* 139 */ "INDEXES", - /* 140 */ "ACCOUNTS", - /* 141 */ "APPS", - /* 142 */ "CONNECTIONS", - /* 143 */ "LICENCES", - /* 144 */ "GRANTS", - /* 145 */ "QUERIES", - /* 146 */ "SCORES", - /* 147 */ "TOPICS", - /* 148 */ "VARIABLES", - /* 149 */ "CLUSTER", - /* 150 */ "BNODES", - /* 151 */ "SNODES", - /* 152 */ "TRANSACTIONS", - /* 153 */ "DISTRIBUTED", - /* 154 */ "CONSUMERS", - /* 155 */ "SUBSCRIPTIONS", - /* 156 */ "VNODES", - /* 157 */ "LIKE", - /* 158 */ "INDEX", - /* 159 */ "FUNCTION", - /* 160 */ "INTERVAL", - /* 161 */ "TOPIC", - /* 162 */ "AS", - /* 163 */ "WITH", - /* 164 */ "META", - /* 165 */ "CONSUMER", - /* 166 */ "GROUP", - /* 167 */ "DESC", - /* 168 */ "DESCRIBE", - /* 169 */ "RESET", - /* 170 */ "QUERY", - /* 171 */ "CACHE", - /* 172 */ "EXPLAIN", - /* 173 */ "ANALYZE", - /* 174 */ "VERBOSE", - /* 175 */ "NK_BOOL", - /* 176 */ "RATIO", - /* 177 */ "NK_FLOAT", - /* 178 */ "OUTPUTTYPE", - /* 179 */ "AGGREGATE", - /* 180 */ "BUFSIZE", - /* 181 */ "STREAM", - /* 182 */ "INTO", - /* 183 */ "TRIGGER", - /* 184 */ "AT_ONCE", - /* 185 */ "WINDOW_CLOSE", - /* 186 */ "IGNORE", - /* 187 */ "EXPIRED", - /* 188 */ "FILL_HISTORY", - /* 189 */ "SUBTABLE", - /* 190 */ "KILL", - /* 191 */ "CONNECTION", - /* 192 */ "TRANSACTION", - /* 193 */ "BALANCE", - /* 194 */ "VGROUP", - /* 195 */ "MERGE", - /* 196 */ "REDISTRIBUTE", - /* 197 */ "SPLIT", - /* 198 */ "DELETE", - /* 199 */ "INSERT", - /* 200 */ "NULL", - /* 201 */ "NK_QUESTION", - /* 202 */ "NK_ARROW", - /* 203 */ "ROWTS", - /* 204 */ "TBNAME", - /* 205 */ "QSTART", - /* 206 */ "QEND", - /* 207 */ "QDURATION", - /* 208 */ "WSTART", - /* 209 */ "WEND", - /* 210 */ "WDURATION", - /* 211 */ "IROWTS", - /* 212 */ "QTAGS", - /* 213 */ "CAST", - /* 214 */ "NOW", - /* 215 */ "TODAY", - /* 216 */ "TIMEZONE", - /* 217 */ "CLIENT_VERSION", - /* 218 */ "SERVER_VERSION", - /* 219 */ "SERVER_STATUS", - /* 220 */ "CURRENT_USER", - /* 221 */ "COUNT", - /* 222 */ "LAST_ROW", - /* 223 */ "CASE", - /* 224 */ "END", - /* 225 */ "WHEN", - /* 226 */ "THEN", - /* 227 */ "ELSE", - /* 228 */ "BETWEEN", - /* 229 */ "IS", - /* 230 */ "NK_LT", - /* 231 */ "NK_GT", - /* 232 */ "NK_LE", - /* 233 */ "NK_GE", - /* 234 */ "NK_NE", - /* 235 */ "MATCH", - /* 236 */ "NMATCH", - /* 237 */ "CONTAINS", - /* 238 */ "IN", - /* 239 */ "JOIN", - /* 240 */ "INNER", - /* 241 */ "SELECT", - /* 242 */ "DISTINCT", - /* 243 */ "WHERE", - /* 244 */ "PARTITION", - /* 245 */ "BY", - /* 246 */ "SESSION", - /* 247 */ "STATE_WINDOW", - /* 248 */ "SLIDING", - /* 249 */ "FILL", - /* 250 */ "VALUE", - /* 251 */ "NONE", - /* 252 */ "PREV", - /* 253 */ "LINEAR", - /* 254 */ "NEXT", - /* 255 */ "HAVING", - /* 256 */ "RANGE", - /* 257 */ "EVERY", - /* 258 */ "ORDER", - /* 259 */ "SLIMIT", - /* 260 */ "SOFFSET", - /* 261 */ "LIMIT", - /* 262 */ "OFFSET", - /* 263 */ "ASC", - /* 264 */ "NULLS", - /* 265 */ "ABORT", - /* 266 */ "AFTER", - /* 267 */ "ATTACH", - /* 268 */ "BEFORE", - /* 269 */ "BEGIN", - /* 270 */ "BITAND", - /* 271 */ "BITNOT", - /* 272 */ "BITOR", - /* 273 */ "BLOCKS", - /* 274 */ "CHANGE", - /* 275 */ "COMMA", - /* 276 */ "COMPACT", - /* 277 */ "CONCAT", - /* 278 */ "CONFLICT", - /* 279 */ "COPY", - /* 280 */ "DEFERRED", - /* 281 */ "DELIMITERS", - /* 282 */ "DETACH", - /* 283 */ "DIVIDE", - /* 284 */ "DOT", - /* 285 */ "EACH", - /* 286 */ "FAIL", - /* 287 */ "FILE", - /* 288 */ "FOR", - /* 289 */ "GLOB", - /* 290 */ "ID", - /* 291 */ "IMMEDIATE", - /* 292 */ "IMPORT", - /* 293 */ "INITIALLY", - /* 294 */ "INSTEAD", - /* 295 */ "ISNULL", - /* 296 */ "KEY", - /* 297 */ "MODULES", - /* 298 */ "NK_BITNOT", - /* 299 */ "NK_SEMI", - /* 300 */ "NOTNULL", - /* 301 */ "OF", - /* 302 */ "PLUS", - /* 303 */ "PRIVILEGE", - /* 304 */ "RAISE", - /* 305 */ "REPLACE", - /* 306 */ "RESTRICT", - /* 307 */ "ROW", - /* 308 */ "SEMI", - /* 309 */ "STAR", - /* 310 */ "STATEMENT", - /* 311 */ "STRING", - /* 312 */ "TIMES", - /* 313 */ "UPDATE", - /* 314 */ "VALUES", - /* 315 */ "VARIABLE", - /* 316 */ "VIEW", - /* 317 */ "WAL", - /* 318 */ "cmd", - /* 319 */ "account_options", - /* 320 */ "alter_account_options", - /* 321 */ "literal", - /* 322 */ "alter_account_option", - /* 323 */ "user_name", - /* 324 */ "sysinfo_opt", - /* 325 */ "privileges", - /* 326 */ "priv_level", - /* 327 */ "priv_type_list", - /* 328 */ "priv_type", - /* 329 */ "db_name", - /* 330 */ "dnode_endpoint", - /* 331 */ "not_exists_opt", - /* 332 */ "db_options", - /* 333 */ "exists_opt", - /* 334 */ "alter_db_options", - /* 335 */ "speed_opt", - /* 336 */ "integer_list", - /* 337 */ "variable_list", - /* 338 */ "retention_list", - /* 339 */ "alter_db_option", - /* 340 */ "retention", - /* 341 */ "full_table_name", - /* 342 */ "column_def_list", - /* 343 */ "tags_def_opt", - /* 344 */ "table_options", - /* 345 */ "multi_create_clause", - /* 346 */ "tags_def", - /* 347 */ "multi_drop_clause", - /* 348 */ "alter_table_clause", - /* 349 */ "alter_table_options", - /* 350 */ "column_name", - /* 351 */ "type_name", - /* 352 */ "signed_literal", - /* 353 */ "create_subtable_clause", - /* 354 */ "specific_cols_opt", - /* 355 */ "expression_list", - /* 356 */ "drop_table_clause", - /* 357 */ "col_name_list", - /* 358 */ "table_name", - /* 359 */ "column_def", - /* 360 */ "duration_list", - /* 361 */ "rollup_func_list", - /* 362 */ "alter_table_option", - /* 363 */ "duration_literal", - /* 364 */ "rollup_func_name", - /* 365 */ "function_name", - /* 366 */ "col_name", - /* 367 */ "db_name_cond_opt", - /* 368 */ "like_pattern_opt", - /* 369 */ "table_name_cond", - /* 370 */ "from_db_opt", - /* 371 */ "index_options", - /* 372 */ "func_list", - /* 373 */ "sliding_opt", - /* 374 */ "sma_stream_opt", - /* 375 */ "func", - /* 376 */ "stream_options", - /* 377 */ "topic_name", - /* 378 */ "query_or_subquery", - /* 379 */ "cgroup_name", - /* 380 */ "analyze_opt", - /* 381 */ "explain_options", - /* 382 */ "agg_func_opt", - /* 383 */ "bufsize_opt", - /* 384 */ "stream_name", - /* 385 */ "subtable_opt", - /* 386 */ "expression", - /* 387 */ "dnode_list", - /* 388 */ "where_clause_opt", - /* 389 */ "signed", - /* 390 */ "literal_func", - /* 391 */ "literal_list", - /* 392 */ "table_alias", - /* 393 */ "column_alias", - /* 394 */ "expr_or_subquery", - /* 395 */ "subquery", - /* 396 */ "pseudo_column", - /* 397 */ "column_reference", - /* 398 */ "function_expression", - /* 399 */ "case_when_expression", - /* 400 */ "star_func", - /* 401 */ "star_func_para_list", - /* 402 */ "noarg_func", - /* 403 */ "other_para_list", - /* 404 */ "star_func_para", - /* 405 */ "when_then_list", - /* 406 */ "case_when_else_opt", - /* 407 */ "common_expression", - /* 408 */ "when_then_expr", - /* 409 */ "predicate", - /* 410 */ "compare_op", - /* 411 */ "in_op", - /* 412 */ "in_predicate_value", - /* 413 */ "boolean_value_expression", - /* 414 */ "boolean_primary", - /* 415 */ "from_clause_opt", - /* 416 */ "table_reference_list", - /* 417 */ "table_reference", - /* 418 */ "table_primary", - /* 419 */ "joined_table", - /* 420 */ "alias_opt", - /* 421 */ "parenthesized_joined_table", - /* 422 */ "join_type", - /* 423 */ "search_condition", - /* 424 */ "query_specification", - /* 425 */ "set_quantifier_opt", - /* 426 */ "select_list", - /* 427 */ "partition_by_clause_opt", - /* 428 */ "range_opt", - /* 429 */ "every_opt", - /* 430 */ "fill_opt", - /* 431 */ "twindow_clause_opt", - /* 432 */ "group_by_clause_opt", - /* 433 */ "having_clause_opt", - /* 434 */ "select_item", - /* 435 */ "partition_list", - /* 436 */ "partition_item", - /* 437 */ "fill_mode", - /* 438 */ "group_by_list", - /* 439 */ "query_expression", - /* 440 */ "query_simple", - /* 441 */ "order_by_clause_opt", - /* 442 */ "slimit_clause_opt", - /* 443 */ "limit_clause_opt", - /* 444 */ "union_query_expression", - /* 445 */ "query_simple_or_subquery", - /* 446 */ "sort_specification_list", - /* 447 */ "sort_specification", - /* 448 */ "ordering_specification_opt", - /* 449 */ "null_ordering_opt", + /* 51 */ "FORCE", + /* 52 */ "LOCAL", + /* 53 */ "QNODE", + /* 54 */ "BNODE", + /* 55 */ "SNODE", + /* 56 */ "MNODE", + /* 57 */ "DATABASE", + /* 58 */ "USE", + /* 59 */ "FLUSH", + /* 60 */ "TRIM", + /* 61 */ "IF", + /* 62 */ "NOT", + /* 63 */ "EXISTS", + /* 64 */ "BUFFER", + /* 65 */ "CACHEMODEL", + /* 66 */ "CACHESIZE", + /* 67 */ "COMP", + /* 68 */ "DURATION", + /* 69 */ "NK_VARIABLE", + /* 70 */ "MAXROWS", + /* 71 */ "MINROWS", + /* 72 */ "KEEP", + /* 73 */ "PAGES", + /* 74 */ "PAGESIZE", + /* 75 */ "TSDB_PAGESIZE", + /* 76 */ "PRECISION", + /* 77 */ "REPLICA", + /* 78 */ "STRICT", + /* 79 */ "VGROUPS", + /* 80 */ "SINGLE_STABLE", + /* 81 */ "RETENTIONS", + /* 82 */ "SCHEMALESS", + /* 83 */ "WAL_LEVEL", + /* 84 */ "WAL_FSYNC_PERIOD", + /* 85 */ "WAL_RETENTION_PERIOD", + /* 86 */ "WAL_RETENTION_SIZE", + /* 87 */ "WAL_ROLL_PERIOD", + /* 88 */ "WAL_SEGMENT_SIZE", + /* 89 */ "STT_TRIGGER", + /* 90 */ "TABLE_PREFIX", + /* 91 */ "TABLE_SUFFIX", + /* 92 */ "NK_COLON", + /* 93 */ "MAX_SPEED", + /* 94 */ "TABLE", + /* 95 */ "NK_LP", + /* 96 */ "NK_RP", + /* 97 */ "STABLE", + /* 98 */ "ADD", + /* 99 */ "COLUMN", + /* 100 */ "MODIFY", + /* 101 */ "RENAME", + /* 102 */ "TAG", + /* 103 */ "SET", + /* 104 */ "NK_EQ", + /* 105 */ "USING", + /* 106 */ "TAGS", + /* 107 */ "COMMENT", + /* 108 */ "BOOL", + /* 109 */ "TINYINT", + /* 110 */ "SMALLINT", + /* 111 */ "INT", + /* 112 */ "INTEGER", + /* 113 */ "BIGINT", + /* 114 */ "FLOAT", + /* 115 */ "DOUBLE", + /* 116 */ "BINARY", + /* 117 */ "TIMESTAMP", + /* 118 */ "NCHAR", + /* 119 */ "UNSIGNED", + /* 120 */ "JSON", + /* 121 */ "VARCHAR", + /* 122 */ "MEDIUMBLOB", + /* 123 */ "BLOB", + /* 124 */ "VARBINARY", + /* 125 */ "DECIMAL", + /* 126 */ "MAX_DELAY", + /* 127 */ "WATERMARK", + /* 128 */ "ROLLUP", + /* 129 */ "TTL", + /* 130 */ "SMA", + /* 131 */ "FIRST", + /* 132 */ "LAST", + /* 133 */ "SHOW", + /* 134 */ "DATABASES", + /* 135 */ "TABLES", + /* 136 */ "STABLES", + /* 137 */ "MNODES", + /* 138 */ "QNODES", + /* 139 */ "FUNCTIONS", + /* 140 */ "INDEXES", + /* 141 */ "ACCOUNTS", + /* 142 */ "APPS", + /* 143 */ "CONNECTIONS", + /* 144 */ "LICENCES", + /* 145 */ "GRANTS", + /* 146 */ "QUERIES", + /* 147 */ "SCORES", + /* 148 */ "TOPICS", + /* 149 */ "VARIABLES", + /* 150 */ "CLUSTER", + /* 151 */ "BNODES", + /* 152 */ "SNODES", + /* 153 */ "TRANSACTIONS", + /* 154 */ "DISTRIBUTED", + /* 155 */ "CONSUMERS", + /* 156 */ "SUBSCRIPTIONS", + /* 157 */ "VNODES", + /* 158 */ "LIKE", + /* 159 */ "INDEX", + /* 160 */ "FUNCTION", + /* 161 */ "INTERVAL", + /* 162 */ "TOPIC", + /* 163 */ "AS", + /* 164 */ "WITH", + /* 165 */ "META", + /* 166 */ "CONSUMER", + /* 167 */ "GROUP", + /* 168 */ "DESC", + /* 169 */ "DESCRIBE", + /* 170 */ "RESET", + /* 171 */ "QUERY", + /* 172 */ "CACHE", + /* 173 */ "EXPLAIN", + /* 174 */ "ANALYZE", + /* 175 */ "VERBOSE", + /* 176 */ "NK_BOOL", + /* 177 */ "RATIO", + /* 178 */ "NK_FLOAT", + /* 179 */ "OUTPUTTYPE", + /* 180 */ "AGGREGATE", + /* 181 */ "BUFSIZE", + /* 182 */ "STREAM", + /* 183 */ "INTO", + /* 184 */ "TRIGGER", + /* 185 */ "AT_ONCE", + /* 186 */ "WINDOW_CLOSE", + /* 187 */ "IGNORE", + /* 188 */ "EXPIRED", + /* 189 */ "FILL_HISTORY", + /* 190 */ "SUBTABLE", + /* 191 */ "KILL", + /* 192 */ "CONNECTION", + /* 193 */ "TRANSACTION", + /* 194 */ "BALANCE", + /* 195 */ "VGROUP", + /* 196 */ "MERGE", + /* 197 */ "REDISTRIBUTE", + /* 198 */ "SPLIT", + /* 199 */ "DELETE", + /* 200 */ "INSERT", + /* 201 */ "NULL", + /* 202 */ "NK_QUESTION", + /* 203 */ "NK_ARROW", + /* 204 */ "ROWTS", + /* 205 */ "TBNAME", + /* 206 */ "QSTART", + /* 207 */ "QEND", + /* 208 */ "QDURATION", + /* 209 */ "WSTART", + /* 210 */ "WEND", + /* 211 */ "WDURATION", + /* 212 */ "IROWTS", + /* 213 */ "QTAGS", + /* 214 */ "CAST", + /* 215 */ "NOW", + /* 216 */ "TODAY", + /* 217 */ "TIMEZONE", + /* 218 */ "CLIENT_VERSION", + /* 219 */ "SERVER_VERSION", + /* 220 */ "SERVER_STATUS", + /* 221 */ "CURRENT_USER", + /* 222 */ "COUNT", + /* 223 */ "LAST_ROW", + /* 224 */ "CASE", + /* 225 */ "END", + /* 226 */ "WHEN", + /* 227 */ "THEN", + /* 228 */ "ELSE", + /* 229 */ "BETWEEN", + /* 230 */ "IS", + /* 231 */ "NK_LT", + /* 232 */ "NK_GT", + /* 233 */ "NK_LE", + /* 234 */ "NK_GE", + /* 235 */ "NK_NE", + /* 236 */ "MATCH", + /* 237 */ "NMATCH", + /* 238 */ "CONTAINS", + /* 239 */ "IN", + /* 240 */ "JOIN", + /* 241 */ "INNER", + /* 242 */ "SELECT", + /* 243 */ "DISTINCT", + /* 244 */ "WHERE", + /* 245 */ "PARTITION", + /* 246 */ "BY", + /* 247 */ "SESSION", + /* 248 */ "STATE_WINDOW", + /* 249 */ "SLIDING", + /* 250 */ "FILL", + /* 251 */ "VALUE", + /* 252 */ "NONE", + /* 253 */ "PREV", + /* 254 */ "LINEAR", + /* 255 */ "NEXT", + /* 256 */ "HAVING", + /* 257 */ "RANGE", + /* 258 */ "EVERY", + /* 259 */ "ORDER", + /* 260 */ "SLIMIT", + /* 261 */ "SOFFSET", + /* 262 */ "LIMIT", + /* 263 */ "OFFSET", + /* 264 */ "ASC", + /* 265 */ "NULLS", + /* 266 */ "ABORT", + /* 267 */ "AFTER", + /* 268 */ "ATTACH", + /* 269 */ "BEFORE", + /* 270 */ "BEGIN", + /* 271 */ "BITAND", + /* 272 */ "BITNOT", + /* 273 */ "BITOR", + /* 274 */ "BLOCKS", + /* 275 */ "CHANGE", + /* 276 */ "COMMA", + /* 277 */ "COMPACT", + /* 278 */ "CONCAT", + /* 279 */ "CONFLICT", + /* 280 */ "COPY", + /* 281 */ "DEFERRED", + /* 282 */ "DELIMITERS", + /* 283 */ "DETACH", + /* 284 */ "DIVIDE", + /* 285 */ "DOT", + /* 286 */ "EACH", + /* 287 */ "FAIL", + /* 288 */ "FILE", + /* 289 */ "FOR", + /* 290 */ "GLOB", + /* 291 */ "ID", + /* 292 */ "IMMEDIATE", + /* 293 */ "IMPORT", + /* 294 */ "INITIALLY", + /* 295 */ "INSTEAD", + /* 296 */ "ISNULL", + /* 297 */ "KEY", + /* 298 */ "MODULES", + /* 299 */ "NK_BITNOT", + /* 300 */ "NK_SEMI", + /* 301 */ "NOTNULL", + /* 302 */ "OF", + /* 303 */ "PLUS", + /* 304 */ "PRIVILEGE", + /* 305 */ "RAISE", + /* 306 */ "REPLACE", + /* 307 */ "RESTRICT", + /* 308 */ "ROW", + /* 309 */ "SEMI", + /* 310 */ "STAR", + /* 311 */ "STATEMENT", + /* 312 */ "STRING", + /* 313 */ "TIMES", + /* 314 */ "UPDATE", + /* 315 */ "VALUES", + /* 316 */ "VARIABLE", + /* 317 */ "VIEW", + /* 318 */ "WAL", + /* 319 */ "cmd", + /* 320 */ "account_options", + /* 321 */ "alter_account_options", + /* 322 */ "literal", + /* 323 */ "alter_account_option", + /* 324 */ "user_name", + /* 325 */ "sysinfo_opt", + /* 326 */ "privileges", + /* 327 */ "priv_level", + /* 328 */ "priv_type_list", + /* 329 */ "priv_type", + /* 330 */ "db_name", + /* 331 */ "dnode_endpoint", + /* 332 */ "force_opt", + /* 333 */ "not_exists_opt", + /* 334 */ "db_options", + /* 335 */ "exists_opt", + /* 336 */ "alter_db_options", + /* 337 */ "speed_opt", + /* 338 */ "integer_list", + /* 339 */ "variable_list", + /* 340 */ "retention_list", + /* 341 */ "alter_db_option", + /* 342 */ "retention", + /* 343 */ "full_table_name", + /* 344 */ "column_def_list", + /* 345 */ "tags_def_opt", + /* 346 */ "table_options", + /* 347 */ "multi_create_clause", + /* 348 */ "tags_def", + /* 349 */ "multi_drop_clause", + /* 350 */ "alter_table_clause", + /* 351 */ "alter_table_options", + /* 352 */ "column_name", + /* 353 */ "type_name", + /* 354 */ "signed_literal", + /* 355 */ "create_subtable_clause", + /* 356 */ "specific_cols_opt", + /* 357 */ "expression_list", + /* 358 */ "drop_table_clause", + /* 359 */ "col_name_list", + /* 360 */ "table_name", + /* 361 */ "column_def", + /* 362 */ "duration_list", + /* 363 */ "rollup_func_list", + /* 364 */ "alter_table_option", + /* 365 */ "duration_literal", + /* 366 */ "rollup_func_name", + /* 367 */ "function_name", + /* 368 */ "col_name", + /* 369 */ "db_name_cond_opt", + /* 370 */ "like_pattern_opt", + /* 371 */ "table_name_cond", + /* 372 */ "from_db_opt", + /* 373 */ "index_options", + /* 374 */ "func_list", + /* 375 */ "sliding_opt", + /* 376 */ "sma_stream_opt", + /* 377 */ "func", + /* 378 */ "stream_options", + /* 379 */ "topic_name", + /* 380 */ "query_or_subquery", + /* 381 */ "cgroup_name", + /* 382 */ "analyze_opt", + /* 383 */ "explain_options", + /* 384 */ "agg_func_opt", + /* 385 */ "bufsize_opt", + /* 386 */ "stream_name", + /* 387 */ "subtable_opt", + /* 388 */ "expression", + /* 389 */ "dnode_list", + /* 390 */ "where_clause_opt", + /* 391 */ "signed", + /* 392 */ "literal_func", + /* 393 */ "literal_list", + /* 394 */ "table_alias", + /* 395 */ "column_alias", + /* 396 */ "expr_or_subquery", + /* 397 */ "subquery", + /* 398 */ "pseudo_column", + /* 399 */ "column_reference", + /* 400 */ "function_expression", + /* 401 */ "case_when_expression", + /* 402 */ "star_func", + /* 403 */ "star_func_para_list", + /* 404 */ "noarg_func", + /* 405 */ "other_para_list", + /* 406 */ "star_func_para", + /* 407 */ "when_then_list", + /* 408 */ "case_when_else_opt", + /* 409 */ "common_expression", + /* 410 */ "when_then_expr", + /* 411 */ "predicate", + /* 412 */ "compare_op", + /* 413 */ "in_op", + /* 414 */ "in_predicate_value", + /* 415 */ "boolean_value_expression", + /* 416 */ "boolean_primary", + /* 417 */ "from_clause_opt", + /* 418 */ "table_reference_list", + /* 419 */ "table_reference", + /* 420 */ "table_primary", + /* 421 */ "joined_table", + /* 422 */ "alias_opt", + /* 423 */ "parenthesized_joined_table", + /* 424 */ "join_type", + /* 425 */ "search_condition", + /* 426 */ "query_specification", + /* 427 */ "set_quantifier_opt", + /* 428 */ "select_list", + /* 429 */ "partition_by_clause_opt", + /* 430 */ "range_opt", + /* 431 */ "every_opt", + /* 432 */ "fill_opt", + /* 433 */ "twindow_clause_opt", + /* 434 */ "group_by_clause_opt", + /* 435 */ "having_clause_opt", + /* 436 */ "select_item", + /* 437 */ "partition_list", + /* 438 */ "partition_item", + /* 439 */ "fill_mode", + /* 440 */ "group_by_list", + /* 441 */ "query_expression", + /* 442 */ "query_simple", + /* 443 */ "order_by_clause_opt", + /* 444 */ "slimit_clause_opt", + /* 445 */ "limit_clause_opt", + /* 446 */ "union_query_expression", + /* 447 */ "query_simple_or_subquery", + /* 448 */ "sort_specification_list", + /* 449 */ "sort_specification", + /* 450 */ "ordering_specification_opt", + /* 451 */ "null_ordering_opt", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -1887,8 +1998,8 @@ static const char *const yyRuleName[] = { /* 40 */ "priv_level ::= db_name NK_DOT NK_STAR", /* 41 */ "cmd ::= CREATE DNODE dnode_endpoint", /* 42 */ "cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER", - /* 43 */ "cmd ::= DROP DNODE NK_INTEGER", - /* 44 */ "cmd ::= DROP DNODE dnode_endpoint", + /* 43 */ "cmd ::= DROP DNODE NK_INTEGER force_opt", + /* 44 */ "cmd ::= DROP DNODE dnode_endpoint force_opt", /* 45 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING", /* 46 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING", /* 47 */ "cmd ::= ALTER ALL DNODES NK_STRING", @@ -1896,480 +2007,482 @@ static const char *const yyRuleName[] = { /* 49 */ "dnode_endpoint ::= NK_STRING", /* 50 */ "dnode_endpoint ::= NK_ID", /* 51 */ "dnode_endpoint ::= NK_IPTOKEN", - /* 52 */ "cmd ::= ALTER LOCAL NK_STRING", - /* 53 */ "cmd ::= ALTER LOCAL NK_STRING NK_STRING", - /* 54 */ "cmd ::= CREATE QNODE ON DNODE NK_INTEGER", - /* 55 */ "cmd ::= DROP QNODE ON DNODE NK_INTEGER", - /* 56 */ "cmd ::= CREATE BNODE ON DNODE NK_INTEGER", - /* 57 */ "cmd ::= DROP BNODE ON DNODE NK_INTEGER", - /* 58 */ "cmd ::= CREATE SNODE ON DNODE NK_INTEGER", - /* 59 */ "cmd ::= DROP SNODE ON DNODE NK_INTEGER", - /* 60 */ "cmd ::= CREATE MNODE ON DNODE NK_INTEGER", - /* 61 */ "cmd ::= DROP MNODE ON DNODE NK_INTEGER", - /* 62 */ "cmd ::= CREATE DATABASE not_exists_opt db_name db_options", - /* 63 */ "cmd ::= DROP DATABASE exists_opt db_name", - /* 64 */ "cmd ::= USE db_name", - /* 65 */ "cmd ::= ALTER DATABASE db_name alter_db_options", - /* 66 */ "cmd ::= FLUSH DATABASE db_name", - /* 67 */ "cmd ::= TRIM DATABASE db_name speed_opt", - /* 68 */ "not_exists_opt ::= IF NOT EXISTS", - /* 69 */ "not_exists_opt ::=", - /* 70 */ "exists_opt ::= IF EXISTS", - /* 71 */ "exists_opt ::=", - /* 72 */ "db_options ::=", - /* 73 */ "db_options ::= db_options BUFFER NK_INTEGER", - /* 74 */ "db_options ::= db_options CACHEMODEL NK_STRING", - /* 75 */ "db_options ::= db_options CACHESIZE NK_INTEGER", - /* 76 */ "db_options ::= db_options COMP NK_INTEGER", - /* 77 */ "db_options ::= db_options DURATION NK_INTEGER", - /* 78 */ "db_options ::= db_options DURATION NK_VARIABLE", - /* 79 */ "db_options ::= db_options MAXROWS NK_INTEGER", - /* 80 */ "db_options ::= db_options MINROWS NK_INTEGER", - /* 81 */ "db_options ::= db_options KEEP integer_list", - /* 82 */ "db_options ::= db_options KEEP variable_list", - /* 83 */ "db_options ::= db_options PAGES NK_INTEGER", - /* 84 */ "db_options ::= db_options PAGESIZE NK_INTEGER", - /* 85 */ "db_options ::= db_options TSDB_PAGESIZE NK_INTEGER", - /* 86 */ "db_options ::= db_options PRECISION NK_STRING", - /* 87 */ "db_options ::= db_options REPLICA NK_INTEGER", - /* 88 */ "db_options ::= db_options STRICT NK_STRING", - /* 89 */ "db_options ::= db_options VGROUPS NK_INTEGER", - /* 90 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", - /* 91 */ "db_options ::= db_options RETENTIONS retention_list", - /* 92 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", - /* 93 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER", - /* 94 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER", - /* 95 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER", - /* 96 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", - /* 97 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER", - /* 98 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", - /* 99 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER", - /* 100 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER", - /* 101 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER", - /* 102 */ "db_options ::= db_options TABLE_PREFIX NK_INTEGER", - /* 103 */ "db_options ::= db_options TABLE_SUFFIX NK_INTEGER", - /* 104 */ "alter_db_options ::= alter_db_option", - /* 105 */ "alter_db_options ::= alter_db_options alter_db_option", - /* 106 */ "alter_db_option ::= BUFFER NK_INTEGER", - /* 107 */ "alter_db_option ::= CACHEMODEL NK_STRING", - /* 108 */ "alter_db_option ::= CACHESIZE NK_INTEGER", - /* 109 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER", - /* 110 */ "alter_db_option ::= KEEP integer_list", - /* 111 */ "alter_db_option ::= KEEP variable_list", - /* 112 */ "alter_db_option ::= PAGES NK_INTEGER", - /* 113 */ "alter_db_option ::= REPLICA NK_INTEGER", - /* 114 */ "alter_db_option ::= STRICT NK_STRING", - /* 115 */ "alter_db_option ::= WAL_LEVEL NK_INTEGER", - /* 116 */ "alter_db_option ::= STT_TRIGGER NK_INTEGER", - /* 117 */ "integer_list ::= NK_INTEGER", - /* 118 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER", - /* 119 */ "variable_list ::= NK_VARIABLE", - /* 120 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE", - /* 121 */ "retention_list ::= retention", - /* 122 */ "retention_list ::= retention_list NK_COMMA retention", - /* 123 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE", - /* 124 */ "speed_opt ::=", - /* 125 */ "speed_opt ::= MAX_SPEED NK_INTEGER", - /* 126 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options", - /* 127 */ "cmd ::= CREATE TABLE multi_create_clause", - /* 128 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options", - /* 129 */ "cmd ::= DROP TABLE multi_drop_clause", - /* 130 */ "cmd ::= DROP STABLE exists_opt full_table_name", - /* 131 */ "cmd ::= ALTER TABLE alter_table_clause", - /* 132 */ "cmd ::= ALTER STABLE alter_table_clause", - /* 133 */ "alter_table_clause ::= full_table_name alter_table_options", - /* 134 */ "alter_table_clause ::= full_table_name ADD COLUMN column_name type_name", - /* 135 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name", - /* 136 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name", - /* 137 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name", - /* 138 */ "alter_table_clause ::= full_table_name ADD TAG column_name type_name", - /* 139 */ "alter_table_clause ::= full_table_name DROP TAG column_name", - /* 140 */ "alter_table_clause ::= full_table_name MODIFY TAG column_name type_name", - /* 141 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name", - /* 142 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal", - /* 143 */ "multi_create_clause ::= create_subtable_clause", - /* 144 */ "multi_create_clause ::= multi_create_clause create_subtable_clause", - /* 145 */ "create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options", - /* 146 */ "multi_drop_clause ::= drop_table_clause", - /* 147 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause", - /* 148 */ "drop_table_clause ::= exists_opt full_table_name", - /* 149 */ "specific_cols_opt ::=", - /* 150 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP", - /* 151 */ "full_table_name ::= table_name", - /* 152 */ "full_table_name ::= db_name NK_DOT table_name", - /* 153 */ "column_def_list ::= column_def", - /* 154 */ "column_def_list ::= column_def_list NK_COMMA column_def", - /* 155 */ "column_def ::= column_name type_name", - /* 156 */ "column_def ::= column_name type_name COMMENT NK_STRING", - /* 157 */ "type_name ::= BOOL", - /* 158 */ "type_name ::= TINYINT", - /* 159 */ "type_name ::= SMALLINT", - /* 160 */ "type_name ::= INT", - /* 161 */ "type_name ::= INTEGER", - /* 162 */ "type_name ::= BIGINT", - /* 163 */ "type_name ::= FLOAT", - /* 164 */ "type_name ::= DOUBLE", - /* 165 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP", - /* 166 */ "type_name ::= TIMESTAMP", - /* 167 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP", - /* 168 */ "type_name ::= TINYINT UNSIGNED", - /* 169 */ "type_name ::= SMALLINT UNSIGNED", - /* 170 */ "type_name ::= INT UNSIGNED", - /* 171 */ "type_name ::= BIGINT UNSIGNED", - /* 172 */ "type_name ::= JSON", - /* 173 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP", - /* 174 */ "type_name ::= MEDIUMBLOB", - /* 175 */ "type_name ::= BLOB", - /* 176 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP", - /* 177 */ "type_name ::= DECIMAL", - /* 178 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP", - /* 179 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP", - /* 180 */ "tags_def_opt ::=", - /* 181 */ "tags_def_opt ::= tags_def", - /* 182 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP", - /* 183 */ "table_options ::=", - /* 184 */ "table_options ::= table_options COMMENT NK_STRING", - /* 185 */ "table_options ::= table_options MAX_DELAY duration_list", - /* 186 */ "table_options ::= table_options WATERMARK duration_list", - /* 187 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP", - /* 188 */ "table_options ::= table_options TTL NK_INTEGER", - /* 189 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP", - /* 190 */ "alter_table_options ::= alter_table_option", - /* 191 */ "alter_table_options ::= alter_table_options alter_table_option", - /* 192 */ "alter_table_option ::= COMMENT NK_STRING", - /* 193 */ "alter_table_option ::= TTL NK_INTEGER", - /* 194 */ "duration_list ::= duration_literal", - /* 195 */ "duration_list ::= duration_list NK_COMMA duration_literal", - /* 196 */ "rollup_func_list ::= rollup_func_name", - /* 197 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", - /* 198 */ "rollup_func_name ::= function_name", - /* 199 */ "rollup_func_name ::= FIRST", - /* 200 */ "rollup_func_name ::= LAST", - /* 201 */ "col_name_list ::= col_name", - /* 202 */ "col_name_list ::= col_name_list NK_COMMA col_name", - /* 203 */ "col_name ::= column_name", - /* 204 */ "cmd ::= SHOW DNODES", - /* 205 */ "cmd ::= SHOW USERS", - /* 206 */ "cmd ::= SHOW DATABASES", - /* 207 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", - /* 208 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", - /* 209 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", - /* 210 */ "cmd ::= SHOW MNODES", - /* 211 */ "cmd ::= SHOW QNODES", - /* 212 */ "cmd ::= SHOW FUNCTIONS", - /* 213 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", - /* 214 */ "cmd ::= SHOW STREAMS", - /* 215 */ "cmd ::= SHOW ACCOUNTS", - /* 216 */ "cmd ::= SHOW APPS", - /* 217 */ "cmd ::= SHOW CONNECTIONS", - /* 218 */ "cmd ::= SHOW LICENCES", - /* 219 */ "cmd ::= SHOW GRANTS", - /* 220 */ "cmd ::= SHOW CREATE DATABASE db_name", - /* 221 */ "cmd ::= SHOW CREATE TABLE full_table_name", - /* 222 */ "cmd ::= SHOW CREATE STABLE full_table_name", - /* 223 */ "cmd ::= SHOW QUERIES", - /* 224 */ "cmd ::= SHOW SCORES", - /* 225 */ "cmd ::= SHOW TOPICS", - /* 226 */ "cmd ::= SHOW VARIABLES", - /* 227 */ "cmd ::= SHOW CLUSTER VARIABLES", - /* 228 */ "cmd ::= SHOW LOCAL VARIABLES", - /* 229 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt", - /* 230 */ "cmd ::= SHOW BNODES", - /* 231 */ "cmd ::= SHOW SNODES", - /* 232 */ "cmd ::= SHOW CLUSTER", - /* 233 */ "cmd ::= SHOW TRANSACTIONS", - /* 234 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", - /* 235 */ "cmd ::= SHOW CONSUMERS", - /* 236 */ "cmd ::= SHOW SUBSCRIPTIONS", - /* 237 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt", - /* 238 */ "cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt", - /* 239 */ "cmd ::= SHOW VNODES NK_INTEGER", - /* 240 */ "cmd ::= SHOW VNODES NK_STRING", - /* 241 */ "db_name_cond_opt ::=", - /* 242 */ "db_name_cond_opt ::= db_name NK_DOT", - /* 243 */ "like_pattern_opt ::=", - /* 244 */ "like_pattern_opt ::= LIKE NK_STRING", - /* 245 */ "table_name_cond ::= table_name", - /* 246 */ "from_db_opt ::=", - /* 247 */ "from_db_opt ::= FROM db_name", - /* 248 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options", - /* 249 */ "cmd ::= DROP INDEX exists_opt full_table_name", - /* 250 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", - /* 251 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt", - /* 252 */ "func_list ::= func", - /* 253 */ "func_list ::= func_list NK_COMMA func", - /* 254 */ "func ::= function_name NK_LP expression_list NK_RP", - /* 255 */ "sma_stream_opt ::=", - /* 256 */ "sma_stream_opt ::= stream_options WATERMARK duration_literal", - /* 257 */ "sma_stream_opt ::= stream_options MAX_DELAY duration_literal", - /* 258 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery", - /* 259 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name", - /* 260 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name", - /* 261 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name", - /* 262 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name", - /* 263 */ "cmd ::= DROP TOPIC exists_opt topic_name", - /* 264 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", - /* 265 */ "cmd ::= DESC full_table_name", - /* 266 */ "cmd ::= DESCRIBE full_table_name", - /* 267 */ "cmd ::= RESET QUERY CACHE", - /* 268 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery", - /* 269 */ "analyze_opt ::=", - /* 270 */ "analyze_opt ::= ANALYZE", - /* 271 */ "explain_options ::=", - /* 272 */ "explain_options ::= explain_options VERBOSE NK_BOOL", - /* 273 */ "explain_options ::= explain_options RATIO NK_FLOAT", - /* 274 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt", - /* 275 */ "cmd ::= DROP FUNCTION exists_opt function_name", - /* 276 */ "agg_func_opt ::=", - /* 277 */ "agg_func_opt ::= AGGREGATE", - /* 278 */ "bufsize_opt ::=", - /* 279 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", - /* 280 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery", - /* 281 */ "cmd ::= DROP STREAM exists_opt stream_name", - /* 282 */ "stream_options ::=", - /* 283 */ "stream_options ::= stream_options TRIGGER AT_ONCE", - /* 284 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", - /* 285 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", - /* 286 */ "stream_options ::= stream_options WATERMARK duration_literal", - /* 287 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER", - /* 288 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER", - /* 289 */ "subtable_opt ::=", - /* 290 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", - /* 291 */ "cmd ::= KILL CONNECTION NK_INTEGER", - /* 292 */ "cmd ::= KILL QUERY NK_STRING", - /* 293 */ "cmd ::= KILL TRANSACTION NK_INTEGER", - /* 294 */ "cmd ::= BALANCE VGROUP", - /* 295 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", - /* 296 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", - /* 297 */ "cmd ::= SPLIT VGROUP NK_INTEGER", - /* 298 */ "dnode_list ::= DNODE NK_INTEGER", - /* 299 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", - /* 300 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", - /* 301 */ "cmd ::= query_or_subquery", - /* 302 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", - /* 303 */ "cmd ::= INSERT INTO full_table_name query_or_subquery", - /* 304 */ "literal ::= NK_INTEGER", - /* 305 */ "literal ::= NK_FLOAT", - /* 306 */ "literal ::= NK_STRING", - /* 307 */ "literal ::= NK_BOOL", - /* 308 */ "literal ::= TIMESTAMP NK_STRING", - /* 309 */ "literal ::= duration_literal", - /* 310 */ "literal ::= NULL", - /* 311 */ "literal ::= NK_QUESTION", - /* 312 */ "duration_literal ::= NK_VARIABLE", - /* 313 */ "signed ::= NK_INTEGER", - /* 314 */ "signed ::= NK_PLUS NK_INTEGER", - /* 315 */ "signed ::= NK_MINUS NK_INTEGER", - /* 316 */ "signed ::= NK_FLOAT", - /* 317 */ "signed ::= NK_PLUS NK_FLOAT", - /* 318 */ "signed ::= NK_MINUS NK_FLOAT", - /* 319 */ "signed_literal ::= signed", - /* 320 */ "signed_literal ::= NK_STRING", - /* 321 */ "signed_literal ::= NK_BOOL", - /* 322 */ "signed_literal ::= TIMESTAMP NK_STRING", - /* 323 */ "signed_literal ::= duration_literal", - /* 324 */ "signed_literal ::= NULL", - /* 325 */ "signed_literal ::= literal_func", - /* 326 */ "signed_literal ::= NK_QUESTION", - /* 327 */ "literal_list ::= signed_literal", - /* 328 */ "literal_list ::= literal_list NK_COMMA signed_literal", - /* 329 */ "db_name ::= NK_ID", - /* 330 */ "table_name ::= NK_ID", - /* 331 */ "column_name ::= NK_ID", - /* 332 */ "function_name ::= NK_ID", - /* 333 */ "table_alias ::= NK_ID", - /* 334 */ "column_alias ::= NK_ID", - /* 335 */ "user_name ::= NK_ID", - /* 336 */ "topic_name ::= NK_ID", - /* 337 */ "stream_name ::= NK_ID", - /* 338 */ "cgroup_name ::= NK_ID", - /* 339 */ "expr_or_subquery ::= expression", - /* 340 */ "expr_or_subquery ::= subquery", - /* 341 */ "expression ::= literal", - /* 342 */ "expression ::= pseudo_column", - /* 343 */ "expression ::= column_reference", - /* 344 */ "expression ::= function_expression", - /* 345 */ "expression ::= case_when_expression", - /* 346 */ "expression ::= NK_LP expression NK_RP", - /* 347 */ "expression ::= NK_PLUS expr_or_subquery", - /* 348 */ "expression ::= NK_MINUS expr_or_subquery", - /* 349 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", - /* 350 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", - /* 351 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", - /* 352 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", - /* 353 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", - /* 354 */ "expression ::= column_reference NK_ARROW NK_STRING", - /* 355 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", - /* 356 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", - /* 357 */ "expression_list ::= expr_or_subquery", - /* 358 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", - /* 359 */ "column_reference ::= column_name", - /* 360 */ "column_reference ::= table_name NK_DOT column_name", - /* 361 */ "pseudo_column ::= ROWTS", - /* 362 */ "pseudo_column ::= TBNAME", - /* 363 */ "pseudo_column ::= table_name NK_DOT TBNAME", - /* 364 */ "pseudo_column ::= QSTART", - /* 365 */ "pseudo_column ::= QEND", - /* 366 */ "pseudo_column ::= QDURATION", - /* 367 */ "pseudo_column ::= WSTART", - /* 368 */ "pseudo_column ::= WEND", - /* 369 */ "pseudo_column ::= WDURATION", - /* 370 */ "pseudo_column ::= IROWTS", - /* 371 */ "pseudo_column ::= QTAGS", - /* 372 */ "function_expression ::= function_name NK_LP expression_list NK_RP", - /* 373 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", - /* 374 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", - /* 375 */ "function_expression ::= literal_func", - /* 376 */ "literal_func ::= noarg_func NK_LP NK_RP", - /* 377 */ "literal_func ::= NOW", - /* 378 */ "noarg_func ::= NOW", - /* 379 */ "noarg_func ::= TODAY", - /* 380 */ "noarg_func ::= TIMEZONE", - /* 381 */ "noarg_func ::= DATABASE", - /* 382 */ "noarg_func ::= CLIENT_VERSION", - /* 383 */ "noarg_func ::= SERVER_VERSION", - /* 384 */ "noarg_func ::= SERVER_STATUS", - /* 385 */ "noarg_func ::= CURRENT_USER", - /* 386 */ "noarg_func ::= USER", - /* 387 */ "star_func ::= COUNT", - /* 388 */ "star_func ::= FIRST", - /* 389 */ "star_func ::= LAST", - /* 390 */ "star_func ::= LAST_ROW", - /* 391 */ "star_func_para_list ::= NK_STAR", - /* 392 */ "star_func_para_list ::= other_para_list", - /* 393 */ "other_para_list ::= star_func_para", - /* 394 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", - /* 395 */ "star_func_para ::= expr_or_subquery", - /* 396 */ "star_func_para ::= table_name NK_DOT NK_STAR", - /* 397 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", - /* 398 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", - /* 399 */ "when_then_list ::= when_then_expr", - /* 400 */ "when_then_list ::= when_then_list when_then_expr", - /* 401 */ "when_then_expr ::= WHEN common_expression THEN common_expression", - /* 402 */ "case_when_else_opt ::=", - /* 403 */ "case_when_else_opt ::= ELSE common_expression", - /* 404 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", - /* 405 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", - /* 406 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", - /* 407 */ "predicate ::= expr_or_subquery IS NULL", - /* 408 */ "predicate ::= expr_or_subquery IS NOT NULL", - /* 409 */ "predicate ::= expr_or_subquery in_op in_predicate_value", - /* 410 */ "compare_op ::= NK_LT", - /* 411 */ "compare_op ::= NK_GT", - /* 412 */ "compare_op ::= NK_LE", - /* 413 */ "compare_op ::= NK_GE", - /* 414 */ "compare_op ::= NK_NE", - /* 415 */ "compare_op ::= NK_EQ", - /* 416 */ "compare_op ::= LIKE", - /* 417 */ "compare_op ::= NOT LIKE", - /* 418 */ "compare_op ::= MATCH", - /* 419 */ "compare_op ::= NMATCH", - /* 420 */ "compare_op ::= CONTAINS", - /* 421 */ "in_op ::= IN", - /* 422 */ "in_op ::= NOT IN", - /* 423 */ "in_predicate_value ::= NK_LP literal_list NK_RP", - /* 424 */ "boolean_value_expression ::= boolean_primary", - /* 425 */ "boolean_value_expression ::= NOT boolean_primary", - /* 426 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", - /* 427 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", - /* 428 */ "boolean_primary ::= predicate", - /* 429 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", - /* 430 */ "common_expression ::= expr_or_subquery", - /* 431 */ "common_expression ::= boolean_value_expression", - /* 432 */ "from_clause_opt ::=", - /* 433 */ "from_clause_opt ::= FROM table_reference_list", - /* 434 */ "table_reference_list ::= table_reference", - /* 435 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", - /* 436 */ "table_reference ::= table_primary", - /* 437 */ "table_reference ::= joined_table", - /* 438 */ "table_primary ::= table_name alias_opt", - /* 439 */ "table_primary ::= db_name NK_DOT table_name alias_opt", - /* 440 */ "table_primary ::= subquery alias_opt", - /* 441 */ "table_primary ::= parenthesized_joined_table", - /* 442 */ "alias_opt ::=", - /* 443 */ "alias_opt ::= table_alias", - /* 444 */ "alias_opt ::= AS table_alias", - /* 445 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", - /* 446 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", - /* 447 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", - /* 448 */ "join_type ::=", - /* 449 */ "join_type ::= INNER", - /* 450 */ "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", - /* 451 */ "set_quantifier_opt ::=", - /* 452 */ "set_quantifier_opt ::= DISTINCT", - /* 453 */ "set_quantifier_opt ::= ALL", - /* 454 */ "select_list ::= select_item", - /* 455 */ "select_list ::= select_list NK_COMMA select_item", - /* 456 */ "select_item ::= NK_STAR", - /* 457 */ "select_item ::= common_expression", - /* 458 */ "select_item ::= common_expression column_alias", - /* 459 */ "select_item ::= common_expression AS column_alias", - /* 460 */ "select_item ::= table_name NK_DOT NK_STAR", - /* 461 */ "where_clause_opt ::=", - /* 462 */ "where_clause_opt ::= WHERE search_condition", - /* 463 */ "partition_by_clause_opt ::=", - /* 464 */ "partition_by_clause_opt ::= PARTITION BY partition_list", - /* 465 */ "partition_list ::= partition_item", - /* 466 */ "partition_list ::= partition_list NK_COMMA partition_item", - /* 467 */ "partition_item ::= expr_or_subquery", - /* 468 */ "partition_item ::= expr_or_subquery column_alias", - /* 469 */ "partition_item ::= expr_or_subquery AS column_alias", - /* 470 */ "twindow_clause_opt ::=", - /* 471 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", - /* 472 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", - /* 473 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", - /* 474 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", - /* 475 */ "sliding_opt ::=", - /* 476 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", - /* 477 */ "fill_opt ::=", - /* 478 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", - /* 479 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", - /* 480 */ "fill_mode ::= NONE", - /* 481 */ "fill_mode ::= PREV", - /* 482 */ "fill_mode ::= NULL", - /* 483 */ "fill_mode ::= LINEAR", - /* 484 */ "fill_mode ::= NEXT", - /* 485 */ "group_by_clause_opt ::=", - /* 486 */ "group_by_clause_opt ::= GROUP BY group_by_list", - /* 487 */ "group_by_list ::= expr_or_subquery", - /* 488 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", - /* 489 */ "having_clause_opt ::=", - /* 490 */ "having_clause_opt ::= HAVING search_condition", - /* 491 */ "range_opt ::=", - /* 492 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", - /* 493 */ "every_opt ::=", - /* 494 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", - /* 495 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", - /* 496 */ "query_simple ::= query_specification", - /* 497 */ "query_simple ::= union_query_expression", - /* 498 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", - /* 499 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", - /* 500 */ "query_simple_or_subquery ::= query_simple", - /* 501 */ "query_simple_or_subquery ::= subquery", - /* 502 */ "query_or_subquery ::= query_expression", - /* 503 */ "query_or_subquery ::= subquery", - /* 504 */ "order_by_clause_opt ::=", - /* 505 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", - /* 506 */ "slimit_clause_opt ::=", - /* 507 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", - /* 508 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", - /* 509 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 510 */ "limit_clause_opt ::=", - /* 511 */ "limit_clause_opt ::= LIMIT NK_INTEGER", - /* 512 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", - /* 513 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 514 */ "subquery ::= NK_LP query_expression NK_RP", - /* 515 */ "subquery ::= NK_LP subquery NK_RP", - /* 516 */ "search_condition ::= common_expression", - /* 517 */ "sort_specification_list ::= sort_specification", - /* 518 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", - /* 519 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", - /* 520 */ "ordering_specification_opt ::=", - /* 521 */ "ordering_specification_opt ::= ASC", - /* 522 */ "ordering_specification_opt ::= DESC", - /* 523 */ "null_ordering_opt ::=", - /* 524 */ "null_ordering_opt ::= NULLS FIRST", - /* 525 */ "null_ordering_opt ::= NULLS LAST", + /* 52 */ "force_opt ::=", + /* 53 */ "force_opt ::= FORCE", + /* 54 */ "cmd ::= ALTER LOCAL NK_STRING", + /* 55 */ "cmd ::= ALTER LOCAL NK_STRING NK_STRING", + /* 56 */ "cmd ::= CREATE QNODE ON DNODE NK_INTEGER", + /* 57 */ "cmd ::= DROP QNODE ON DNODE NK_INTEGER", + /* 58 */ "cmd ::= CREATE BNODE ON DNODE NK_INTEGER", + /* 59 */ "cmd ::= DROP BNODE ON DNODE NK_INTEGER", + /* 60 */ "cmd ::= CREATE SNODE ON DNODE NK_INTEGER", + /* 61 */ "cmd ::= DROP SNODE ON DNODE NK_INTEGER", + /* 62 */ "cmd ::= CREATE MNODE ON DNODE NK_INTEGER", + /* 63 */ "cmd ::= DROP MNODE ON DNODE NK_INTEGER", + /* 64 */ "cmd ::= CREATE DATABASE not_exists_opt db_name db_options", + /* 65 */ "cmd ::= DROP DATABASE exists_opt db_name", + /* 66 */ "cmd ::= USE db_name", + /* 67 */ "cmd ::= ALTER DATABASE db_name alter_db_options", + /* 68 */ "cmd ::= FLUSH DATABASE db_name", + /* 69 */ "cmd ::= TRIM DATABASE db_name speed_opt", + /* 70 */ "not_exists_opt ::= IF NOT EXISTS", + /* 71 */ "not_exists_opt ::=", + /* 72 */ "exists_opt ::= IF EXISTS", + /* 73 */ "exists_opt ::=", + /* 74 */ "db_options ::=", + /* 75 */ "db_options ::= db_options BUFFER NK_INTEGER", + /* 76 */ "db_options ::= db_options CACHEMODEL NK_STRING", + /* 77 */ "db_options ::= db_options CACHESIZE NK_INTEGER", + /* 78 */ "db_options ::= db_options COMP NK_INTEGER", + /* 79 */ "db_options ::= db_options DURATION NK_INTEGER", + /* 80 */ "db_options ::= db_options DURATION NK_VARIABLE", + /* 81 */ "db_options ::= db_options MAXROWS NK_INTEGER", + /* 82 */ "db_options ::= db_options MINROWS NK_INTEGER", + /* 83 */ "db_options ::= db_options KEEP integer_list", + /* 84 */ "db_options ::= db_options KEEP variable_list", + /* 85 */ "db_options ::= db_options PAGES NK_INTEGER", + /* 86 */ "db_options ::= db_options PAGESIZE NK_INTEGER", + /* 87 */ "db_options ::= db_options TSDB_PAGESIZE NK_INTEGER", + /* 88 */ "db_options ::= db_options PRECISION NK_STRING", + /* 89 */ "db_options ::= db_options REPLICA NK_INTEGER", + /* 90 */ "db_options ::= db_options STRICT NK_STRING", + /* 91 */ "db_options ::= db_options VGROUPS NK_INTEGER", + /* 92 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", + /* 93 */ "db_options ::= db_options RETENTIONS retention_list", + /* 94 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", + /* 95 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER", + /* 96 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER", + /* 97 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER", + /* 98 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", + /* 99 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER", + /* 100 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", + /* 101 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER", + /* 102 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER", + /* 103 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER", + /* 104 */ "db_options ::= db_options TABLE_PREFIX NK_INTEGER", + /* 105 */ "db_options ::= db_options TABLE_SUFFIX NK_INTEGER", + /* 106 */ "alter_db_options ::= alter_db_option", + /* 107 */ "alter_db_options ::= alter_db_options alter_db_option", + /* 108 */ "alter_db_option ::= BUFFER NK_INTEGER", + /* 109 */ "alter_db_option ::= CACHEMODEL NK_STRING", + /* 110 */ "alter_db_option ::= CACHESIZE NK_INTEGER", + /* 111 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER", + /* 112 */ "alter_db_option ::= KEEP integer_list", + /* 113 */ "alter_db_option ::= KEEP variable_list", + /* 114 */ "alter_db_option ::= PAGES NK_INTEGER", + /* 115 */ "alter_db_option ::= REPLICA NK_INTEGER", + /* 116 */ "alter_db_option ::= STRICT NK_STRING", + /* 117 */ "alter_db_option ::= WAL_LEVEL NK_INTEGER", + /* 118 */ "alter_db_option ::= STT_TRIGGER NK_INTEGER", + /* 119 */ "integer_list ::= NK_INTEGER", + /* 120 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER", + /* 121 */ "variable_list ::= NK_VARIABLE", + /* 122 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE", + /* 123 */ "retention_list ::= retention", + /* 124 */ "retention_list ::= retention_list NK_COMMA retention", + /* 125 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE", + /* 126 */ "speed_opt ::=", + /* 127 */ "speed_opt ::= MAX_SPEED NK_INTEGER", + /* 128 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options", + /* 129 */ "cmd ::= CREATE TABLE multi_create_clause", + /* 130 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options", + /* 131 */ "cmd ::= DROP TABLE multi_drop_clause", + /* 132 */ "cmd ::= DROP STABLE exists_opt full_table_name", + /* 133 */ "cmd ::= ALTER TABLE alter_table_clause", + /* 134 */ "cmd ::= ALTER STABLE alter_table_clause", + /* 135 */ "alter_table_clause ::= full_table_name alter_table_options", + /* 136 */ "alter_table_clause ::= full_table_name ADD COLUMN column_name type_name", + /* 137 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name", + /* 138 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name", + /* 139 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name", + /* 140 */ "alter_table_clause ::= full_table_name ADD TAG column_name type_name", + /* 141 */ "alter_table_clause ::= full_table_name DROP TAG column_name", + /* 142 */ "alter_table_clause ::= full_table_name MODIFY TAG column_name type_name", + /* 143 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name", + /* 144 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal", + /* 145 */ "multi_create_clause ::= create_subtable_clause", + /* 146 */ "multi_create_clause ::= multi_create_clause create_subtable_clause", + /* 147 */ "create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options", + /* 148 */ "multi_drop_clause ::= drop_table_clause", + /* 149 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause", + /* 150 */ "drop_table_clause ::= exists_opt full_table_name", + /* 151 */ "specific_cols_opt ::=", + /* 152 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP", + /* 153 */ "full_table_name ::= table_name", + /* 154 */ "full_table_name ::= db_name NK_DOT table_name", + /* 155 */ "column_def_list ::= column_def", + /* 156 */ "column_def_list ::= column_def_list NK_COMMA column_def", + /* 157 */ "column_def ::= column_name type_name", + /* 158 */ "column_def ::= column_name type_name COMMENT NK_STRING", + /* 159 */ "type_name ::= BOOL", + /* 160 */ "type_name ::= TINYINT", + /* 161 */ "type_name ::= SMALLINT", + /* 162 */ "type_name ::= INT", + /* 163 */ "type_name ::= INTEGER", + /* 164 */ "type_name ::= BIGINT", + /* 165 */ "type_name ::= FLOAT", + /* 166 */ "type_name ::= DOUBLE", + /* 167 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP", + /* 168 */ "type_name ::= TIMESTAMP", + /* 169 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP", + /* 170 */ "type_name ::= TINYINT UNSIGNED", + /* 171 */ "type_name ::= SMALLINT UNSIGNED", + /* 172 */ "type_name ::= INT UNSIGNED", + /* 173 */ "type_name ::= BIGINT UNSIGNED", + /* 174 */ "type_name ::= JSON", + /* 175 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP", + /* 176 */ "type_name ::= MEDIUMBLOB", + /* 177 */ "type_name ::= BLOB", + /* 178 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP", + /* 179 */ "type_name ::= DECIMAL", + /* 180 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP", + /* 181 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP", + /* 182 */ "tags_def_opt ::=", + /* 183 */ "tags_def_opt ::= tags_def", + /* 184 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP", + /* 185 */ "table_options ::=", + /* 186 */ "table_options ::= table_options COMMENT NK_STRING", + /* 187 */ "table_options ::= table_options MAX_DELAY duration_list", + /* 188 */ "table_options ::= table_options WATERMARK duration_list", + /* 189 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP", + /* 190 */ "table_options ::= table_options TTL NK_INTEGER", + /* 191 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP", + /* 192 */ "alter_table_options ::= alter_table_option", + /* 193 */ "alter_table_options ::= alter_table_options alter_table_option", + /* 194 */ "alter_table_option ::= COMMENT NK_STRING", + /* 195 */ "alter_table_option ::= TTL NK_INTEGER", + /* 196 */ "duration_list ::= duration_literal", + /* 197 */ "duration_list ::= duration_list NK_COMMA duration_literal", + /* 198 */ "rollup_func_list ::= rollup_func_name", + /* 199 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", + /* 200 */ "rollup_func_name ::= function_name", + /* 201 */ "rollup_func_name ::= FIRST", + /* 202 */ "rollup_func_name ::= LAST", + /* 203 */ "col_name_list ::= col_name", + /* 204 */ "col_name_list ::= col_name_list NK_COMMA col_name", + /* 205 */ "col_name ::= column_name", + /* 206 */ "cmd ::= SHOW DNODES", + /* 207 */ "cmd ::= SHOW USERS", + /* 208 */ "cmd ::= SHOW DATABASES", + /* 209 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", + /* 210 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", + /* 211 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", + /* 212 */ "cmd ::= SHOW MNODES", + /* 213 */ "cmd ::= SHOW QNODES", + /* 214 */ "cmd ::= SHOW FUNCTIONS", + /* 215 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", + /* 216 */ "cmd ::= SHOW STREAMS", + /* 217 */ "cmd ::= SHOW ACCOUNTS", + /* 218 */ "cmd ::= SHOW APPS", + /* 219 */ "cmd ::= SHOW CONNECTIONS", + /* 220 */ "cmd ::= SHOW LICENCES", + /* 221 */ "cmd ::= SHOW GRANTS", + /* 222 */ "cmd ::= SHOW CREATE DATABASE db_name", + /* 223 */ "cmd ::= SHOW CREATE TABLE full_table_name", + /* 224 */ "cmd ::= SHOW CREATE STABLE full_table_name", + /* 225 */ "cmd ::= SHOW QUERIES", + /* 226 */ "cmd ::= SHOW SCORES", + /* 227 */ "cmd ::= SHOW TOPICS", + /* 228 */ "cmd ::= SHOW VARIABLES", + /* 229 */ "cmd ::= SHOW CLUSTER VARIABLES", + /* 230 */ "cmd ::= SHOW LOCAL VARIABLES", + /* 231 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt", + /* 232 */ "cmd ::= SHOW BNODES", + /* 233 */ "cmd ::= SHOW SNODES", + /* 234 */ "cmd ::= SHOW CLUSTER", + /* 235 */ "cmd ::= SHOW TRANSACTIONS", + /* 236 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", + /* 237 */ "cmd ::= SHOW CONSUMERS", + /* 238 */ "cmd ::= SHOW SUBSCRIPTIONS", + /* 239 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt", + /* 240 */ "cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt", + /* 241 */ "cmd ::= SHOW VNODES NK_INTEGER", + /* 242 */ "cmd ::= SHOW VNODES NK_STRING", + /* 243 */ "db_name_cond_opt ::=", + /* 244 */ "db_name_cond_opt ::= db_name NK_DOT", + /* 245 */ "like_pattern_opt ::=", + /* 246 */ "like_pattern_opt ::= LIKE NK_STRING", + /* 247 */ "table_name_cond ::= table_name", + /* 248 */ "from_db_opt ::=", + /* 249 */ "from_db_opt ::= FROM db_name", + /* 250 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options", + /* 251 */ "cmd ::= DROP INDEX exists_opt full_table_name", + /* 252 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", + /* 253 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt", + /* 254 */ "func_list ::= func", + /* 255 */ "func_list ::= func_list NK_COMMA func", + /* 256 */ "func ::= function_name NK_LP expression_list NK_RP", + /* 257 */ "sma_stream_opt ::=", + /* 258 */ "sma_stream_opt ::= stream_options WATERMARK duration_literal", + /* 259 */ "sma_stream_opt ::= stream_options MAX_DELAY duration_literal", + /* 260 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery", + /* 261 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name", + /* 262 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name", + /* 263 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name", + /* 264 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name", + /* 265 */ "cmd ::= DROP TOPIC exists_opt topic_name", + /* 266 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", + /* 267 */ "cmd ::= DESC full_table_name", + /* 268 */ "cmd ::= DESCRIBE full_table_name", + /* 269 */ "cmd ::= RESET QUERY CACHE", + /* 270 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery", + /* 271 */ "analyze_opt ::=", + /* 272 */ "analyze_opt ::= ANALYZE", + /* 273 */ "explain_options ::=", + /* 274 */ "explain_options ::= explain_options VERBOSE NK_BOOL", + /* 275 */ "explain_options ::= explain_options RATIO NK_FLOAT", + /* 276 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt", + /* 277 */ "cmd ::= DROP FUNCTION exists_opt function_name", + /* 278 */ "agg_func_opt ::=", + /* 279 */ "agg_func_opt ::= AGGREGATE", + /* 280 */ "bufsize_opt ::=", + /* 281 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", + /* 282 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery", + /* 283 */ "cmd ::= DROP STREAM exists_opt stream_name", + /* 284 */ "stream_options ::=", + /* 285 */ "stream_options ::= stream_options TRIGGER AT_ONCE", + /* 286 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", + /* 287 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", + /* 288 */ "stream_options ::= stream_options WATERMARK duration_literal", + /* 289 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER", + /* 290 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER", + /* 291 */ "subtable_opt ::=", + /* 292 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", + /* 293 */ "cmd ::= KILL CONNECTION NK_INTEGER", + /* 294 */ "cmd ::= KILL QUERY NK_STRING", + /* 295 */ "cmd ::= KILL TRANSACTION NK_INTEGER", + /* 296 */ "cmd ::= BALANCE VGROUP", + /* 297 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", + /* 298 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", + /* 299 */ "cmd ::= SPLIT VGROUP NK_INTEGER", + /* 300 */ "dnode_list ::= DNODE NK_INTEGER", + /* 301 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", + /* 302 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", + /* 303 */ "cmd ::= query_or_subquery", + /* 304 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", + /* 305 */ "cmd ::= INSERT INTO full_table_name query_or_subquery", + /* 306 */ "literal ::= NK_INTEGER", + /* 307 */ "literal ::= NK_FLOAT", + /* 308 */ "literal ::= NK_STRING", + /* 309 */ "literal ::= NK_BOOL", + /* 310 */ "literal ::= TIMESTAMP NK_STRING", + /* 311 */ "literal ::= duration_literal", + /* 312 */ "literal ::= NULL", + /* 313 */ "literal ::= NK_QUESTION", + /* 314 */ "duration_literal ::= NK_VARIABLE", + /* 315 */ "signed ::= NK_INTEGER", + /* 316 */ "signed ::= NK_PLUS NK_INTEGER", + /* 317 */ "signed ::= NK_MINUS NK_INTEGER", + /* 318 */ "signed ::= NK_FLOAT", + /* 319 */ "signed ::= NK_PLUS NK_FLOAT", + /* 320 */ "signed ::= NK_MINUS NK_FLOAT", + /* 321 */ "signed_literal ::= signed", + /* 322 */ "signed_literal ::= NK_STRING", + /* 323 */ "signed_literal ::= NK_BOOL", + /* 324 */ "signed_literal ::= TIMESTAMP NK_STRING", + /* 325 */ "signed_literal ::= duration_literal", + /* 326 */ "signed_literal ::= NULL", + /* 327 */ "signed_literal ::= literal_func", + /* 328 */ "signed_literal ::= NK_QUESTION", + /* 329 */ "literal_list ::= signed_literal", + /* 330 */ "literal_list ::= literal_list NK_COMMA signed_literal", + /* 331 */ "db_name ::= NK_ID", + /* 332 */ "table_name ::= NK_ID", + /* 333 */ "column_name ::= NK_ID", + /* 334 */ "function_name ::= NK_ID", + /* 335 */ "table_alias ::= NK_ID", + /* 336 */ "column_alias ::= NK_ID", + /* 337 */ "user_name ::= NK_ID", + /* 338 */ "topic_name ::= NK_ID", + /* 339 */ "stream_name ::= NK_ID", + /* 340 */ "cgroup_name ::= NK_ID", + /* 341 */ "expr_or_subquery ::= expression", + /* 342 */ "expr_or_subquery ::= subquery", + /* 343 */ "expression ::= literal", + /* 344 */ "expression ::= pseudo_column", + /* 345 */ "expression ::= column_reference", + /* 346 */ "expression ::= function_expression", + /* 347 */ "expression ::= case_when_expression", + /* 348 */ "expression ::= NK_LP expression NK_RP", + /* 349 */ "expression ::= NK_PLUS expr_or_subquery", + /* 350 */ "expression ::= NK_MINUS expr_or_subquery", + /* 351 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", + /* 352 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", + /* 353 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", + /* 354 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", + /* 355 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", + /* 356 */ "expression ::= column_reference NK_ARROW NK_STRING", + /* 357 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", + /* 358 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", + /* 359 */ "expression_list ::= expr_or_subquery", + /* 360 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", + /* 361 */ "column_reference ::= column_name", + /* 362 */ "column_reference ::= table_name NK_DOT column_name", + /* 363 */ "pseudo_column ::= ROWTS", + /* 364 */ "pseudo_column ::= TBNAME", + /* 365 */ "pseudo_column ::= table_name NK_DOT TBNAME", + /* 366 */ "pseudo_column ::= QSTART", + /* 367 */ "pseudo_column ::= QEND", + /* 368 */ "pseudo_column ::= QDURATION", + /* 369 */ "pseudo_column ::= WSTART", + /* 370 */ "pseudo_column ::= WEND", + /* 371 */ "pseudo_column ::= WDURATION", + /* 372 */ "pseudo_column ::= IROWTS", + /* 373 */ "pseudo_column ::= QTAGS", + /* 374 */ "function_expression ::= function_name NK_LP expression_list NK_RP", + /* 375 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", + /* 376 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", + /* 377 */ "function_expression ::= literal_func", + /* 378 */ "literal_func ::= noarg_func NK_LP NK_RP", + /* 379 */ "literal_func ::= NOW", + /* 380 */ "noarg_func ::= NOW", + /* 381 */ "noarg_func ::= TODAY", + /* 382 */ "noarg_func ::= TIMEZONE", + /* 383 */ "noarg_func ::= DATABASE", + /* 384 */ "noarg_func ::= CLIENT_VERSION", + /* 385 */ "noarg_func ::= SERVER_VERSION", + /* 386 */ "noarg_func ::= SERVER_STATUS", + /* 387 */ "noarg_func ::= CURRENT_USER", + /* 388 */ "noarg_func ::= USER", + /* 389 */ "star_func ::= COUNT", + /* 390 */ "star_func ::= FIRST", + /* 391 */ "star_func ::= LAST", + /* 392 */ "star_func ::= LAST_ROW", + /* 393 */ "star_func_para_list ::= NK_STAR", + /* 394 */ "star_func_para_list ::= other_para_list", + /* 395 */ "other_para_list ::= star_func_para", + /* 396 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", + /* 397 */ "star_func_para ::= expr_or_subquery", + /* 398 */ "star_func_para ::= table_name NK_DOT NK_STAR", + /* 399 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", + /* 400 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", + /* 401 */ "when_then_list ::= when_then_expr", + /* 402 */ "when_then_list ::= when_then_list when_then_expr", + /* 403 */ "when_then_expr ::= WHEN common_expression THEN common_expression", + /* 404 */ "case_when_else_opt ::=", + /* 405 */ "case_when_else_opt ::= ELSE common_expression", + /* 406 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", + /* 407 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", + /* 408 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", + /* 409 */ "predicate ::= expr_or_subquery IS NULL", + /* 410 */ "predicate ::= expr_or_subquery IS NOT NULL", + /* 411 */ "predicate ::= expr_or_subquery in_op in_predicate_value", + /* 412 */ "compare_op ::= NK_LT", + /* 413 */ "compare_op ::= NK_GT", + /* 414 */ "compare_op ::= NK_LE", + /* 415 */ "compare_op ::= NK_GE", + /* 416 */ "compare_op ::= NK_NE", + /* 417 */ "compare_op ::= NK_EQ", + /* 418 */ "compare_op ::= LIKE", + /* 419 */ "compare_op ::= NOT LIKE", + /* 420 */ "compare_op ::= MATCH", + /* 421 */ "compare_op ::= NMATCH", + /* 422 */ "compare_op ::= CONTAINS", + /* 423 */ "in_op ::= IN", + /* 424 */ "in_op ::= NOT IN", + /* 425 */ "in_predicate_value ::= NK_LP literal_list NK_RP", + /* 426 */ "boolean_value_expression ::= boolean_primary", + /* 427 */ "boolean_value_expression ::= NOT boolean_primary", + /* 428 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", + /* 429 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", + /* 430 */ "boolean_primary ::= predicate", + /* 431 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", + /* 432 */ "common_expression ::= expr_or_subquery", + /* 433 */ "common_expression ::= boolean_value_expression", + /* 434 */ "from_clause_opt ::=", + /* 435 */ "from_clause_opt ::= FROM table_reference_list", + /* 436 */ "table_reference_list ::= table_reference", + /* 437 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", + /* 438 */ "table_reference ::= table_primary", + /* 439 */ "table_reference ::= joined_table", + /* 440 */ "table_primary ::= table_name alias_opt", + /* 441 */ "table_primary ::= db_name NK_DOT table_name alias_opt", + /* 442 */ "table_primary ::= subquery alias_opt", + /* 443 */ "table_primary ::= parenthesized_joined_table", + /* 444 */ "alias_opt ::=", + /* 445 */ "alias_opt ::= table_alias", + /* 446 */ "alias_opt ::= AS table_alias", + /* 447 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", + /* 448 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", + /* 449 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", + /* 450 */ "join_type ::=", + /* 451 */ "join_type ::= INNER", + /* 452 */ "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", + /* 453 */ "set_quantifier_opt ::=", + /* 454 */ "set_quantifier_opt ::= DISTINCT", + /* 455 */ "set_quantifier_opt ::= ALL", + /* 456 */ "select_list ::= select_item", + /* 457 */ "select_list ::= select_list NK_COMMA select_item", + /* 458 */ "select_item ::= NK_STAR", + /* 459 */ "select_item ::= common_expression", + /* 460 */ "select_item ::= common_expression column_alias", + /* 461 */ "select_item ::= common_expression AS column_alias", + /* 462 */ "select_item ::= table_name NK_DOT NK_STAR", + /* 463 */ "where_clause_opt ::=", + /* 464 */ "where_clause_opt ::= WHERE search_condition", + /* 465 */ "partition_by_clause_opt ::=", + /* 466 */ "partition_by_clause_opt ::= PARTITION BY partition_list", + /* 467 */ "partition_list ::= partition_item", + /* 468 */ "partition_list ::= partition_list NK_COMMA partition_item", + /* 469 */ "partition_item ::= expr_or_subquery", + /* 470 */ "partition_item ::= expr_or_subquery column_alias", + /* 471 */ "partition_item ::= expr_or_subquery AS column_alias", + /* 472 */ "twindow_clause_opt ::=", + /* 473 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", + /* 474 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", + /* 475 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", + /* 476 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", + /* 477 */ "sliding_opt ::=", + /* 478 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", + /* 479 */ "fill_opt ::=", + /* 480 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", + /* 481 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", + /* 482 */ "fill_mode ::= NONE", + /* 483 */ "fill_mode ::= PREV", + /* 484 */ "fill_mode ::= NULL", + /* 485 */ "fill_mode ::= LINEAR", + /* 486 */ "fill_mode ::= NEXT", + /* 487 */ "group_by_clause_opt ::=", + /* 488 */ "group_by_clause_opt ::= GROUP BY group_by_list", + /* 489 */ "group_by_list ::= expr_or_subquery", + /* 490 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", + /* 491 */ "having_clause_opt ::=", + /* 492 */ "having_clause_opt ::= HAVING search_condition", + /* 493 */ "range_opt ::=", + /* 494 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", + /* 495 */ "every_opt ::=", + /* 496 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", + /* 497 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", + /* 498 */ "query_simple ::= query_specification", + /* 499 */ "query_simple ::= union_query_expression", + /* 500 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", + /* 501 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", + /* 502 */ "query_simple_or_subquery ::= query_simple", + /* 503 */ "query_simple_or_subquery ::= subquery", + /* 504 */ "query_or_subquery ::= query_expression", + /* 505 */ "query_or_subquery ::= subquery", + /* 506 */ "order_by_clause_opt ::=", + /* 507 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", + /* 508 */ "slimit_clause_opt ::=", + /* 509 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", + /* 510 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", + /* 511 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 512 */ "limit_clause_opt ::=", + /* 513 */ "limit_clause_opt ::= LIMIT NK_INTEGER", + /* 514 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", + /* 515 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 516 */ "subquery ::= NK_LP query_expression NK_RP", + /* 517 */ "subquery ::= NK_LP subquery NK_RP", + /* 518 */ "search_condition ::= common_expression", + /* 519 */ "sort_specification_list ::= sort_specification", + /* 520 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", + /* 521 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", + /* 522 */ "ordering_specification_opt ::=", + /* 523 */ "ordering_specification_opt ::= ASC", + /* 524 */ "ordering_specification_opt ::= DESC", + /* 525 */ "null_ordering_opt ::=", + /* 526 */ "null_ordering_opt ::= NULLS FIRST", + /* 527 */ "null_ordering_opt ::= NULLS LAST", }; #endif /* NDEBUG */ @@ -2496,190 +2609,191 @@ static void yy_destructor( */ /********* Begin destructor definitions ***************************************/ /* Default NON-TERMINAL Destructor */ - case 318: /* cmd */ - case 321: /* literal */ - case 332: /* db_options */ - case 334: /* alter_db_options */ - case 340: /* retention */ - case 341: /* full_table_name */ - case 344: /* table_options */ - case 348: /* alter_table_clause */ - case 349: /* alter_table_options */ - case 352: /* signed_literal */ - case 353: /* create_subtable_clause */ - case 356: /* drop_table_clause */ - case 359: /* column_def */ - case 363: /* duration_literal */ - case 364: /* rollup_func_name */ - case 366: /* col_name */ - case 367: /* db_name_cond_opt */ - case 368: /* like_pattern_opt */ - case 369: /* table_name_cond */ - case 370: /* from_db_opt */ - case 371: /* index_options */ - case 373: /* sliding_opt */ - case 374: /* sma_stream_opt */ - case 375: /* func */ - case 376: /* stream_options */ - case 378: /* query_or_subquery */ - case 381: /* explain_options */ - case 385: /* subtable_opt */ - case 386: /* expression */ - case 388: /* where_clause_opt */ - case 389: /* signed */ - case 390: /* literal_func */ - case 394: /* expr_or_subquery */ - case 395: /* subquery */ - case 396: /* pseudo_column */ - case 397: /* column_reference */ - case 398: /* function_expression */ - case 399: /* case_when_expression */ - case 404: /* star_func_para */ - case 406: /* case_when_else_opt */ - case 407: /* common_expression */ - case 408: /* when_then_expr */ - case 409: /* predicate */ - case 412: /* in_predicate_value */ - case 413: /* boolean_value_expression */ - case 414: /* boolean_primary */ - case 415: /* from_clause_opt */ - case 416: /* table_reference_list */ - case 417: /* table_reference */ - case 418: /* table_primary */ - case 419: /* joined_table */ - case 421: /* parenthesized_joined_table */ - case 423: /* search_condition */ - case 424: /* query_specification */ - case 428: /* range_opt */ - case 429: /* every_opt */ - case 430: /* fill_opt */ - case 431: /* twindow_clause_opt */ - case 433: /* having_clause_opt */ - case 434: /* select_item */ - case 436: /* partition_item */ - case 439: /* query_expression */ - case 440: /* query_simple */ - case 442: /* slimit_clause_opt */ - case 443: /* limit_clause_opt */ - case 444: /* union_query_expression */ - case 445: /* query_simple_or_subquery */ - case 447: /* sort_specification */ + case 319: /* cmd */ + case 322: /* literal */ + case 334: /* db_options */ + case 336: /* alter_db_options */ + case 342: /* retention */ + case 343: /* full_table_name */ + case 346: /* table_options */ + case 350: /* alter_table_clause */ + case 351: /* alter_table_options */ + case 354: /* signed_literal */ + case 355: /* create_subtable_clause */ + case 358: /* drop_table_clause */ + case 361: /* column_def */ + case 365: /* duration_literal */ + case 366: /* rollup_func_name */ + case 368: /* col_name */ + case 369: /* db_name_cond_opt */ + case 370: /* like_pattern_opt */ + case 371: /* table_name_cond */ + case 372: /* from_db_opt */ + case 373: /* index_options */ + case 375: /* sliding_opt */ + case 376: /* sma_stream_opt */ + case 377: /* func */ + case 378: /* stream_options */ + case 380: /* query_or_subquery */ + case 383: /* explain_options */ + case 387: /* subtable_opt */ + case 388: /* expression */ + case 390: /* where_clause_opt */ + case 391: /* signed */ + case 392: /* literal_func */ + case 396: /* expr_or_subquery */ + case 397: /* subquery */ + case 398: /* pseudo_column */ + case 399: /* column_reference */ + case 400: /* function_expression */ + case 401: /* case_when_expression */ + case 406: /* star_func_para */ + case 408: /* case_when_else_opt */ + case 409: /* common_expression */ + case 410: /* when_then_expr */ + case 411: /* predicate */ + case 414: /* in_predicate_value */ + case 415: /* boolean_value_expression */ + case 416: /* boolean_primary */ + case 417: /* from_clause_opt */ + case 418: /* table_reference_list */ + case 419: /* table_reference */ + case 420: /* table_primary */ + case 421: /* joined_table */ + case 423: /* parenthesized_joined_table */ + case 425: /* search_condition */ + case 426: /* query_specification */ + case 430: /* range_opt */ + case 431: /* every_opt */ + case 432: /* fill_opt */ + case 433: /* twindow_clause_opt */ + case 435: /* having_clause_opt */ + case 436: /* select_item */ + case 438: /* partition_item */ + case 441: /* query_expression */ + case 442: /* query_simple */ + case 444: /* slimit_clause_opt */ + case 445: /* limit_clause_opt */ + case 446: /* union_query_expression */ + case 447: /* query_simple_or_subquery */ + case 449: /* sort_specification */ { - nodesDestroyNode((yypminor->yy812)); + nodesDestroyNode((yypminor->yy232)); } break; - case 319: /* account_options */ - case 320: /* alter_account_options */ - case 322: /* alter_account_option */ - case 335: /* speed_opt */ - case 383: /* bufsize_opt */ + case 320: /* account_options */ + case 321: /* alter_account_options */ + case 323: /* alter_account_option */ + case 337: /* speed_opt */ + case 385: /* bufsize_opt */ { } break; - case 323: /* user_name */ - case 326: /* priv_level */ - case 329: /* db_name */ - case 330: /* dnode_endpoint */ - case 350: /* column_name */ - case 358: /* table_name */ - case 365: /* function_name */ - case 377: /* topic_name */ - case 379: /* cgroup_name */ - case 384: /* stream_name */ - case 392: /* table_alias */ - case 393: /* column_alias */ - case 400: /* star_func */ - case 402: /* noarg_func */ - case 420: /* alias_opt */ + case 324: /* user_name */ + case 327: /* priv_level */ + case 330: /* db_name */ + case 331: /* dnode_endpoint */ + case 352: /* column_name */ + case 360: /* table_name */ + case 367: /* function_name */ + case 379: /* topic_name */ + case 381: /* cgroup_name */ + case 386: /* stream_name */ + case 394: /* table_alias */ + case 395: /* column_alias */ + case 402: /* star_func */ + case 404: /* noarg_func */ + case 422: /* alias_opt */ { } break; - case 324: /* sysinfo_opt */ + case 325: /* sysinfo_opt */ { } break; - case 325: /* privileges */ - case 327: /* priv_type_list */ - case 328: /* priv_type */ + case 326: /* privileges */ + case 328: /* priv_type_list */ + case 329: /* priv_type */ { } break; - case 331: /* not_exists_opt */ - case 333: /* exists_opt */ - case 380: /* analyze_opt */ - case 382: /* agg_func_opt */ - case 425: /* set_quantifier_opt */ + case 332: /* force_opt */ + case 333: /* not_exists_opt */ + case 335: /* exists_opt */ + case 382: /* analyze_opt */ + case 384: /* agg_func_opt */ + case 427: /* set_quantifier_opt */ { } break; - case 336: /* integer_list */ - case 337: /* variable_list */ - case 338: /* retention_list */ - case 342: /* column_def_list */ - case 343: /* tags_def_opt */ - case 345: /* multi_create_clause */ - case 346: /* tags_def */ - case 347: /* multi_drop_clause */ - case 354: /* specific_cols_opt */ - case 355: /* expression_list */ - case 357: /* col_name_list */ - case 360: /* duration_list */ - case 361: /* rollup_func_list */ - case 372: /* func_list */ - case 387: /* dnode_list */ - case 391: /* literal_list */ - case 401: /* star_func_para_list */ - case 403: /* other_para_list */ - case 405: /* when_then_list */ - case 426: /* select_list */ - case 427: /* partition_by_clause_opt */ - case 432: /* group_by_clause_opt */ - case 435: /* partition_list */ - case 438: /* group_by_list */ - case 441: /* order_by_clause_opt */ - case 446: /* sort_specification_list */ + case 338: /* integer_list */ + case 339: /* variable_list */ + case 340: /* retention_list */ + case 344: /* column_def_list */ + case 345: /* tags_def_opt */ + case 347: /* multi_create_clause */ + case 348: /* tags_def */ + case 349: /* multi_drop_clause */ + case 356: /* specific_cols_opt */ + case 357: /* expression_list */ + case 359: /* col_name_list */ + case 362: /* duration_list */ + case 363: /* rollup_func_list */ + case 374: /* func_list */ + case 389: /* dnode_list */ + case 393: /* literal_list */ + case 403: /* star_func_para_list */ + case 405: /* other_para_list */ + case 407: /* when_then_list */ + case 428: /* select_list */ + case 429: /* partition_by_clause_opt */ + case 434: /* group_by_clause_opt */ + case 437: /* partition_list */ + case 440: /* group_by_list */ + case 443: /* order_by_clause_opt */ + case 448: /* sort_specification_list */ { - nodesDestroyList((yypminor->yy424)); + nodesDestroyList((yypminor->yy288)); } break; - case 339: /* alter_db_option */ - case 362: /* alter_table_option */ + case 341: /* alter_db_option */ + case 364: /* alter_table_option */ { } break; - case 351: /* type_name */ + case 353: /* type_name */ { } break; - case 410: /* compare_op */ - case 411: /* in_op */ + case 412: /* compare_op */ + case 413: /* in_op */ { } break; - case 422: /* join_type */ + case 424: /* join_type */ { } break; - case 437: /* fill_mode */ + case 439: /* fill_mode */ { } break; - case 448: /* ordering_specification_opt */ + case 450: /* ordering_specification_opt */ { } break; - case 449: /* null_ordering_opt */ + case 451: /* null_ordering_opt */ { } @@ -2978,532 +3092,534 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 318, -6 }, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ - { 318, -4 }, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ - { 319, 0 }, /* (2) account_options ::= */ - { 319, -3 }, /* (3) account_options ::= account_options PPS literal */ - { 319, -3 }, /* (4) account_options ::= account_options TSERIES literal */ - { 319, -3 }, /* (5) account_options ::= account_options STORAGE literal */ - { 319, -3 }, /* (6) account_options ::= account_options STREAMS literal */ - { 319, -3 }, /* (7) account_options ::= account_options QTIME literal */ - { 319, -3 }, /* (8) account_options ::= account_options DBS literal */ - { 319, -3 }, /* (9) account_options ::= account_options USERS literal */ - { 319, -3 }, /* (10) account_options ::= account_options CONNS literal */ - { 319, -3 }, /* (11) account_options ::= account_options STATE literal */ - { 320, -1 }, /* (12) alter_account_options ::= alter_account_option */ - { 320, -2 }, /* (13) alter_account_options ::= alter_account_options alter_account_option */ - { 322, -2 }, /* (14) alter_account_option ::= PASS literal */ - { 322, -2 }, /* (15) alter_account_option ::= PPS literal */ - { 322, -2 }, /* (16) alter_account_option ::= TSERIES literal */ - { 322, -2 }, /* (17) alter_account_option ::= STORAGE literal */ - { 322, -2 }, /* (18) alter_account_option ::= STREAMS literal */ - { 322, -2 }, /* (19) alter_account_option ::= QTIME literal */ - { 322, -2 }, /* (20) alter_account_option ::= DBS literal */ - { 322, -2 }, /* (21) alter_account_option ::= USERS literal */ - { 322, -2 }, /* (22) alter_account_option ::= CONNS literal */ - { 322, -2 }, /* (23) alter_account_option ::= STATE literal */ - { 318, -6 }, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ - { 318, -5 }, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ - { 318, -5 }, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ - { 318, -5 }, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ - { 318, -3 }, /* (28) cmd ::= DROP USER user_name */ - { 324, 0 }, /* (29) sysinfo_opt ::= */ - { 324, -2 }, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ - { 318, -6 }, /* (31) cmd ::= GRANT privileges ON priv_level TO user_name */ - { 318, -6 }, /* (32) cmd ::= REVOKE privileges ON priv_level FROM user_name */ - { 325, -1 }, /* (33) privileges ::= ALL */ - { 325, -1 }, /* (34) privileges ::= priv_type_list */ - { 327, -1 }, /* (35) priv_type_list ::= priv_type */ - { 327, -3 }, /* (36) priv_type_list ::= priv_type_list NK_COMMA priv_type */ - { 328, -1 }, /* (37) priv_type ::= READ */ - { 328, -1 }, /* (38) priv_type ::= WRITE */ - { 326, -3 }, /* (39) priv_level ::= NK_STAR NK_DOT NK_STAR */ - { 326, -3 }, /* (40) priv_level ::= db_name NK_DOT NK_STAR */ - { 318, -3 }, /* (41) cmd ::= CREATE DNODE dnode_endpoint */ - { 318, -5 }, /* (42) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ - { 318, -3 }, /* (43) cmd ::= DROP DNODE NK_INTEGER */ - { 318, -3 }, /* (44) cmd ::= DROP DNODE dnode_endpoint */ - { 318, -4 }, /* (45) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ - { 318, -5 }, /* (46) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ - { 318, -4 }, /* (47) cmd ::= ALTER ALL DNODES NK_STRING */ - { 318, -5 }, /* (48) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ - { 330, -1 }, /* (49) dnode_endpoint ::= NK_STRING */ - { 330, -1 }, /* (50) dnode_endpoint ::= NK_ID */ - { 330, -1 }, /* (51) dnode_endpoint ::= NK_IPTOKEN */ - { 318, -3 }, /* (52) cmd ::= ALTER LOCAL NK_STRING */ - { 318, -4 }, /* (53) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ - { 318, -5 }, /* (54) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (55) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (56) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (57) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (58) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (59) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (60) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (61) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (62) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ - { 318, -4 }, /* (63) cmd ::= DROP DATABASE exists_opt db_name */ - { 318, -2 }, /* (64) cmd ::= USE db_name */ - { 318, -4 }, /* (65) cmd ::= ALTER DATABASE db_name alter_db_options */ - { 318, -3 }, /* (66) cmd ::= FLUSH DATABASE db_name */ - { 318, -4 }, /* (67) cmd ::= TRIM DATABASE db_name speed_opt */ - { 331, -3 }, /* (68) not_exists_opt ::= IF NOT EXISTS */ - { 331, 0 }, /* (69) not_exists_opt ::= */ - { 333, -2 }, /* (70) exists_opt ::= IF EXISTS */ - { 333, 0 }, /* (71) exists_opt ::= */ - { 332, 0 }, /* (72) db_options ::= */ - { 332, -3 }, /* (73) db_options ::= db_options BUFFER NK_INTEGER */ - { 332, -3 }, /* (74) db_options ::= db_options CACHEMODEL NK_STRING */ - { 332, -3 }, /* (75) db_options ::= db_options CACHESIZE NK_INTEGER */ - { 332, -3 }, /* (76) db_options ::= db_options COMP NK_INTEGER */ - { 332, -3 }, /* (77) db_options ::= db_options DURATION NK_INTEGER */ - { 332, -3 }, /* (78) db_options ::= db_options DURATION NK_VARIABLE */ - { 332, -3 }, /* (79) db_options ::= db_options MAXROWS NK_INTEGER */ - { 332, -3 }, /* (80) db_options ::= db_options MINROWS NK_INTEGER */ - { 332, -3 }, /* (81) db_options ::= db_options KEEP integer_list */ - { 332, -3 }, /* (82) db_options ::= db_options KEEP variable_list */ - { 332, -3 }, /* (83) db_options ::= db_options PAGES NK_INTEGER */ - { 332, -3 }, /* (84) db_options ::= db_options PAGESIZE NK_INTEGER */ - { 332, -3 }, /* (85) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ - { 332, -3 }, /* (86) db_options ::= db_options PRECISION NK_STRING */ - { 332, -3 }, /* (87) db_options ::= db_options REPLICA NK_INTEGER */ - { 332, -3 }, /* (88) db_options ::= db_options STRICT NK_STRING */ - { 332, -3 }, /* (89) db_options ::= db_options VGROUPS NK_INTEGER */ - { 332, -3 }, /* (90) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ - { 332, -3 }, /* (91) db_options ::= db_options RETENTIONS retention_list */ - { 332, -3 }, /* (92) db_options ::= db_options SCHEMALESS NK_INTEGER */ - { 332, -3 }, /* (93) db_options ::= db_options WAL_LEVEL NK_INTEGER */ - { 332, -3 }, /* (94) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ - { 332, -3 }, /* (95) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ - { 332, -4 }, /* (96) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ - { 332, -3 }, /* (97) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ - { 332, -4 }, /* (98) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ - { 332, -3 }, /* (99) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ - { 332, -3 }, /* (100) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ - { 332, -3 }, /* (101) db_options ::= db_options STT_TRIGGER NK_INTEGER */ - { 332, -3 }, /* (102) db_options ::= db_options TABLE_PREFIX NK_INTEGER */ - { 332, -3 }, /* (103) db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ - { 334, -1 }, /* (104) alter_db_options ::= alter_db_option */ - { 334, -2 }, /* (105) alter_db_options ::= alter_db_options alter_db_option */ - { 339, -2 }, /* (106) alter_db_option ::= BUFFER NK_INTEGER */ - { 339, -2 }, /* (107) alter_db_option ::= CACHEMODEL NK_STRING */ - { 339, -2 }, /* (108) alter_db_option ::= CACHESIZE NK_INTEGER */ - { 339, -2 }, /* (109) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ - { 339, -2 }, /* (110) alter_db_option ::= KEEP integer_list */ - { 339, -2 }, /* (111) alter_db_option ::= KEEP variable_list */ - { 339, -2 }, /* (112) alter_db_option ::= PAGES NK_INTEGER */ - { 339, -2 }, /* (113) alter_db_option ::= REPLICA NK_INTEGER */ - { 339, -2 }, /* (114) alter_db_option ::= STRICT NK_STRING */ - { 339, -2 }, /* (115) alter_db_option ::= WAL_LEVEL NK_INTEGER */ - { 339, -2 }, /* (116) alter_db_option ::= STT_TRIGGER NK_INTEGER */ - { 336, -1 }, /* (117) integer_list ::= NK_INTEGER */ - { 336, -3 }, /* (118) integer_list ::= integer_list NK_COMMA NK_INTEGER */ - { 337, -1 }, /* (119) variable_list ::= NK_VARIABLE */ - { 337, -3 }, /* (120) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ - { 338, -1 }, /* (121) retention_list ::= retention */ - { 338, -3 }, /* (122) retention_list ::= retention_list NK_COMMA retention */ - { 340, -3 }, /* (123) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ - { 335, 0 }, /* (124) speed_opt ::= */ - { 335, -2 }, /* (125) speed_opt ::= MAX_SPEED NK_INTEGER */ - { 318, -9 }, /* (126) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - { 318, -3 }, /* (127) cmd ::= CREATE TABLE multi_create_clause */ - { 318, -9 }, /* (128) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ - { 318, -3 }, /* (129) cmd ::= DROP TABLE multi_drop_clause */ - { 318, -4 }, /* (130) cmd ::= DROP STABLE exists_opt full_table_name */ - { 318, -3 }, /* (131) cmd ::= ALTER TABLE alter_table_clause */ - { 318, -3 }, /* (132) cmd ::= ALTER STABLE alter_table_clause */ - { 348, -2 }, /* (133) alter_table_clause ::= full_table_name alter_table_options */ - { 348, -5 }, /* (134) alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ - { 348, -4 }, /* (135) alter_table_clause ::= full_table_name DROP COLUMN column_name */ - { 348, -5 }, /* (136) alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ - { 348, -5 }, /* (137) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ - { 348, -5 }, /* (138) alter_table_clause ::= full_table_name ADD TAG column_name type_name */ - { 348, -4 }, /* (139) alter_table_clause ::= full_table_name DROP TAG column_name */ - { 348, -5 }, /* (140) alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ - { 348, -5 }, /* (141) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ - { 348, -6 }, /* (142) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ - { 345, -1 }, /* (143) multi_create_clause ::= create_subtable_clause */ - { 345, -2 }, /* (144) multi_create_clause ::= multi_create_clause create_subtable_clause */ - { 353, -10 }, /* (145) create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ - { 347, -1 }, /* (146) multi_drop_clause ::= drop_table_clause */ - { 347, -2 }, /* (147) multi_drop_clause ::= multi_drop_clause drop_table_clause */ - { 356, -2 }, /* (148) drop_table_clause ::= exists_opt full_table_name */ - { 354, 0 }, /* (149) specific_cols_opt ::= */ - { 354, -3 }, /* (150) specific_cols_opt ::= NK_LP col_name_list NK_RP */ - { 341, -1 }, /* (151) full_table_name ::= table_name */ - { 341, -3 }, /* (152) full_table_name ::= db_name NK_DOT table_name */ - { 342, -1 }, /* (153) column_def_list ::= column_def */ - { 342, -3 }, /* (154) column_def_list ::= column_def_list NK_COMMA column_def */ - { 359, -2 }, /* (155) column_def ::= column_name type_name */ - { 359, -4 }, /* (156) column_def ::= column_name type_name COMMENT NK_STRING */ - { 351, -1 }, /* (157) type_name ::= BOOL */ - { 351, -1 }, /* (158) type_name ::= TINYINT */ - { 351, -1 }, /* (159) type_name ::= SMALLINT */ - { 351, -1 }, /* (160) type_name ::= INT */ - { 351, -1 }, /* (161) type_name ::= INTEGER */ - { 351, -1 }, /* (162) type_name ::= BIGINT */ - { 351, -1 }, /* (163) type_name ::= FLOAT */ - { 351, -1 }, /* (164) type_name ::= DOUBLE */ - { 351, -4 }, /* (165) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ - { 351, -1 }, /* (166) type_name ::= TIMESTAMP */ - { 351, -4 }, /* (167) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ - { 351, -2 }, /* (168) type_name ::= TINYINT UNSIGNED */ - { 351, -2 }, /* (169) type_name ::= SMALLINT UNSIGNED */ - { 351, -2 }, /* (170) type_name ::= INT UNSIGNED */ - { 351, -2 }, /* (171) type_name ::= BIGINT UNSIGNED */ - { 351, -1 }, /* (172) type_name ::= JSON */ - { 351, -4 }, /* (173) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ - { 351, -1 }, /* (174) type_name ::= MEDIUMBLOB */ - { 351, -1 }, /* (175) type_name ::= BLOB */ - { 351, -4 }, /* (176) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ - { 351, -1 }, /* (177) type_name ::= DECIMAL */ - { 351, -4 }, /* (178) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ - { 351, -6 }, /* (179) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ - { 343, 0 }, /* (180) tags_def_opt ::= */ - { 343, -1 }, /* (181) tags_def_opt ::= tags_def */ - { 346, -4 }, /* (182) tags_def ::= TAGS NK_LP column_def_list NK_RP */ - { 344, 0 }, /* (183) table_options ::= */ - { 344, -3 }, /* (184) table_options ::= table_options COMMENT NK_STRING */ - { 344, -3 }, /* (185) table_options ::= table_options MAX_DELAY duration_list */ - { 344, -3 }, /* (186) table_options ::= table_options WATERMARK duration_list */ - { 344, -5 }, /* (187) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ - { 344, -3 }, /* (188) table_options ::= table_options TTL NK_INTEGER */ - { 344, -5 }, /* (189) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ - { 349, -1 }, /* (190) alter_table_options ::= alter_table_option */ - { 349, -2 }, /* (191) alter_table_options ::= alter_table_options alter_table_option */ - { 362, -2 }, /* (192) alter_table_option ::= COMMENT NK_STRING */ - { 362, -2 }, /* (193) alter_table_option ::= TTL NK_INTEGER */ - { 360, -1 }, /* (194) duration_list ::= duration_literal */ - { 360, -3 }, /* (195) duration_list ::= duration_list NK_COMMA duration_literal */ - { 361, -1 }, /* (196) rollup_func_list ::= rollup_func_name */ - { 361, -3 }, /* (197) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ - { 364, -1 }, /* (198) rollup_func_name ::= function_name */ - { 364, -1 }, /* (199) rollup_func_name ::= FIRST */ - { 364, -1 }, /* (200) rollup_func_name ::= LAST */ - { 357, -1 }, /* (201) col_name_list ::= col_name */ - { 357, -3 }, /* (202) col_name_list ::= col_name_list NK_COMMA col_name */ - { 366, -1 }, /* (203) col_name ::= column_name */ - { 318, -2 }, /* (204) cmd ::= SHOW DNODES */ - { 318, -2 }, /* (205) cmd ::= SHOW USERS */ - { 318, -2 }, /* (206) cmd ::= SHOW DATABASES */ - { 318, -4 }, /* (207) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ - { 318, -4 }, /* (208) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ - { 318, -3 }, /* (209) cmd ::= SHOW db_name_cond_opt VGROUPS */ - { 318, -2 }, /* (210) cmd ::= SHOW MNODES */ - { 318, -2 }, /* (211) cmd ::= SHOW QNODES */ - { 318, -2 }, /* (212) cmd ::= SHOW FUNCTIONS */ - { 318, -5 }, /* (213) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ - { 318, -2 }, /* (214) cmd ::= SHOW STREAMS */ - { 318, -2 }, /* (215) cmd ::= SHOW ACCOUNTS */ - { 318, -2 }, /* (216) cmd ::= SHOW APPS */ - { 318, -2 }, /* (217) cmd ::= SHOW CONNECTIONS */ - { 318, -2 }, /* (218) cmd ::= SHOW LICENCES */ - { 318, -2 }, /* (219) cmd ::= SHOW GRANTS */ - { 318, -4 }, /* (220) cmd ::= SHOW CREATE DATABASE db_name */ - { 318, -4 }, /* (221) cmd ::= SHOW CREATE TABLE full_table_name */ - { 318, -4 }, /* (222) cmd ::= SHOW CREATE STABLE full_table_name */ - { 318, -2 }, /* (223) cmd ::= SHOW QUERIES */ - { 318, -2 }, /* (224) cmd ::= SHOW SCORES */ - { 318, -2 }, /* (225) cmd ::= SHOW TOPICS */ - { 318, -2 }, /* (226) cmd ::= SHOW VARIABLES */ - { 318, -3 }, /* (227) cmd ::= SHOW CLUSTER VARIABLES */ - { 318, -3 }, /* (228) cmd ::= SHOW LOCAL VARIABLES */ - { 318, -5 }, /* (229) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ - { 318, -2 }, /* (230) cmd ::= SHOW BNODES */ - { 318, -2 }, /* (231) cmd ::= SHOW SNODES */ - { 318, -2 }, /* (232) cmd ::= SHOW CLUSTER */ - { 318, -2 }, /* (233) cmd ::= SHOW TRANSACTIONS */ - { 318, -4 }, /* (234) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ - { 318, -2 }, /* (235) cmd ::= SHOW CONSUMERS */ - { 318, -2 }, /* (236) cmd ::= SHOW SUBSCRIPTIONS */ - { 318, -5 }, /* (237) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ - { 318, -6 }, /* (238) cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ - { 318, -3 }, /* (239) cmd ::= SHOW VNODES NK_INTEGER */ - { 318, -3 }, /* (240) cmd ::= SHOW VNODES NK_STRING */ - { 367, 0 }, /* (241) db_name_cond_opt ::= */ - { 367, -2 }, /* (242) db_name_cond_opt ::= db_name NK_DOT */ - { 368, 0 }, /* (243) like_pattern_opt ::= */ - { 368, -2 }, /* (244) like_pattern_opt ::= LIKE NK_STRING */ - { 369, -1 }, /* (245) table_name_cond ::= table_name */ - { 370, 0 }, /* (246) from_db_opt ::= */ - { 370, -2 }, /* (247) from_db_opt ::= FROM db_name */ - { 318, -8 }, /* (248) cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */ - { 318, -4 }, /* (249) cmd ::= DROP INDEX exists_opt full_table_name */ - { 371, -10 }, /* (250) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ - { 371, -12 }, /* (251) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ - { 372, -1 }, /* (252) func_list ::= func */ - { 372, -3 }, /* (253) func_list ::= func_list NK_COMMA func */ - { 375, -4 }, /* (254) func ::= function_name NK_LP expression_list NK_RP */ - { 374, 0 }, /* (255) sma_stream_opt ::= */ - { 374, -3 }, /* (256) sma_stream_opt ::= stream_options WATERMARK duration_literal */ - { 374, -3 }, /* (257) sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ - { 318, -6 }, /* (258) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ - { 318, -7 }, /* (259) cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ - { 318, -9 }, /* (260) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ - { 318, -7 }, /* (261) cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ - { 318, -9 }, /* (262) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ - { 318, -4 }, /* (263) cmd ::= DROP TOPIC exists_opt topic_name */ - { 318, -7 }, /* (264) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ - { 318, -2 }, /* (265) cmd ::= DESC full_table_name */ - { 318, -2 }, /* (266) cmd ::= DESCRIBE full_table_name */ - { 318, -3 }, /* (267) cmd ::= RESET QUERY CACHE */ - { 318, -4 }, /* (268) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ - { 380, 0 }, /* (269) analyze_opt ::= */ - { 380, -1 }, /* (270) analyze_opt ::= ANALYZE */ - { 381, 0 }, /* (271) explain_options ::= */ - { 381, -3 }, /* (272) explain_options ::= explain_options VERBOSE NK_BOOL */ - { 381, -3 }, /* (273) explain_options ::= explain_options RATIO NK_FLOAT */ - { 318, -10 }, /* (274) cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ - { 318, -4 }, /* (275) cmd ::= DROP FUNCTION exists_opt function_name */ - { 382, 0 }, /* (276) agg_func_opt ::= */ - { 382, -1 }, /* (277) agg_func_opt ::= AGGREGATE */ - { 383, 0 }, /* (278) bufsize_opt ::= */ - { 383, -2 }, /* (279) bufsize_opt ::= BUFSIZE NK_INTEGER */ - { 318, -11 }, /* (280) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */ - { 318, -4 }, /* (281) cmd ::= DROP STREAM exists_opt stream_name */ - { 376, 0 }, /* (282) stream_options ::= */ - { 376, -3 }, /* (283) stream_options ::= stream_options TRIGGER AT_ONCE */ - { 376, -3 }, /* (284) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ - { 376, -4 }, /* (285) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ - { 376, -3 }, /* (286) stream_options ::= stream_options WATERMARK duration_literal */ - { 376, -4 }, /* (287) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ - { 376, -3 }, /* (288) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ - { 385, 0 }, /* (289) subtable_opt ::= */ - { 385, -4 }, /* (290) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - { 318, -3 }, /* (291) cmd ::= KILL CONNECTION NK_INTEGER */ - { 318, -3 }, /* (292) cmd ::= KILL QUERY NK_STRING */ - { 318, -3 }, /* (293) cmd ::= KILL TRANSACTION NK_INTEGER */ - { 318, -2 }, /* (294) cmd ::= BALANCE VGROUP */ - { 318, -4 }, /* (295) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ - { 318, -4 }, /* (296) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ - { 318, -3 }, /* (297) cmd ::= SPLIT VGROUP NK_INTEGER */ - { 387, -2 }, /* (298) dnode_list ::= DNODE NK_INTEGER */ - { 387, -3 }, /* (299) dnode_list ::= dnode_list DNODE NK_INTEGER */ - { 318, -4 }, /* (300) cmd ::= DELETE FROM full_table_name where_clause_opt */ - { 318, -1 }, /* (301) cmd ::= query_or_subquery */ - { 318, -7 }, /* (302) cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ - { 318, -4 }, /* (303) cmd ::= INSERT INTO full_table_name query_or_subquery */ - { 321, -1 }, /* (304) literal ::= NK_INTEGER */ - { 321, -1 }, /* (305) literal ::= NK_FLOAT */ - { 321, -1 }, /* (306) literal ::= NK_STRING */ - { 321, -1 }, /* (307) literal ::= NK_BOOL */ - { 321, -2 }, /* (308) literal ::= TIMESTAMP NK_STRING */ - { 321, -1 }, /* (309) literal ::= duration_literal */ - { 321, -1 }, /* (310) literal ::= NULL */ - { 321, -1 }, /* (311) literal ::= NK_QUESTION */ - { 363, -1 }, /* (312) duration_literal ::= NK_VARIABLE */ - { 389, -1 }, /* (313) signed ::= NK_INTEGER */ - { 389, -2 }, /* (314) signed ::= NK_PLUS NK_INTEGER */ - { 389, -2 }, /* (315) signed ::= NK_MINUS NK_INTEGER */ - { 389, -1 }, /* (316) signed ::= NK_FLOAT */ - { 389, -2 }, /* (317) signed ::= NK_PLUS NK_FLOAT */ - { 389, -2 }, /* (318) signed ::= NK_MINUS NK_FLOAT */ - { 352, -1 }, /* (319) signed_literal ::= signed */ - { 352, -1 }, /* (320) signed_literal ::= NK_STRING */ - { 352, -1 }, /* (321) signed_literal ::= NK_BOOL */ - { 352, -2 }, /* (322) signed_literal ::= TIMESTAMP NK_STRING */ - { 352, -1 }, /* (323) signed_literal ::= duration_literal */ - { 352, -1 }, /* (324) signed_literal ::= NULL */ - { 352, -1 }, /* (325) signed_literal ::= literal_func */ - { 352, -1 }, /* (326) signed_literal ::= NK_QUESTION */ - { 391, -1 }, /* (327) literal_list ::= signed_literal */ - { 391, -3 }, /* (328) literal_list ::= literal_list NK_COMMA signed_literal */ - { 329, -1 }, /* (329) db_name ::= NK_ID */ - { 358, -1 }, /* (330) table_name ::= NK_ID */ - { 350, -1 }, /* (331) column_name ::= NK_ID */ - { 365, -1 }, /* (332) function_name ::= NK_ID */ - { 392, -1 }, /* (333) table_alias ::= NK_ID */ - { 393, -1 }, /* (334) column_alias ::= NK_ID */ - { 323, -1 }, /* (335) user_name ::= NK_ID */ - { 377, -1 }, /* (336) topic_name ::= NK_ID */ - { 384, -1 }, /* (337) stream_name ::= NK_ID */ - { 379, -1 }, /* (338) cgroup_name ::= NK_ID */ - { 394, -1 }, /* (339) expr_or_subquery ::= expression */ - { 394, -1 }, /* (340) expr_or_subquery ::= subquery */ - { 386, -1 }, /* (341) expression ::= literal */ - { 386, -1 }, /* (342) expression ::= pseudo_column */ - { 386, -1 }, /* (343) expression ::= column_reference */ - { 386, -1 }, /* (344) expression ::= function_expression */ - { 386, -1 }, /* (345) expression ::= case_when_expression */ - { 386, -3 }, /* (346) expression ::= NK_LP expression NK_RP */ - { 386, -2 }, /* (347) expression ::= NK_PLUS expr_or_subquery */ - { 386, -2 }, /* (348) expression ::= NK_MINUS expr_or_subquery */ - { 386, -3 }, /* (349) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ - { 386, -3 }, /* (350) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ - { 386, -3 }, /* (351) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ - { 386, -3 }, /* (352) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ - { 386, -3 }, /* (353) expression ::= expr_or_subquery NK_REM expr_or_subquery */ - { 386, -3 }, /* (354) expression ::= column_reference NK_ARROW NK_STRING */ - { 386, -3 }, /* (355) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ - { 386, -3 }, /* (356) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ - { 355, -1 }, /* (357) expression_list ::= expr_or_subquery */ - { 355, -3 }, /* (358) expression_list ::= expression_list NK_COMMA expr_or_subquery */ - { 397, -1 }, /* (359) column_reference ::= column_name */ - { 397, -3 }, /* (360) column_reference ::= table_name NK_DOT column_name */ - { 396, -1 }, /* (361) pseudo_column ::= ROWTS */ - { 396, -1 }, /* (362) pseudo_column ::= TBNAME */ - { 396, -3 }, /* (363) pseudo_column ::= table_name NK_DOT TBNAME */ - { 396, -1 }, /* (364) pseudo_column ::= QSTART */ - { 396, -1 }, /* (365) pseudo_column ::= QEND */ - { 396, -1 }, /* (366) pseudo_column ::= QDURATION */ - { 396, -1 }, /* (367) pseudo_column ::= WSTART */ - { 396, -1 }, /* (368) pseudo_column ::= WEND */ - { 396, -1 }, /* (369) pseudo_column ::= WDURATION */ - { 396, -1 }, /* (370) pseudo_column ::= IROWTS */ - { 396, -1 }, /* (371) pseudo_column ::= QTAGS */ - { 398, -4 }, /* (372) function_expression ::= function_name NK_LP expression_list NK_RP */ - { 398, -4 }, /* (373) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ - { 398, -6 }, /* (374) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ - { 398, -1 }, /* (375) function_expression ::= literal_func */ - { 390, -3 }, /* (376) literal_func ::= noarg_func NK_LP NK_RP */ - { 390, -1 }, /* (377) literal_func ::= NOW */ - { 402, -1 }, /* (378) noarg_func ::= NOW */ - { 402, -1 }, /* (379) noarg_func ::= TODAY */ - { 402, -1 }, /* (380) noarg_func ::= TIMEZONE */ - { 402, -1 }, /* (381) noarg_func ::= DATABASE */ - { 402, -1 }, /* (382) noarg_func ::= CLIENT_VERSION */ - { 402, -1 }, /* (383) noarg_func ::= SERVER_VERSION */ - { 402, -1 }, /* (384) noarg_func ::= SERVER_STATUS */ - { 402, -1 }, /* (385) noarg_func ::= CURRENT_USER */ - { 402, -1 }, /* (386) noarg_func ::= USER */ - { 400, -1 }, /* (387) star_func ::= COUNT */ - { 400, -1 }, /* (388) star_func ::= FIRST */ - { 400, -1 }, /* (389) star_func ::= LAST */ - { 400, -1 }, /* (390) star_func ::= LAST_ROW */ - { 401, -1 }, /* (391) star_func_para_list ::= NK_STAR */ - { 401, -1 }, /* (392) star_func_para_list ::= other_para_list */ - { 403, -1 }, /* (393) other_para_list ::= star_func_para */ - { 403, -3 }, /* (394) other_para_list ::= other_para_list NK_COMMA star_func_para */ - { 404, -1 }, /* (395) star_func_para ::= expr_or_subquery */ - { 404, -3 }, /* (396) star_func_para ::= table_name NK_DOT NK_STAR */ - { 399, -4 }, /* (397) case_when_expression ::= CASE when_then_list case_when_else_opt END */ - { 399, -5 }, /* (398) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ - { 405, -1 }, /* (399) when_then_list ::= when_then_expr */ - { 405, -2 }, /* (400) when_then_list ::= when_then_list when_then_expr */ - { 408, -4 }, /* (401) when_then_expr ::= WHEN common_expression THEN common_expression */ - { 406, 0 }, /* (402) case_when_else_opt ::= */ - { 406, -2 }, /* (403) case_when_else_opt ::= ELSE common_expression */ - { 409, -3 }, /* (404) predicate ::= expr_or_subquery compare_op expr_or_subquery */ - { 409, -5 }, /* (405) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ - { 409, -6 }, /* (406) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ - { 409, -3 }, /* (407) predicate ::= expr_or_subquery IS NULL */ - { 409, -4 }, /* (408) predicate ::= expr_or_subquery IS NOT NULL */ - { 409, -3 }, /* (409) predicate ::= expr_or_subquery in_op in_predicate_value */ - { 410, -1 }, /* (410) compare_op ::= NK_LT */ - { 410, -1 }, /* (411) compare_op ::= NK_GT */ - { 410, -1 }, /* (412) compare_op ::= NK_LE */ - { 410, -1 }, /* (413) compare_op ::= NK_GE */ - { 410, -1 }, /* (414) compare_op ::= NK_NE */ - { 410, -1 }, /* (415) compare_op ::= NK_EQ */ - { 410, -1 }, /* (416) compare_op ::= LIKE */ - { 410, -2 }, /* (417) compare_op ::= NOT LIKE */ - { 410, -1 }, /* (418) compare_op ::= MATCH */ - { 410, -1 }, /* (419) compare_op ::= NMATCH */ - { 410, -1 }, /* (420) compare_op ::= CONTAINS */ - { 411, -1 }, /* (421) in_op ::= IN */ - { 411, -2 }, /* (422) in_op ::= NOT IN */ - { 412, -3 }, /* (423) in_predicate_value ::= NK_LP literal_list NK_RP */ - { 413, -1 }, /* (424) boolean_value_expression ::= boolean_primary */ - { 413, -2 }, /* (425) boolean_value_expression ::= NOT boolean_primary */ - { 413, -3 }, /* (426) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ - { 413, -3 }, /* (427) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ - { 414, -1 }, /* (428) boolean_primary ::= predicate */ - { 414, -3 }, /* (429) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ - { 407, -1 }, /* (430) common_expression ::= expr_or_subquery */ - { 407, -1 }, /* (431) common_expression ::= boolean_value_expression */ - { 415, 0 }, /* (432) from_clause_opt ::= */ - { 415, -2 }, /* (433) from_clause_opt ::= FROM table_reference_list */ - { 416, -1 }, /* (434) table_reference_list ::= table_reference */ - { 416, -3 }, /* (435) table_reference_list ::= table_reference_list NK_COMMA table_reference */ - { 417, -1 }, /* (436) table_reference ::= table_primary */ - { 417, -1 }, /* (437) table_reference ::= joined_table */ - { 418, -2 }, /* (438) table_primary ::= table_name alias_opt */ - { 418, -4 }, /* (439) table_primary ::= db_name NK_DOT table_name alias_opt */ - { 418, -2 }, /* (440) table_primary ::= subquery alias_opt */ - { 418, -1 }, /* (441) table_primary ::= parenthesized_joined_table */ - { 420, 0 }, /* (442) alias_opt ::= */ - { 420, -1 }, /* (443) alias_opt ::= table_alias */ - { 420, -2 }, /* (444) alias_opt ::= AS table_alias */ - { 421, -3 }, /* (445) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - { 421, -3 }, /* (446) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ - { 419, -6 }, /* (447) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ - { 422, 0 }, /* (448) join_type ::= */ - { 422, -1 }, /* (449) join_type ::= INNER */ - { 424, -12 }, /* (450) 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 */ - { 425, 0 }, /* (451) set_quantifier_opt ::= */ - { 425, -1 }, /* (452) set_quantifier_opt ::= DISTINCT */ - { 425, -1 }, /* (453) set_quantifier_opt ::= ALL */ - { 426, -1 }, /* (454) select_list ::= select_item */ - { 426, -3 }, /* (455) select_list ::= select_list NK_COMMA select_item */ - { 434, -1 }, /* (456) select_item ::= NK_STAR */ - { 434, -1 }, /* (457) select_item ::= common_expression */ - { 434, -2 }, /* (458) select_item ::= common_expression column_alias */ - { 434, -3 }, /* (459) select_item ::= common_expression AS column_alias */ - { 434, -3 }, /* (460) select_item ::= table_name NK_DOT NK_STAR */ - { 388, 0 }, /* (461) where_clause_opt ::= */ - { 388, -2 }, /* (462) where_clause_opt ::= WHERE search_condition */ - { 427, 0 }, /* (463) partition_by_clause_opt ::= */ - { 427, -3 }, /* (464) partition_by_clause_opt ::= PARTITION BY partition_list */ - { 435, -1 }, /* (465) partition_list ::= partition_item */ - { 435, -3 }, /* (466) partition_list ::= partition_list NK_COMMA partition_item */ - { 436, -1 }, /* (467) partition_item ::= expr_or_subquery */ - { 436, -2 }, /* (468) partition_item ::= expr_or_subquery column_alias */ - { 436, -3 }, /* (469) partition_item ::= expr_or_subquery AS column_alias */ - { 431, 0 }, /* (470) twindow_clause_opt ::= */ - { 431, -6 }, /* (471) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ - { 431, -4 }, /* (472) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ - { 431, -6 }, /* (473) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ - { 431, -8 }, /* (474) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ - { 373, 0 }, /* (475) sliding_opt ::= */ - { 373, -4 }, /* (476) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ - { 430, 0 }, /* (477) fill_opt ::= */ - { 430, -4 }, /* (478) fill_opt ::= FILL NK_LP fill_mode NK_RP */ - { 430, -6 }, /* (479) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ - { 437, -1 }, /* (480) fill_mode ::= NONE */ - { 437, -1 }, /* (481) fill_mode ::= PREV */ - { 437, -1 }, /* (482) fill_mode ::= NULL */ - { 437, -1 }, /* (483) fill_mode ::= LINEAR */ - { 437, -1 }, /* (484) fill_mode ::= NEXT */ - { 432, 0 }, /* (485) group_by_clause_opt ::= */ - { 432, -3 }, /* (486) group_by_clause_opt ::= GROUP BY group_by_list */ - { 438, -1 }, /* (487) group_by_list ::= expr_or_subquery */ - { 438, -3 }, /* (488) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ - { 433, 0 }, /* (489) having_clause_opt ::= */ - { 433, -2 }, /* (490) having_clause_opt ::= HAVING search_condition */ - { 428, 0 }, /* (491) range_opt ::= */ - { 428, -6 }, /* (492) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ - { 429, 0 }, /* (493) every_opt ::= */ - { 429, -4 }, /* (494) every_opt ::= EVERY NK_LP duration_literal NK_RP */ - { 439, -4 }, /* (495) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ - { 440, -1 }, /* (496) query_simple ::= query_specification */ - { 440, -1 }, /* (497) query_simple ::= union_query_expression */ - { 444, -4 }, /* (498) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ - { 444, -3 }, /* (499) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ - { 445, -1 }, /* (500) query_simple_or_subquery ::= query_simple */ - { 445, -1 }, /* (501) query_simple_or_subquery ::= subquery */ - { 378, -1 }, /* (502) query_or_subquery ::= query_expression */ - { 378, -1 }, /* (503) query_or_subquery ::= subquery */ - { 441, 0 }, /* (504) order_by_clause_opt ::= */ - { 441, -3 }, /* (505) order_by_clause_opt ::= ORDER BY sort_specification_list */ - { 442, 0 }, /* (506) slimit_clause_opt ::= */ - { 442, -2 }, /* (507) slimit_clause_opt ::= SLIMIT NK_INTEGER */ - { 442, -4 }, /* (508) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - { 442, -4 }, /* (509) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 443, 0 }, /* (510) limit_clause_opt ::= */ - { 443, -2 }, /* (511) limit_clause_opt ::= LIMIT NK_INTEGER */ - { 443, -4 }, /* (512) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ - { 443, -4 }, /* (513) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 395, -3 }, /* (514) subquery ::= NK_LP query_expression NK_RP */ - { 395, -3 }, /* (515) subquery ::= NK_LP subquery NK_RP */ - { 423, -1 }, /* (516) search_condition ::= common_expression */ - { 446, -1 }, /* (517) sort_specification_list ::= sort_specification */ - { 446, -3 }, /* (518) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ - { 447, -3 }, /* (519) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ - { 448, 0 }, /* (520) ordering_specification_opt ::= */ - { 448, -1 }, /* (521) ordering_specification_opt ::= ASC */ - { 448, -1 }, /* (522) ordering_specification_opt ::= DESC */ - { 449, 0 }, /* (523) null_ordering_opt ::= */ - { 449, -2 }, /* (524) null_ordering_opt ::= NULLS FIRST */ - { 449, -2 }, /* (525) null_ordering_opt ::= NULLS LAST */ + { 319, -6 }, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ + { 319, -4 }, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ + { 320, 0 }, /* (2) account_options ::= */ + { 320, -3 }, /* (3) account_options ::= account_options PPS literal */ + { 320, -3 }, /* (4) account_options ::= account_options TSERIES literal */ + { 320, -3 }, /* (5) account_options ::= account_options STORAGE literal */ + { 320, -3 }, /* (6) account_options ::= account_options STREAMS literal */ + { 320, -3 }, /* (7) account_options ::= account_options QTIME literal */ + { 320, -3 }, /* (8) account_options ::= account_options DBS literal */ + { 320, -3 }, /* (9) account_options ::= account_options USERS literal */ + { 320, -3 }, /* (10) account_options ::= account_options CONNS literal */ + { 320, -3 }, /* (11) account_options ::= account_options STATE literal */ + { 321, -1 }, /* (12) alter_account_options ::= alter_account_option */ + { 321, -2 }, /* (13) alter_account_options ::= alter_account_options alter_account_option */ + { 323, -2 }, /* (14) alter_account_option ::= PASS literal */ + { 323, -2 }, /* (15) alter_account_option ::= PPS literal */ + { 323, -2 }, /* (16) alter_account_option ::= TSERIES literal */ + { 323, -2 }, /* (17) alter_account_option ::= STORAGE literal */ + { 323, -2 }, /* (18) alter_account_option ::= STREAMS literal */ + { 323, -2 }, /* (19) alter_account_option ::= QTIME literal */ + { 323, -2 }, /* (20) alter_account_option ::= DBS literal */ + { 323, -2 }, /* (21) alter_account_option ::= USERS literal */ + { 323, -2 }, /* (22) alter_account_option ::= CONNS literal */ + { 323, -2 }, /* (23) alter_account_option ::= STATE literal */ + { 319, -6 }, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ + { 319, -5 }, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ + { 319, -5 }, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ + { 319, -5 }, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ + { 319, -3 }, /* (28) cmd ::= DROP USER user_name */ + { 325, 0 }, /* (29) sysinfo_opt ::= */ + { 325, -2 }, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ + { 319, -6 }, /* (31) cmd ::= GRANT privileges ON priv_level TO user_name */ + { 319, -6 }, /* (32) cmd ::= REVOKE privileges ON priv_level FROM user_name */ + { 326, -1 }, /* (33) privileges ::= ALL */ + { 326, -1 }, /* (34) privileges ::= priv_type_list */ + { 328, -1 }, /* (35) priv_type_list ::= priv_type */ + { 328, -3 }, /* (36) priv_type_list ::= priv_type_list NK_COMMA priv_type */ + { 329, -1 }, /* (37) priv_type ::= READ */ + { 329, -1 }, /* (38) priv_type ::= WRITE */ + { 327, -3 }, /* (39) priv_level ::= NK_STAR NK_DOT NK_STAR */ + { 327, -3 }, /* (40) priv_level ::= db_name NK_DOT NK_STAR */ + { 319, -3 }, /* (41) cmd ::= CREATE DNODE dnode_endpoint */ + { 319, -5 }, /* (42) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ + { 319, -4 }, /* (43) cmd ::= DROP DNODE NK_INTEGER force_opt */ + { 319, -4 }, /* (44) cmd ::= DROP DNODE dnode_endpoint force_opt */ + { 319, -4 }, /* (45) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ + { 319, -5 }, /* (46) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ + { 319, -4 }, /* (47) cmd ::= ALTER ALL DNODES NK_STRING */ + { 319, -5 }, /* (48) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ + { 331, -1 }, /* (49) dnode_endpoint ::= NK_STRING */ + { 331, -1 }, /* (50) dnode_endpoint ::= NK_ID */ + { 331, -1 }, /* (51) dnode_endpoint ::= NK_IPTOKEN */ + { 332, 0 }, /* (52) force_opt ::= */ + { 332, -1 }, /* (53) force_opt ::= FORCE */ + { 319, -3 }, /* (54) cmd ::= ALTER LOCAL NK_STRING */ + { 319, -4 }, /* (55) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + { 319, -5 }, /* (56) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (57) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (58) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (59) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (60) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (61) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (62) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (63) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (64) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ + { 319, -4 }, /* (65) cmd ::= DROP DATABASE exists_opt db_name */ + { 319, -2 }, /* (66) cmd ::= USE db_name */ + { 319, -4 }, /* (67) cmd ::= ALTER DATABASE db_name alter_db_options */ + { 319, -3 }, /* (68) cmd ::= FLUSH DATABASE db_name */ + { 319, -4 }, /* (69) cmd ::= TRIM DATABASE db_name speed_opt */ + { 333, -3 }, /* (70) not_exists_opt ::= IF NOT EXISTS */ + { 333, 0 }, /* (71) not_exists_opt ::= */ + { 335, -2 }, /* (72) exists_opt ::= IF EXISTS */ + { 335, 0 }, /* (73) exists_opt ::= */ + { 334, 0 }, /* (74) db_options ::= */ + { 334, -3 }, /* (75) db_options ::= db_options BUFFER NK_INTEGER */ + { 334, -3 }, /* (76) db_options ::= db_options CACHEMODEL NK_STRING */ + { 334, -3 }, /* (77) db_options ::= db_options CACHESIZE NK_INTEGER */ + { 334, -3 }, /* (78) db_options ::= db_options COMP NK_INTEGER */ + { 334, -3 }, /* (79) db_options ::= db_options DURATION NK_INTEGER */ + { 334, -3 }, /* (80) db_options ::= db_options DURATION NK_VARIABLE */ + { 334, -3 }, /* (81) db_options ::= db_options MAXROWS NK_INTEGER */ + { 334, -3 }, /* (82) db_options ::= db_options MINROWS NK_INTEGER */ + { 334, -3 }, /* (83) db_options ::= db_options KEEP integer_list */ + { 334, -3 }, /* (84) db_options ::= db_options KEEP variable_list */ + { 334, -3 }, /* (85) db_options ::= db_options PAGES NK_INTEGER */ + { 334, -3 }, /* (86) db_options ::= db_options PAGESIZE NK_INTEGER */ + { 334, -3 }, /* (87) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ + { 334, -3 }, /* (88) db_options ::= db_options PRECISION NK_STRING */ + { 334, -3 }, /* (89) db_options ::= db_options REPLICA NK_INTEGER */ + { 334, -3 }, /* (90) db_options ::= db_options STRICT NK_STRING */ + { 334, -3 }, /* (91) db_options ::= db_options VGROUPS NK_INTEGER */ + { 334, -3 }, /* (92) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ + { 334, -3 }, /* (93) db_options ::= db_options RETENTIONS retention_list */ + { 334, -3 }, /* (94) db_options ::= db_options SCHEMALESS NK_INTEGER */ + { 334, -3 }, /* (95) db_options ::= db_options WAL_LEVEL NK_INTEGER */ + { 334, -3 }, /* (96) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ + { 334, -3 }, /* (97) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ + { 334, -4 }, /* (98) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + { 334, -3 }, /* (99) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ + { 334, -4 }, /* (100) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + { 334, -3 }, /* (101) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ + { 334, -3 }, /* (102) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ + { 334, -3 }, /* (103) db_options ::= db_options STT_TRIGGER NK_INTEGER */ + { 334, -3 }, /* (104) db_options ::= db_options TABLE_PREFIX NK_INTEGER */ + { 334, -3 }, /* (105) db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ + { 336, -1 }, /* (106) alter_db_options ::= alter_db_option */ + { 336, -2 }, /* (107) alter_db_options ::= alter_db_options alter_db_option */ + { 341, -2 }, /* (108) alter_db_option ::= BUFFER NK_INTEGER */ + { 341, -2 }, /* (109) alter_db_option ::= CACHEMODEL NK_STRING */ + { 341, -2 }, /* (110) alter_db_option ::= CACHESIZE NK_INTEGER */ + { 341, -2 }, /* (111) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ + { 341, -2 }, /* (112) alter_db_option ::= KEEP integer_list */ + { 341, -2 }, /* (113) alter_db_option ::= KEEP variable_list */ + { 341, -2 }, /* (114) alter_db_option ::= PAGES NK_INTEGER */ + { 341, -2 }, /* (115) alter_db_option ::= REPLICA NK_INTEGER */ + { 341, -2 }, /* (116) alter_db_option ::= STRICT NK_STRING */ + { 341, -2 }, /* (117) alter_db_option ::= WAL_LEVEL NK_INTEGER */ + { 341, -2 }, /* (118) alter_db_option ::= STT_TRIGGER NK_INTEGER */ + { 338, -1 }, /* (119) integer_list ::= NK_INTEGER */ + { 338, -3 }, /* (120) integer_list ::= integer_list NK_COMMA NK_INTEGER */ + { 339, -1 }, /* (121) variable_list ::= NK_VARIABLE */ + { 339, -3 }, /* (122) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ + { 340, -1 }, /* (123) retention_list ::= retention */ + { 340, -3 }, /* (124) retention_list ::= retention_list NK_COMMA retention */ + { 342, -3 }, /* (125) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ + { 337, 0 }, /* (126) speed_opt ::= */ + { 337, -2 }, /* (127) speed_opt ::= MAX_SPEED NK_INTEGER */ + { 319, -9 }, /* (128) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + { 319, -3 }, /* (129) cmd ::= CREATE TABLE multi_create_clause */ + { 319, -9 }, /* (130) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ + { 319, -3 }, /* (131) cmd ::= DROP TABLE multi_drop_clause */ + { 319, -4 }, /* (132) cmd ::= DROP STABLE exists_opt full_table_name */ + { 319, -3 }, /* (133) cmd ::= ALTER TABLE alter_table_clause */ + { 319, -3 }, /* (134) cmd ::= ALTER STABLE alter_table_clause */ + { 350, -2 }, /* (135) alter_table_clause ::= full_table_name alter_table_options */ + { 350, -5 }, /* (136) alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ + { 350, -4 }, /* (137) alter_table_clause ::= full_table_name DROP COLUMN column_name */ + { 350, -5 }, /* (138) alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ + { 350, -5 }, /* (139) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ + { 350, -5 }, /* (140) alter_table_clause ::= full_table_name ADD TAG column_name type_name */ + { 350, -4 }, /* (141) alter_table_clause ::= full_table_name DROP TAG column_name */ + { 350, -5 }, /* (142) alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ + { 350, -5 }, /* (143) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ + { 350, -6 }, /* (144) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ + { 347, -1 }, /* (145) multi_create_clause ::= create_subtable_clause */ + { 347, -2 }, /* (146) multi_create_clause ::= multi_create_clause create_subtable_clause */ + { 355, -10 }, /* (147) create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ + { 349, -1 }, /* (148) multi_drop_clause ::= drop_table_clause */ + { 349, -2 }, /* (149) multi_drop_clause ::= multi_drop_clause drop_table_clause */ + { 358, -2 }, /* (150) drop_table_clause ::= exists_opt full_table_name */ + { 356, 0 }, /* (151) specific_cols_opt ::= */ + { 356, -3 }, /* (152) specific_cols_opt ::= NK_LP col_name_list NK_RP */ + { 343, -1 }, /* (153) full_table_name ::= table_name */ + { 343, -3 }, /* (154) full_table_name ::= db_name NK_DOT table_name */ + { 344, -1 }, /* (155) column_def_list ::= column_def */ + { 344, -3 }, /* (156) column_def_list ::= column_def_list NK_COMMA column_def */ + { 361, -2 }, /* (157) column_def ::= column_name type_name */ + { 361, -4 }, /* (158) column_def ::= column_name type_name COMMENT NK_STRING */ + { 353, -1 }, /* (159) type_name ::= BOOL */ + { 353, -1 }, /* (160) type_name ::= TINYINT */ + { 353, -1 }, /* (161) type_name ::= SMALLINT */ + { 353, -1 }, /* (162) type_name ::= INT */ + { 353, -1 }, /* (163) type_name ::= INTEGER */ + { 353, -1 }, /* (164) type_name ::= BIGINT */ + { 353, -1 }, /* (165) type_name ::= FLOAT */ + { 353, -1 }, /* (166) type_name ::= DOUBLE */ + { 353, -4 }, /* (167) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ + { 353, -1 }, /* (168) type_name ::= TIMESTAMP */ + { 353, -4 }, /* (169) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ + { 353, -2 }, /* (170) type_name ::= TINYINT UNSIGNED */ + { 353, -2 }, /* (171) type_name ::= SMALLINT UNSIGNED */ + { 353, -2 }, /* (172) type_name ::= INT UNSIGNED */ + { 353, -2 }, /* (173) type_name ::= BIGINT UNSIGNED */ + { 353, -1 }, /* (174) type_name ::= JSON */ + { 353, -4 }, /* (175) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ + { 353, -1 }, /* (176) type_name ::= MEDIUMBLOB */ + { 353, -1 }, /* (177) type_name ::= BLOB */ + { 353, -4 }, /* (178) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ + { 353, -1 }, /* (179) type_name ::= DECIMAL */ + { 353, -4 }, /* (180) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ + { 353, -6 }, /* (181) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ + { 345, 0 }, /* (182) tags_def_opt ::= */ + { 345, -1 }, /* (183) tags_def_opt ::= tags_def */ + { 348, -4 }, /* (184) tags_def ::= TAGS NK_LP column_def_list NK_RP */ + { 346, 0 }, /* (185) table_options ::= */ + { 346, -3 }, /* (186) table_options ::= table_options COMMENT NK_STRING */ + { 346, -3 }, /* (187) table_options ::= table_options MAX_DELAY duration_list */ + { 346, -3 }, /* (188) table_options ::= table_options WATERMARK duration_list */ + { 346, -5 }, /* (189) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ + { 346, -3 }, /* (190) table_options ::= table_options TTL NK_INTEGER */ + { 346, -5 }, /* (191) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ + { 351, -1 }, /* (192) alter_table_options ::= alter_table_option */ + { 351, -2 }, /* (193) alter_table_options ::= alter_table_options alter_table_option */ + { 364, -2 }, /* (194) alter_table_option ::= COMMENT NK_STRING */ + { 364, -2 }, /* (195) alter_table_option ::= TTL NK_INTEGER */ + { 362, -1 }, /* (196) duration_list ::= duration_literal */ + { 362, -3 }, /* (197) duration_list ::= duration_list NK_COMMA duration_literal */ + { 363, -1 }, /* (198) rollup_func_list ::= rollup_func_name */ + { 363, -3 }, /* (199) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ + { 366, -1 }, /* (200) rollup_func_name ::= function_name */ + { 366, -1 }, /* (201) rollup_func_name ::= FIRST */ + { 366, -1 }, /* (202) rollup_func_name ::= LAST */ + { 359, -1 }, /* (203) col_name_list ::= col_name */ + { 359, -3 }, /* (204) col_name_list ::= col_name_list NK_COMMA col_name */ + { 368, -1 }, /* (205) col_name ::= column_name */ + { 319, -2 }, /* (206) cmd ::= SHOW DNODES */ + { 319, -2 }, /* (207) cmd ::= SHOW USERS */ + { 319, -2 }, /* (208) cmd ::= SHOW DATABASES */ + { 319, -4 }, /* (209) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ + { 319, -4 }, /* (210) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ + { 319, -3 }, /* (211) cmd ::= SHOW db_name_cond_opt VGROUPS */ + { 319, -2 }, /* (212) cmd ::= SHOW MNODES */ + { 319, -2 }, /* (213) cmd ::= SHOW QNODES */ + { 319, -2 }, /* (214) cmd ::= SHOW FUNCTIONS */ + { 319, -5 }, /* (215) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ + { 319, -2 }, /* (216) cmd ::= SHOW STREAMS */ + { 319, -2 }, /* (217) cmd ::= SHOW ACCOUNTS */ + { 319, -2 }, /* (218) cmd ::= SHOW APPS */ + { 319, -2 }, /* (219) cmd ::= SHOW CONNECTIONS */ + { 319, -2 }, /* (220) cmd ::= SHOW LICENCES */ + { 319, -2 }, /* (221) cmd ::= SHOW GRANTS */ + { 319, -4 }, /* (222) cmd ::= SHOW CREATE DATABASE db_name */ + { 319, -4 }, /* (223) cmd ::= SHOW CREATE TABLE full_table_name */ + { 319, -4 }, /* (224) cmd ::= SHOW CREATE STABLE full_table_name */ + { 319, -2 }, /* (225) cmd ::= SHOW QUERIES */ + { 319, -2 }, /* (226) cmd ::= SHOW SCORES */ + { 319, -2 }, /* (227) cmd ::= SHOW TOPICS */ + { 319, -2 }, /* (228) cmd ::= SHOW VARIABLES */ + { 319, -3 }, /* (229) cmd ::= SHOW CLUSTER VARIABLES */ + { 319, -3 }, /* (230) cmd ::= SHOW LOCAL VARIABLES */ + { 319, -5 }, /* (231) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ + { 319, -2 }, /* (232) cmd ::= SHOW BNODES */ + { 319, -2 }, /* (233) cmd ::= SHOW SNODES */ + { 319, -2 }, /* (234) cmd ::= SHOW CLUSTER */ + { 319, -2 }, /* (235) cmd ::= SHOW TRANSACTIONS */ + { 319, -4 }, /* (236) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ + { 319, -2 }, /* (237) cmd ::= SHOW CONSUMERS */ + { 319, -2 }, /* (238) cmd ::= SHOW SUBSCRIPTIONS */ + { 319, -5 }, /* (239) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ + { 319, -6 }, /* (240) cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ + { 319, -3 }, /* (241) cmd ::= SHOW VNODES NK_INTEGER */ + { 319, -3 }, /* (242) cmd ::= SHOW VNODES NK_STRING */ + { 369, 0 }, /* (243) db_name_cond_opt ::= */ + { 369, -2 }, /* (244) db_name_cond_opt ::= db_name NK_DOT */ + { 370, 0 }, /* (245) like_pattern_opt ::= */ + { 370, -2 }, /* (246) like_pattern_opt ::= LIKE NK_STRING */ + { 371, -1 }, /* (247) table_name_cond ::= table_name */ + { 372, 0 }, /* (248) from_db_opt ::= */ + { 372, -2 }, /* (249) from_db_opt ::= FROM db_name */ + { 319, -8 }, /* (250) cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */ + { 319, -4 }, /* (251) cmd ::= DROP INDEX exists_opt full_table_name */ + { 373, -10 }, /* (252) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ + { 373, -12 }, /* (253) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ + { 374, -1 }, /* (254) func_list ::= func */ + { 374, -3 }, /* (255) func_list ::= func_list NK_COMMA func */ + { 377, -4 }, /* (256) func ::= function_name NK_LP expression_list NK_RP */ + { 376, 0 }, /* (257) sma_stream_opt ::= */ + { 376, -3 }, /* (258) sma_stream_opt ::= stream_options WATERMARK duration_literal */ + { 376, -3 }, /* (259) sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ + { 319, -6 }, /* (260) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ + { 319, -7 }, /* (261) cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ + { 319, -9 }, /* (262) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ + { 319, -7 }, /* (263) cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ + { 319, -9 }, /* (264) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ + { 319, -4 }, /* (265) cmd ::= DROP TOPIC exists_opt topic_name */ + { 319, -7 }, /* (266) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ + { 319, -2 }, /* (267) cmd ::= DESC full_table_name */ + { 319, -2 }, /* (268) cmd ::= DESCRIBE full_table_name */ + { 319, -3 }, /* (269) cmd ::= RESET QUERY CACHE */ + { 319, -4 }, /* (270) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ + { 382, 0 }, /* (271) analyze_opt ::= */ + { 382, -1 }, /* (272) analyze_opt ::= ANALYZE */ + { 383, 0 }, /* (273) explain_options ::= */ + { 383, -3 }, /* (274) explain_options ::= explain_options VERBOSE NK_BOOL */ + { 383, -3 }, /* (275) explain_options ::= explain_options RATIO NK_FLOAT */ + { 319, -10 }, /* (276) cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ + { 319, -4 }, /* (277) cmd ::= DROP FUNCTION exists_opt function_name */ + { 384, 0 }, /* (278) agg_func_opt ::= */ + { 384, -1 }, /* (279) agg_func_opt ::= AGGREGATE */ + { 385, 0 }, /* (280) bufsize_opt ::= */ + { 385, -2 }, /* (281) bufsize_opt ::= BUFSIZE NK_INTEGER */ + { 319, -11 }, /* (282) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */ + { 319, -4 }, /* (283) cmd ::= DROP STREAM exists_opt stream_name */ + { 378, 0 }, /* (284) stream_options ::= */ + { 378, -3 }, /* (285) stream_options ::= stream_options TRIGGER AT_ONCE */ + { 378, -3 }, /* (286) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ + { 378, -4 }, /* (287) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ + { 378, -3 }, /* (288) stream_options ::= stream_options WATERMARK duration_literal */ + { 378, -4 }, /* (289) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ + { 378, -3 }, /* (290) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ + { 387, 0 }, /* (291) subtable_opt ::= */ + { 387, -4 }, /* (292) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + { 319, -3 }, /* (293) cmd ::= KILL CONNECTION NK_INTEGER */ + { 319, -3 }, /* (294) cmd ::= KILL QUERY NK_STRING */ + { 319, -3 }, /* (295) cmd ::= KILL TRANSACTION NK_INTEGER */ + { 319, -2 }, /* (296) cmd ::= BALANCE VGROUP */ + { 319, -4 }, /* (297) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + { 319, -4 }, /* (298) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ + { 319, -3 }, /* (299) cmd ::= SPLIT VGROUP NK_INTEGER */ + { 389, -2 }, /* (300) dnode_list ::= DNODE NK_INTEGER */ + { 389, -3 }, /* (301) dnode_list ::= dnode_list DNODE NK_INTEGER */ + { 319, -4 }, /* (302) cmd ::= DELETE FROM full_table_name where_clause_opt */ + { 319, -1 }, /* (303) cmd ::= query_or_subquery */ + { 319, -7 }, /* (304) cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ + { 319, -4 }, /* (305) cmd ::= INSERT INTO full_table_name query_or_subquery */ + { 322, -1 }, /* (306) literal ::= NK_INTEGER */ + { 322, -1 }, /* (307) literal ::= NK_FLOAT */ + { 322, -1 }, /* (308) literal ::= NK_STRING */ + { 322, -1 }, /* (309) literal ::= NK_BOOL */ + { 322, -2 }, /* (310) literal ::= TIMESTAMP NK_STRING */ + { 322, -1 }, /* (311) literal ::= duration_literal */ + { 322, -1 }, /* (312) literal ::= NULL */ + { 322, -1 }, /* (313) literal ::= NK_QUESTION */ + { 365, -1 }, /* (314) duration_literal ::= NK_VARIABLE */ + { 391, -1 }, /* (315) signed ::= NK_INTEGER */ + { 391, -2 }, /* (316) signed ::= NK_PLUS NK_INTEGER */ + { 391, -2 }, /* (317) signed ::= NK_MINUS NK_INTEGER */ + { 391, -1 }, /* (318) signed ::= NK_FLOAT */ + { 391, -2 }, /* (319) signed ::= NK_PLUS NK_FLOAT */ + { 391, -2 }, /* (320) signed ::= NK_MINUS NK_FLOAT */ + { 354, -1 }, /* (321) signed_literal ::= signed */ + { 354, -1 }, /* (322) signed_literal ::= NK_STRING */ + { 354, -1 }, /* (323) signed_literal ::= NK_BOOL */ + { 354, -2 }, /* (324) signed_literal ::= TIMESTAMP NK_STRING */ + { 354, -1 }, /* (325) signed_literal ::= duration_literal */ + { 354, -1 }, /* (326) signed_literal ::= NULL */ + { 354, -1 }, /* (327) signed_literal ::= literal_func */ + { 354, -1 }, /* (328) signed_literal ::= NK_QUESTION */ + { 393, -1 }, /* (329) literal_list ::= signed_literal */ + { 393, -3 }, /* (330) literal_list ::= literal_list NK_COMMA signed_literal */ + { 330, -1 }, /* (331) db_name ::= NK_ID */ + { 360, -1 }, /* (332) table_name ::= NK_ID */ + { 352, -1 }, /* (333) column_name ::= NK_ID */ + { 367, -1 }, /* (334) function_name ::= NK_ID */ + { 394, -1 }, /* (335) table_alias ::= NK_ID */ + { 395, -1 }, /* (336) column_alias ::= NK_ID */ + { 324, -1 }, /* (337) user_name ::= NK_ID */ + { 379, -1 }, /* (338) topic_name ::= NK_ID */ + { 386, -1 }, /* (339) stream_name ::= NK_ID */ + { 381, -1 }, /* (340) cgroup_name ::= NK_ID */ + { 396, -1 }, /* (341) expr_or_subquery ::= expression */ + { 396, -1 }, /* (342) expr_or_subquery ::= subquery */ + { 388, -1 }, /* (343) expression ::= literal */ + { 388, -1 }, /* (344) expression ::= pseudo_column */ + { 388, -1 }, /* (345) expression ::= column_reference */ + { 388, -1 }, /* (346) expression ::= function_expression */ + { 388, -1 }, /* (347) expression ::= case_when_expression */ + { 388, -3 }, /* (348) expression ::= NK_LP expression NK_RP */ + { 388, -2 }, /* (349) expression ::= NK_PLUS expr_or_subquery */ + { 388, -2 }, /* (350) expression ::= NK_MINUS expr_or_subquery */ + { 388, -3 }, /* (351) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + { 388, -3 }, /* (352) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + { 388, -3 }, /* (353) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + { 388, -3 }, /* (354) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + { 388, -3 }, /* (355) expression ::= expr_or_subquery NK_REM expr_or_subquery */ + { 388, -3 }, /* (356) expression ::= column_reference NK_ARROW NK_STRING */ + { 388, -3 }, /* (357) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + { 388, -3 }, /* (358) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + { 357, -1 }, /* (359) expression_list ::= expr_or_subquery */ + { 357, -3 }, /* (360) expression_list ::= expression_list NK_COMMA expr_or_subquery */ + { 399, -1 }, /* (361) column_reference ::= column_name */ + { 399, -3 }, /* (362) column_reference ::= table_name NK_DOT column_name */ + { 398, -1 }, /* (363) pseudo_column ::= ROWTS */ + { 398, -1 }, /* (364) pseudo_column ::= TBNAME */ + { 398, -3 }, /* (365) pseudo_column ::= table_name NK_DOT TBNAME */ + { 398, -1 }, /* (366) pseudo_column ::= QSTART */ + { 398, -1 }, /* (367) pseudo_column ::= QEND */ + { 398, -1 }, /* (368) pseudo_column ::= QDURATION */ + { 398, -1 }, /* (369) pseudo_column ::= WSTART */ + { 398, -1 }, /* (370) pseudo_column ::= WEND */ + { 398, -1 }, /* (371) pseudo_column ::= WDURATION */ + { 398, -1 }, /* (372) pseudo_column ::= IROWTS */ + { 398, -1 }, /* (373) pseudo_column ::= QTAGS */ + { 400, -4 }, /* (374) function_expression ::= function_name NK_LP expression_list NK_RP */ + { 400, -4 }, /* (375) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ + { 400, -6 }, /* (376) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ + { 400, -1 }, /* (377) function_expression ::= literal_func */ + { 392, -3 }, /* (378) literal_func ::= noarg_func NK_LP NK_RP */ + { 392, -1 }, /* (379) literal_func ::= NOW */ + { 404, -1 }, /* (380) noarg_func ::= NOW */ + { 404, -1 }, /* (381) noarg_func ::= TODAY */ + { 404, -1 }, /* (382) noarg_func ::= TIMEZONE */ + { 404, -1 }, /* (383) noarg_func ::= DATABASE */ + { 404, -1 }, /* (384) noarg_func ::= CLIENT_VERSION */ + { 404, -1 }, /* (385) noarg_func ::= SERVER_VERSION */ + { 404, -1 }, /* (386) noarg_func ::= SERVER_STATUS */ + { 404, -1 }, /* (387) noarg_func ::= CURRENT_USER */ + { 404, -1 }, /* (388) noarg_func ::= USER */ + { 402, -1 }, /* (389) star_func ::= COUNT */ + { 402, -1 }, /* (390) star_func ::= FIRST */ + { 402, -1 }, /* (391) star_func ::= LAST */ + { 402, -1 }, /* (392) star_func ::= LAST_ROW */ + { 403, -1 }, /* (393) star_func_para_list ::= NK_STAR */ + { 403, -1 }, /* (394) star_func_para_list ::= other_para_list */ + { 405, -1 }, /* (395) other_para_list ::= star_func_para */ + { 405, -3 }, /* (396) other_para_list ::= other_para_list NK_COMMA star_func_para */ + { 406, -1 }, /* (397) star_func_para ::= expr_or_subquery */ + { 406, -3 }, /* (398) star_func_para ::= table_name NK_DOT NK_STAR */ + { 401, -4 }, /* (399) case_when_expression ::= CASE when_then_list case_when_else_opt END */ + { 401, -5 }, /* (400) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ + { 407, -1 }, /* (401) when_then_list ::= when_then_expr */ + { 407, -2 }, /* (402) when_then_list ::= when_then_list when_then_expr */ + { 410, -4 }, /* (403) when_then_expr ::= WHEN common_expression THEN common_expression */ + { 408, 0 }, /* (404) case_when_else_opt ::= */ + { 408, -2 }, /* (405) case_when_else_opt ::= ELSE common_expression */ + { 411, -3 }, /* (406) predicate ::= expr_or_subquery compare_op expr_or_subquery */ + { 411, -5 }, /* (407) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + { 411, -6 }, /* (408) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + { 411, -3 }, /* (409) predicate ::= expr_or_subquery IS NULL */ + { 411, -4 }, /* (410) predicate ::= expr_or_subquery IS NOT NULL */ + { 411, -3 }, /* (411) predicate ::= expr_or_subquery in_op in_predicate_value */ + { 412, -1 }, /* (412) compare_op ::= NK_LT */ + { 412, -1 }, /* (413) compare_op ::= NK_GT */ + { 412, -1 }, /* (414) compare_op ::= NK_LE */ + { 412, -1 }, /* (415) compare_op ::= NK_GE */ + { 412, -1 }, /* (416) compare_op ::= NK_NE */ + { 412, -1 }, /* (417) compare_op ::= NK_EQ */ + { 412, -1 }, /* (418) compare_op ::= LIKE */ + { 412, -2 }, /* (419) compare_op ::= NOT LIKE */ + { 412, -1 }, /* (420) compare_op ::= MATCH */ + { 412, -1 }, /* (421) compare_op ::= NMATCH */ + { 412, -1 }, /* (422) compare_op ::= CONTAINS */ + { 413, -1 }, /* (423) in_op ::= IN */ + { 413, -2 }, /* (424) in_op ::= NOT IN */ + { 414, -3 }, /* (425) in_predicate_value ::= NK_LP literal_list NK_RP */ + { 415, -1 }, /* (426) boolean_value_expression ::= boolean_primary */ + { 415, -2 }, /* (427) boolean_value_expression ::= NOT boolean_primary */ + { 415, -3 }, /* (428) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + { 415, -3 }, /* (429) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + { 416, -1 }, /* (430) boolean_primary ::= predicate */ + { 416, -3 }, /* (431) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ + { 409, -1 }, /* (432) common_expression ::= expr_or_subquery */ + { 409, -1 }, /* (433) common_expression ::= boolean_value_expression */ + { 417, 0 }, /* (434) from_clause_opt ::= */ + { 417, -2 }, /* (435) from_clause_opt ::= FROM table_reference_list */ + { 418, -1 }, /* (436) table_reference_list ::= table_reference */ + { 418, -3 }, /* (437) table_reference_list ::= table_reference_list NK_COMMA table_reference */ + { 419, -1 }, /* (438) table_reference ::= table_primary */ + { 419, -1 }, /* (439) table_reference ::= joined_table */ + { 420, -2 }, /* (440) table_primary ::= table_name alias_opt */ + { 420, -4 }, /* (441) table_primary ::= db_name NK_DOT table_name alias_opt */ + { 420, -2 }, /* (442) table_primary ::= subquery alias_opt */ + { 420, -1 }, /* (443) table_primary ::= parenthesized_joined_table */ + { 422, 0 }, /* (444) alias_opt ::= */ + { 422, -1 }, /* (445) alias_opt ::= table_alias */ + { 422, -2 }, /* (446) alias_opt ::= AS table_alias */ + { 423, -3 }, /* (447) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + { 423, -3 }, /* (448) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ + { 421, -6 }, /* (449) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ + { 424, 0 }, /* (450) join_type ::= */ + { 424, -1 }, /* (451) join_type ::= INNER */ + { 426, -12 }, /* (452) 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 */ + { 427, 0 }, /* (453) set_quantifier_opt ::= */ + { 427, -1 }, /* (454) set_quantifier_opt ::= DISTINCT */ + { 427, -1 }, /* (455) set_quantifier_opt ::= ALL */ + { 428, -1 }, /* (456) select_list ::= select_item */ + { 428, -3 }, /* (457) select_list ::= select_list NK_COMMA select_item */ + { 436, -1 }, /* (458) select_item ::= NK_STAR */ + { 436, -1 }, /* (459) select_item ::= common_expression */ + { 436, -2 }, /* (460) select_item ::= common_expression column_alias */ + { 436, -3 }, /* (461) select_item ::= common_expression AS column_alias */ + { 436, -3 }, /* (462) select_item ::= table_name NK_DOT NK_STAR */ + { 390, 0 }, /* (463) where_clause_opt ::= */ + { 390, -2 }, /* (464) where_clause_opt ::= WHERE search_condition */ + { 429, 0 }, /* (465) partition_by_clause_opt ::= */ + { 429, -3 }, /* (466) partition_by_clause_opt ::= PARTITION BY partition_list */ + { 437, -1 }, /* (467) partition_list ::= partition_item */ + { 437, -3 }, /* (468) partition_list ::= partition_list NK_COMMA partition_item */ + { 438, -1 }, /* (469) partition_item ::= expr_or_subquery */ + { 438, -2 }, /* (470) partition_item ::= expr_or_subquery column_alias */ + { 438, -3 }, /* (471) partition_item ::= expr_or_subquery AS column_alias */ + { 433, 0 }, /* (472) twindow_clause_opt ::= */ + { 433, -6 }, /* (473) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ + { 433, -4 }, /* (474) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ + { 433, -6 }, /* (475) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ + { 433, -8 }, /* (476) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ + { 375, 0 }, /* (477) sliding_opt ::= */ + { 375, -4 }, /* (478) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ + { 432, 0 }, /* (479) fill_opt ::= */ + { 432, -4 }, /* (480) fill_opt ::= FILL NK_LP fill_mode NK_RP */ + { 432, -6 }, /* (481) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ + { 439, -1 }, /* (482) fill_mode ::= NONE */ + { 439, -1 }, /* (483) fill_mode ::= PREV */ + { 439, -1 }, /* (484) fill_mode ::= NULL */ + { 439, -1 }, /* (485) fill_mode ::= LINEAR */ + { 439, -1 }, /* (486) fill_mode ::= NEXT */ + { 434, 0 }, /* (487) group_by_clause_opt ::= */ + { 434, -3 }, /* (488) group_by_clause_opt ::= GROUP BY group_by_list */ + { 440, -1 }, /* (489) group_by_list ::= expr_or_subquery */ + { 440, -3 }, /* (490) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ + { 435, 0 }, /* (491) having_clause_opt ::= */ + { 435, -2 }, /* (492) having_clause_opt ::= HAVING search_condition */ + { 430, 0 }, /* (493) range_opt ::= */ + { 430, -6 }, /* (494) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ + { 431, 0 }, /* (495) every_opt ::= */ + { 431, -4 }, /* (496) every_opt ::= EVERY NK_LP duration_literal NK_RP */ + { 441, -4 }, /* (497) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + { 442, -1 }, /* (498) query_simple ::= query_specification */ + { 442, -1 }, /* (499) query_simple ::= union_query_expression */ + { 446, -4 }, /* (500) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ + { 446, -3 }, /* (501) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ + { 447, -1 }, /* (502) query_simple_or_subquery ::= query_simple */ + { 447, -1 }, /* (503) query_simple_or_subquery ::= subquery */ + { 380, -1 }, /* (504) query_or_subquery ::= query_expression */ + { 380, -1 }, /* (505) query_or_subquery ::= subquery */ + { 443, 0 }, /* (506) order_by_clause_opt ::= */ + { 443, -3 }, /* (507) order_by_clause_opt ::= ORDER BY sort_specification_list */ + { 444, 0 }, /* (508) slimit_clause_opt ::= */ + { 444, -2 }, /* (509) slimit_clause_opt ::= SLIMIT NK_INTEGER */ + { 444, -4 }, /* (510) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + { 444, -4 }, /* (511) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 445, 0 }, /* (512) limit_clause_opt ::= */ + { 445, -2 }, /* (513) limit_clause_opt ::= LIMIT NK_INTEGER */ + { 445, -4 }, /* (514) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ + { 445, -4 }, /* (515) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 397, -3 }, /* (516) subquery ::= NK_LP query_expression NK_RP */ + { 397, -3 }, /* (517) subquery ::= NK_LP subquery NK_RP */ + { 425, -1 }, /* (518) search_condition ::= common_expression */ + { 448, -1 }, /* (519) sort_specification_list ::= sort_specification */ + { 448, -3 }, /* (520) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ + { 449, -3 }, /* (521) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ + { 450, 0 }, /* (522) ordering_specification_opt ::= */ + { 450, -1 }, /* (523) ordering_specification_opt ::= ASC */ + { 450, -1 }, /* (524) ordering_specification_opt ::= DESC */ + { 451, 0 }, /* (525) null_ordering_opt ::= */ + { 451, -2 }, /* (526) null_ordering_opt ::= NULLS FIRST */ + { 451, -2 }, /* (527) null_ordering_opt ::= NULLS LAST */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -3592,11 +3708,11 @@ static YYACTIONTYPE yy_reduce( YYMINORTYPE yylhsminor; case 0: /* cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } - yy_destructor(yypParser,319,&yymsp[0].minor); + yy_destructor(yypParser,320,&yymsp[0].minor); break; case 1: /* cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } - yy_destructor(yypParser,320,&yymsp[0].minor); + yy_destructor(yypParser,321,&yymsp[0].minor); break; case 2: /* account_options ::= */ { } @@ -3610,20 +3726,20 @@ static YYACTIONTYPE yy_reduce( case 9: /* account_options ::= account_options USERS literal */ yytestcase(yyruleno==9); case 10: /* account_options ::= account_options CONNS literal */ yytestcase(yyruleno==10); case 11: /* account_options ::= account_options STATE literal */ yytestcase(yyruleno==11); -{ yy_destructor(yypParser,319,&yymsp[-2].minor); +{ yy_destructor(yypParser,320,&yymsp[-2].minor); { } - yy_destructor(yypParser,321,&yymsp[0].minor); + yy_destructor(yypParser,322,&yymsp[0].minor); } break; case 12: /* alter_account_options ::= alter_account_option */ -{ yy_destructor(yypParser,322,&yymsp[0].minor); +{ yy_destructor(yypParser,323,&yymsp[0].minor); { } } break; case 13: /* alter_account_options ::= alter_account_options alter_account_option */ -{ yy_destructor(yypParser,320,&yymsp[-1].minor); +{ yy_destructor(yypParser,321,&yymsp[-1].minor); { } - yy_destructor(yypParser,322,&yymsp[0].minor); + yy_destructor(yypParser,323,&yymsp[0].minor); } break; case 14: /* alter_account_option ::= PASS literal */ @@ -3637,72 +3753,72 @@ static YYACTIONTYPE yy_reduce( case 22: /* alter_account_option ::= CONNS literal */ yytestcase(yyruleno==22); case 23: /* alter_account_option ::= STATE literal */ yytestcase(yyruleno==23); { } - yy_destructor(yypParser,321,&yymsp[0].minor); + yy_destructor(yypParser,322,&yymsp[0].minor); break; case 24: /* cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ -{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy29, &yymsp[-1].minor.yy0, yymsp[0].minor.yy503); } +{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy481, &yymsp[-1].minor.yy0, yymsp[0].minor.yy607); } break; case 25: /* cmd ::= ALTER USER user_name PASS NK_STRING */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy29, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy481, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); } break; case 26: /* cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy29, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy481, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); } break; case 27: /* cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy29, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy481, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } break; case 28: /* cmd ::= DROP USER user_name */ -{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy29); } +{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy481); } break; case 29: /* sysinfo_opt ::= */ -{ yymsp[1].minor.yy503 = 1; } +{ yymsp[1].minor.yy607 = 1; } break; case 30: /* sysinfo_opt ::= SYSINFO NK_INTEGER */ -{ yymsp[-1].minor.yy503 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); } +{ yymsp[-1].minor.yy607 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); } break; case 31: /* cmd ::= GRANT privileges ON priv_level TO user_name */ -{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-4].minor.yy9, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29); } +{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-4].minor.yy37, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481); } break; case 32: /* cmd ::= REVOKE privileges ON priv_level FROM user_name */ -{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy9, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29); } +{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy37, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481); } break; case 33: /* privileges ::= ALL */ -{ yymsp[0].minor.yy9 = PRIVILEGE_TYPE_ALL; } +{ yymsp[0].minor.yy37 = PRIVILEGE_TYPE_ALL; } break; case 34: /* privileges ::= priv_type_list */ case 35: /* priv_type_list ::= priv_type */ yytestcase(yyruleno==35); -{ yylhsminor.yy9 = yymsp[0].minor.yy9; } - yymsp[0].minor.yy9 = yylhsminor.yy9; +{ yylhsminor.yy37 = yymsp[0].minor.yy37; } + yymsp[0].minor.yy37 = yylhsminor.yy37; break; case 36: /* priv_type_list ::= priv_type_list NK_COMMA priv_type */ -{ yylhsminor.yy9 = yymsp[-2].minor.yy9 | yymsp[0].minor.yy9; } - yymsp[-2].minor.yy9 = yylhsminor.yy9; +{ yylhsminor.yy37 = yymsp[-2].minor.yy37 | yymsp[0].minor.yy37; } + yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 37: /* priv_type ::= READ */ -{ yymsp[0].minor.yy9 = PRIVILEGE_TYPE_READ; } +{ yymsp[0].minor.yy37 = PRIVILEGE_TYPE_READ; } break; case 38: /* priv_type ::= WRITE */ -{ yymsp[0].minor.yy9 = PRIVILEGE_TYPE_WRITE; } +{ yymsp[0].minor.yy37 = PRIVILEGE_TYPE_WRITE; } break; case 39: /* priv_level ::= NK_STAR NK_DOT NK_STAR */ -{ yylhsminor.yy29 = yymsp[-2].minor.yy0; } - yymsp[-2].minor.yy29 = yylhsminor.yy29; +{ yylhsminor.yy481 = yymsp[-2].minor.yy0; } + yymsp[-2].minor.yy481 = yylhsminor.yy481; break; case 40: /* priv_level ::= db_name NK_DOT NK_STAR */ -{ yylhsminor.yy29 = yymsp[-2].minor.yy29; } - yymsp[-2].minor.yy29 = yylhsminor.yy29; +{ yylhsminor.yy481 = yymsp[-2].minor.yy481; } + yymsp[-2].minor.yy481 = yylhsminor.yy481; break; case 41: /* cmd ::= CREATE DNODE dnode_endpoint */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy29, NULL); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy481, NULL); } break; case 42: /* cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0); } break; - case 43: /* cmd ::= DROP DNODE NK_INTEGER */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy0); } + case 43: /* cmd ::= DROP DNODE NK_INTEGER force_opt */ +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy777); } break; - case 44: /* cmd ::= DROP DNODE dnode_endpoint */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy29); } + case 44: /* cmd ::= DROP DNODE dnode_endpoint force_opt */ +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy777); } break; case 45: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, NULL); } @@ -3719,1388 +3835,1390 @@ static YYACTIONTYPE yy_reduce( case 49: /* dnode_endpoint ::= NK_STRING */ case 50: /* dnode_endpoint ::= NK_ID */ yytestcase(yyruleno==50); case 51: /* dnode_endpoint ::= NK_IPTOKEN */ yytestcase(yyruleno==51); - case 329: /* db_name ::= NK_ID */ yytestcase(yyruleno==329); - case 330: /* table_name ::= NK_ID */ yytestcase(yyruleno==330); - case 331: /* column_name ::= NK_ID */ yytestcase(yyruleno==331); - case 332: /* function_name ::= NK_ID */ yytestcase(yyruleno==332); - case 333: /* table_alias ::= NK_ID */ yytestcase(yyruleno==333); - case 334: /* column_alias ::= NK_ID */ yytestcase(yyruleno==334); - case 335: /* user_name ::= NK_ID */ yytestcase(yyruleno==335); - case 336: /* topic_name ::= NK_ID */ yytestcase(yyruleno==336); - case 337: /* stream_name ::= NK_ID */ yytestcase(yyruleno==337); - case 338: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==338); - case 378: /* noarg_func ::= NOW */ yytestcase(yyruleno==378); - case 379: /* noarg_func ::= TODAY */ yytestcase(yyruleno==379); - case 380: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==380); - case 381: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==381); - case 382: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==382); - case 383: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==383); - case 384: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==384); - case 385: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==385); - case 386: /* noarg_func ::= USER */ yytestcase(yyruleno==386); - case 387: /* star_func ::= COUNT */ yytestcase(yyruleno==387); - case 388: /* star_func ::= FIRST */ yytestcase(yyruleno==388); - case 389: /* star_func ::= LAST */ yytestcase(yyruleno==389); - case 390: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==390); -{ yylhsminor.yy29 = yymsp[0].minor.yy0; } - yymsp[0].minor.yy29 = yylhsminor.yy29; + case 331: /* db_name ::= NK_ID */ yytestcase(yyruleno==331); + case 332: /* table_name ::= NK_ID */ yytestcase(yyruleno==332); + case 333: /* column_name ::= NK_ID */ yytestcase(yyruleno==333); + case 334: /* function_name ::= NK_ID */ yytestcase(yyruleno==334); + case 335: /* table_alias ::= NK_ID */ yytestcase(yyruleno==335); + case 336: /* column_alias ::= NK_ID */ yytestcase(yyruleno==336); + case 337: /* user_name ::= NK_ID */ yytestcase(yyruleno==337); + case 338: /* topic_name ::= NK_ID */ yytestcase(yyruleno==338); + case 339: /* stream_name ::= NK_ID */ yytestcase(yyruleno==339); + case 340: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==340); + case 380: /* noarg_func ::= NOW */ yytestcase(yyruleno==380); + case 381: /* noarg_func ::= TODAY */ yytestcase(yyruleno==381); + case 382: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==382); + case 383: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==383); + case 384: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==384); + case 385: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==385); + case 386: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==386); + case 387: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==387); + case 388: /* noarg_func ::= USER */ yytestcase(yyruleno==388); + case 389: /* star_func ::= COUNT */ yytestcase(yyruleno==389); + case 390: /* star_func ::= FIRST */ yytestcase(yyruleno==390); + case 391: /* star_func ::= LAST */ yytestcase(yyruleno==391); + case 392: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==392); +{ yylhsminor.yy481 = yymsp[0].minor.yy0; } + yymsp[0].minor.yy481 = yylhsminor.yy481; break; - case 52: /* cmd ::= ALTER LOCAL NK_STRING */ + case 52: /* force_opt ::= */ + case 71: /* not_exists_opt ::= */ yytestcase(yyruleno==71); + case 73: /* exists_opt ::= */ yytestcase(yyruleno==73); + case 271: /* analyze_opt ::= */ yytestcase(yyruleno==271); + case 278: /* agg_func_opt ::= */ yytestcase(yyruleno==278); + case 453: /* set_quantifier_opt ::= */ yytestcase(yyruleno==453); +{ yymsp[1].minor.yy777 = false; } + break; + case 53: /* force_opt ::= FORCE */ + case 272: /* analyze_opt ::= ANALYZE */ yytestcase(yyruleno==272); + case 279: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==279); + case 454: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==454); +{ yymsp[0].minor.yy777 = true; } + break; + case 54: /* cmd ::= ALTER LOCAL NK_STRING */ { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[0].minor.yy0, NULL); } break; - case 53: /* cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + case 55: /* cmd ::= ALTER LOCAL NK_STRING NK_STRING */ { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; - case 54: /* cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + case 56: /* cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_QNODE_STMT, &yymsp[0].minor.yy0); } break; - case 55: /* cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + case 57: /* cmd ::= DROP QNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_QNODE_STMT, &yymsp[0].minor.yy0); } break; - case 56: /* cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + case 58: /* cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_BNODE_STMT, &yymsp[0].minor.yy0); } break; - case 57: /* cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + case 59: /* cmd ::= DROP BNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_BNODE_STMT, &yymsp[0].minor.yy0); } break; - case 58: /* cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + case 60: /* cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_SNODE_STMT, &yymsp[0].minor.yy0); } break; - case 59: /* cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + case 61: /* cmd ::= DROP SNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_SNODE_STMT, &yymsp[0].minor.yy0); } break; - case 60: /* cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + case 62: /* cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_MNODE_STMT, &yymsp[0].minor.yy0); } break; - case 61: /* cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + case 63: /* cmd ::= DROP MNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &yymsp[0].minor.yy0); } break; - case 62: /* cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ -{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy137, &yymsp[-1].minor.yy29, yymsp[0].minor.yy812); } + case 64: /* cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ +{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy777, &yymsp[-1].minor.yy481, yymsp[0].minor.yy232); } break; - case 63: /* cmd ::= DROP DATABASE exists_opt db_name */ -{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 65: /* cmd ::= DROP DATABASE exists_opt db_name */ +{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 64: /* cmd ::= USE db_name */ -{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy29); } + case 66: /* cmd ::= USE db_name */ +{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy481); } break; - case 65: /* cmd ::= ALTER DATABASE db_name alter_db_options */ -{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy29, yymsp[0].minor.yy812); } + case 67: /* cmd ::= ALTER DATABASE db_name alter_db_options */ +{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy232); } break; - case 66: /* cmd ::= FLUSH DATABASE db_name */ -{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy29); } + case 68: /* cmd ::= FLUSH DATABASE db_name */ +{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy481); } break; - case 67: /* cmd ::= TRIM DATABASE db_name speed_opt */ -{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy29, yymsp[0].minor.yy460); } + case 69: /* cmd ::= TRIM DATABASE db_name speed_opt */ +{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy692); } break; - case 68: /* not_exists_opt ::= IF NOT EXISTS */ -{ yymsp[-2].minor.yy137 = true; } + case 70: /* not_exists_opt ::= IF NOT EXISTS */ +{ yymsp[-2].minor.yy777 = true; } break; - case 69: /* not_exists_opt ::= */ - case 71: /* exists_opt ::= */ yytestcase(yyruleno==71); - case 269: /* analyze_opt ::= */ yytestcase(yyruleno==269); - case 276: /* agg_func_opt ::= */ yytestcase(yyruleno==276); - case 451: /* set_quantifier_opt ::= */ yytestcase(yyruleno==451); -{ yymsp[1].minor.yy137 = false; } + case 72: /* exists_opt ::= IF EXISTS */ +{ yymsp[-1].minor.yy777 = true; } break; - case 70: /* exists_opt ::= IF EXISTS */ -{ yymsp[-1].minor.yy137 = true; } + case 74: /* db_options ::= */ +{ yymsp[1].minor.yy232 = createDefaultDatabaseOptions(pCxt); } break; - case 72: /* db_options ::= */ -{ yymsp[1].minor.yy812 = createDefaultDatabaseOptions(pCxt); } + case 75: /* db_options ::= db_options BUFFER NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 73: /* db_options ::= db_options BUFFER NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 76: /* db_options ::= db_options CACHEMODEL NK_STRING */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 74: /* db_options ::= db_options CACHEMODEL NK_STRING */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 77: /* db_options ::= db_options CACHESIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 75: /* db_options ::= db_options CACHESIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 78: /* db_options ::= db_options COMP NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_COMP, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 76: /* db_options ::= db_options COMP NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_COMP, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 79: /* db_options ::= db_options DURATION NK_INTEGER */ + case 80: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==80); +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 77: /* db_options ::= db_options DURATION NK_INTEGER */ - case 78: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==78); -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 81: /* db_options ::= db_options MAXROWS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 79: /* db_options ::= db_options MAXROWS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 82: /* db_options ::= db_options MINROWS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 80: /* db_options ::= db_options MINROWS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 83: /* db_options ::= db_options KEEP integer_list */ + case 84: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==84); +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_KEEP, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 81: /* db_options ::= db_options KEEP integer_list */ - case 82: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==82); -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_KEEP, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 85: /* db_options ::= db_options PAGES NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 83: /* db_options ::= db_options PAGES NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 86: /* db_options ::= db_options PAGESIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 84: /* db_options ::= db_options PAGESIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 87: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 85: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 88: /* db_options ::= db_options PRECISION NK_STRING */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 86: /* db_options ::= db_options PRECISION NK_STRING */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 89: /* db_options ::= db_options REPLICA NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 87: /* db_options ::= db_options REPLICA NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 90: /* db_options ::= db_options STRICT NK_STRING */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 88: /* db_options ::= db_options STRICT NK_STRING */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 91: /* db_options ::= db_options VGROUPS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 89: /* db_options ::= db_options VGROUPS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 92: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 90: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 93: /* db_options ::= db_options RETENTIONS retention_list */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_RETENTIONS, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 91: /* db_options ::= db_options RETENTIONS retention_list */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_RETENTIONS, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 94: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 92: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 95: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 93: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 96: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 94: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 97: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 95: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 96: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + case 98: /* db_options ::= db_options WAL_RETENTION_PERIOD 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; - yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-3].minor.yy812, DB_OPTION_WAL_RETENTION_PERIOD, &t); + yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-3].minor.yy232, DB_OPTION_WAL_RETENTION_PERIOD, &t); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 97: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 99: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 98: /* db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + case 100: /* db_options ::= db_options WAL_RETENTION_SIZE 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; - yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-3].minor.yy812, DB_OPTION_WAL_RETENTION_SIZE, &t); + yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-3].minor.yy232, DB_OPTION_WAL_RETENTION_SIZE, &t); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; - break; - case 99: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 100: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 101: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 102: /* db_options ::= db_options TABLE_PREFIX NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 103: /* db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 104: /* alter_db_options ::= alter_db_option */ -{ yylhsminor.yy812 = createAlterDatabaseOptions(pCxt); yylhsminor.yy812 = setAlterDatabaseOption(pCxt, yylhsminor.yy812, &yymsp[0].minor.yy245); } - yymsp[0].minor.yy812 = yylhsminor.yy812; - break; - case 105: /* alter_db_options ::= alter_db_options alter_db_option */ -{ yylhsminor.yy812 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy812, &yymsp[0].minor.yy245); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; - break; - case 106: /* alter_db_option ::= BUFFER NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 107: /* alter_db_option ::= CACHEMODEL NK_STRING */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 108: /* alter_db_option ::= CACHESIZE NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 109: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 110: /* alter_db_option ::= KEEP integer_list */ - case 111: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==111); -{ yymsp[-1].minor.yy245.type = DB_OPTION_KEEP; yymsp[-1].minor.yy245.pList = yymsp[0].minor.yy424; } - break; - case 112: /* alter_db_option ::= PAGES NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_PAGES; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 113: /* alter_db_option ::= REPLICA NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 114: /* alter_db_option ::= STRICT NK_STRING */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_STRICT; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 115: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_WAL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 116: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 117: /* integer_list ::= NK_INTEGER */ -{ yylhsminor.yy424 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 118: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ - case 299: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==299); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; - break; - case 119: /* variable_list ::= NK_VARIABLE */ -{ yylhsminor.yy424 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 120: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; - break; - case 121: /* retention_list ::= retention */ - case 143: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==143); - case 146: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==146); - case 153: /* column_def_list ::= column_def */ yytestcase(yyruleno==153); - case 196: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==196); - case 201: /* col_name_list ::= col_name */ yytestcase(yyruleno==201); - case 252: /* func_list ::= func */ yytestcase(yyruleno==252); - case 327: /* literal_list ::= signed_literal */ yytestcase(yyruleno==327); - case 393: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==393); - case 399: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==399); - case 454: /* select_list ::= select_item */ yytestcase(yyruleno==454); - case 465: /* partition_list ::= partition_item */ yytestcase(yyruleno==465); - case 517: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==517); -{ yylhsminor.yy424 = createNodeList(pCxt, yymsp[0].minor.yy812); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 122: /* retention_list ::= retention_list NK_COMMA retention */ - case 154: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==154); - case 197: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==197); - case 202: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==202); - case 253: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==253); - case 328: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==328); - case 394: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==394); - case 455: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==455); - case 466: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==466); - case 518: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==518); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, yymsp[0].minor.yy812); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; - break; - case 123: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ -{ yylhsminor.yy812 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 124: /* speed_opt ::= */ - case 278: /* bufsize_opt ::= */ yytestcase(yyruleno==278); -{ yymsp[1].minor.yy460 = 0; } - break; - case 125: /* speed_opt ::= MAX_SPEED NK_INTEGER */ - case 279: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==279); -{ yymsp[-1].minor.yy460 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } - break; - case 126: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - case 128: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==128); -{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy137, yymsp[-5].minor.yy812, yymsp[-3].minor.yy424, yymsp[-1].minor.yy424, yymsp[0].minor.yy812); } - break; - case 127: /* cmd ::= CREATE TABLE multi_create_clause */ -{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy424); } - break; - case 129: /* cmd ::= DROP TABLE multi_drop_clause */ -{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy424); } - break; - case 130: /* cmd ::= DROP STABLE exists_opt full_table_name */ -{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy137, yymsp[0].minor.yy812); } - break; - case 131: /* cmd ::= ALTER TABLE alter_table_clause */ - case 301: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==301); -{ pCxt->pRootNode = yymsp[0].minor.yy812; } - break; - case 132: /* cmd ::= ALTER STABLE alter_table_clause */ -{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy812); } - break; - case 133: /* alter_table_clause ::= full_table_name alter_table_options */ -{ yylhsminor.yy812 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; - break; - case 134: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 135: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ -{ yylhsminor.yy812 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy812, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy29); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; - break; - case 136: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 137: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ -{ yylhsminor.yy812 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 138: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 139: /* alter_table_clause ::= full_table_name DROP TAG column_name */ -{ yylhsminor.yy812 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy812, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy29); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; - break; - case 140: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 141: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ -{ yylhsminor.yy812 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 142: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ -{ yylhsminor.yy812 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy812, &yymsp[-2].minor.yy29, yymsp[0].minor.yy812); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; - break; - case 144: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ - case 147: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==147); - case 400: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==400); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-1].minor.yy424, yymsp[0].minor.yy812); } - yymsp[-1].minor.yy424 = yylhsminor.yy424; + yymsp[-3].minor.yy232 = yylhsminor.yy232; + break; + case 101: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 102: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 103: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 104: /* db_options ::= db_options TABLE_PREFIX NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 105: /* db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 106: /* alter_db_options ::= alter_db_option */ +{ yylhsminor.yy232 = createAlterDatabaseOptions(pCxt); yylhsminor.yy232 = setAlterDatabaseOption(pCxt, yylhsminor.yy232, &yymsp[0].minor.yy101); } + yymsp[0].minor.yy232 = yylhsminor.yy232; + break; + case 107: /* alter_db_options ::= alter_db_options alter_db_option */ +{ yylhsminor.yy232 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy232, &yymsp[0].minor.yy101); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; + break; + case 108: /* alter_db_option ::= BUFFER NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 109: /* alter_db_option ::= CACHEMODEL NK_STRING */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 110: /* alter_db_option ::= CACHESIZE NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 111: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 112: /* alter_db_option ::= KEEP integer_list */ + case 113: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==113); +{ yymsp[-1].minor.yy101.type = DB_OPTION_KEEP; yymsp[-1].minor.yy101.pList = yymsp[0].minor.yy288; } + break; + case 114: /* alter_db_option ::= PAGES NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_PAGES; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 115: /* alter_db_option ::= REPLICA NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 116: /* alter_db_option ::= STRICT NK_STRING */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_STRICT; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 117: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_WAL; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 118: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 119: /* integer_list ::= NK_INTEGER */ +{ yylhsminor.yy288 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; + break; + case 120: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ + case 301: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==301); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; + break; + case 121: /* variable_list ::= NK_VARIABLE */ +{ yylhsminor.yy288 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; + break; + case 122: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; + break; + case 123: /* retention_list ::= retention */ + case 145: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==145); + case 148: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==148); + case 155: /* column_def_list ::= column_def */ yytestcase(yyruleno==155); + case 198: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==198); + case 203: /* col_name_list ::= col_name */ yytestcase(yyruleno==203); + case 254: /* func_list ::= func */ yytestcase(yyruleno==254); + case 329: /* literal_list ::= signed_literal */ yytestcase(yyruleno==329); + case 395: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==395); + case 401: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==401); + case 456: /* select_list ::= select_item */ yytestcase(yyruleno==456); + case 467: /* partition_list ::= partition_item */ yytestcase(yyruleno==467); + case 519: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==519); +{ yylhsminor.yy288 = createNodeList(pCxt, yymsp[0].minor.yy232); } + yymsp[0].minor.yy288 = yylhsminor.yy288; + break; + case 124: /* retention_list ::= retention_list NK_COMMA retention */ + case 156: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==156); + case 199: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==199); + case 204: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==204); + case 255: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==255); + case 330: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==330); + case 396: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==396); + case 457: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==457); + case 468: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==468); + case 520: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==520); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, yymsp[0].minor.yy232); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; + break; + case 125: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ +{ yylhsminor.yy232 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 126: /* speed_opt ::= */ + case 280: /* bufsize_opt ::= */ yytestcase(yyruleno==280); +{ yymsp[1].minor.yy692 = 0; } + break; + case 127: /* speed_opt ::= MAX_SPEED NK_INTEGER */ + case 281: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==281); +{ yymsp[-1].minor.yy692 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } + break; + case 128: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + case 130: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==130); +{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy777, yymsp[-5].minor.yy232, yymsp[-3].minor.yy288, yymsp[-1].minor.yy288, yymsp[0].minor.yy232); } + break; + case 129: /* cmd ::= CREATE TABLE multi_create_clause */ +{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy288); } + break; + case 131: /* cmd ::= DROP TABLE multi_drop_clause */ +{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy288); } + break; + case 132: /* cmd ::= DROP STABLE exists_opt full_table_name */ +{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy777, yymsp[0].minor.yy232); } + break; + case 133: /* cmd ::= ALTER TABLE alter_table_clause */ + case 303: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==303); +{ pCxt->pRootNode = yymsp[0].minor.yy232; } + break; + case 134: /* cmd ::= ALTER STABLE alter_table_clause */ +{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy232); } + break; + case 135: /* alter_table_clause ::= full_table_name alter_table_options */ +{ yylhsminor.yy232 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; + break; + case 136: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 137: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ +{ yylhsminor.yy232 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy232, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy481); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; + break; + case 138: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 139: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ +{ yylhsminor.yy232 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 140: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 141: /* alter_table_clause ::= full_table_name DROP TAG column_name */ +{ yylhsminor.yy232 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy232, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy481); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; + break; + case 142: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 143: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ +{ yylhsminor.yy232 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 144: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ +{ yylhsminor.yy232 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy232, &yymsp[-2].minor.yy481, yymsp[0].minor.yy232); } + yymsp[-5].minor.yy232 = yylhsminor.yy232; + break; + case 146: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ + case 149: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==149); + case 402: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==402); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-1].minor.yy288, yymsp[0].minor.yy232); } + yymsp[-1].minor.yy288 = yylhsminor.yy288; break; - case 145: /* create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ -{ yylhsminor.yy812 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy137, yymsp[-8].minor.yy812, yymsp[-6].minor.yy812, yymsp[-5].minor.yy424, yymsp[-2].minor.yy424, yymsp[0].minor.yy812); } - yymsp[-9].minor.yy812 = yylhsminor.yy812; + case 147: /* create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ +{ yylhsminor.yy232 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy777, yymsp[-8].minor.yy232, yymsp[-6].minor.yy232, yymsp[-5].minor.yy288, yymsp[-2].minor.yy288, yymsp[0].minor.yy232); } + yymsp[-9].minor.yy232 = yylhsminor.yy232; break; - case 148: /* drop_table_clause ::= exists_opt full_table_name */ -{ yylhsminor.yy812 = createDropTableClause(pCxt, yymsp[-1].minor.yy137, yymsp[0].minor.yy812); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 150: /* drop_table_clause ::= exists_opt full_table_name */ +{ yylhsminor.yy232 = createDropTableClause(pCxt, yymsp[-1].minor.yy777, yymsp[0].minor.yy232); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 149: /* specific_cols_opt ::= */ - case 180: /* tags_def_opt ::= */ yytestcase(yyruleno==180); - case 463: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==463); - case 485: /* group_by_clause_opt ::= */ yytestcase(yyruleno==485); - case 504: /* order_by_clause_opt ::= */ yytestcase(yyruleno==504); -{ yymsp[1].minor.yy424 = NULL; } + case 151: /* specific_cols_opt ::= */ + case 182: /* tags_def_opt ::= */ yytestcase(yyruleno==182); + case 465: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==465); + case 487: /* group_by_clause_opt ::= */ yytestcase(yyruleno==487); + case 506: /* order_by_clause_opt ::= */ yytestcase(yyruleno==506); +{ yymsp[1].minor.yy288 = NULL; } break; - case 150: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ -{ yymsp[-2].minor.yy424 = yymsp[-1].minor.yy424; } + case 152: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ +{ yymsp[-2].minor.yy288 = yymsp[-1].minor.yy288; } break; - case 151: /* full_table_name ::= table_name */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy29, NULL); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 153: /* full_table_name ::= table_name */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy481, NULL); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 152: /* full_table_name ::= db_name NK_DOT table_name */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29, NULL); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 154: /* full_table_name ::= db_name NK_DOT table_name */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481, NULL); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 155: /* column_def ::= column_name type_name */ -{ yylhsminor.yy812 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484, NULL); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 157: /* column_def ::= column_name type_name */ +{ yylhsminor.yy232 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264, NULL); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 156: /* column_def ::= column_name type_name COMMENT NK_STRING */ -{ yylhsminor.yy812 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy29, yymsp[-2].minor.yy484, &yymsp[0].minor.yy0); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 158: /* column_def ::= column_name type_name COMMENT NK_STRING */ +{ yylhsminor.yy232 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy481, yymsp[-2].minor.yy264, &yymsp[0].minor.yy0); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 157: /* type_name ::= BOOL */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_BOOL); } + case 159: /* type_name ::= BOOL */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_BOOL); } break; - case 158: /* type_name ::= TINYINT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_TINYINT); } + case 160: /* type_name ::= TINYINT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_TINYINT); } break; - case 159: /* type_name ::= SMALLINT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_SMALLINT); } + case 161: /* type_name ::= SMALLINT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_SMALLINT); } break; - case 160: /* type_name ::= INT */ - case 161: /* type_name ::= INTEGER */ yytestcase(yyruleno==161); -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_INT); } + case 162: /* type_name ::= INT */ + case 163: /* type_name ::= INTEGER */ yytestcase(yyruleno==163); +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_INT); } break; - case 162: /* type_name ::= BIGINT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_BIGINT); } + case 164: /* type_name ::= BIGINT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_BIGINT); } break; - case 163: /* type_name ::= FLOAT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_FLOAT); } + case 165: /* type_name ::= FLOAT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_FLOAT); } break; - case 164: /* type_name ::= DOUBLE */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_DOUBLE); } + case 166: /* type_name ::= DOUBLE */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_DOUBLE); } break; - case 165: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } + case 167: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } break; - case 166: /* type_name ::= TIMESTAMP */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } + case 168: /* type_name ::= TIMESTAMP */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } break; - case 167: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } + case 169: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } break; - case 168: /* type_name ::= TINYINT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_UTINYINT); } + case 170: /* type_name ::= TINYINT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_UTINYINT); } break; - case 169: /* type_name ::= SMALLINT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_USMALLINT); } + case 171: /* type_name ::= SMALLINT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_USMALLINT); } break; - case 170: /* type_name ::= INT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_UINT); } + case 172: /* type_name ::= INT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_UINT); } break; - case 171: /* type_name ::= BIGINT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_UBIGINT); } + case 173: /* type_name ::= BIGINT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_UBIGINT); } break; - case 172: /* type_name ::= JSON */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_JSON); } + case 174: /* type_name ::= JSON */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_JSON); } break; - case 173: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } + case 175: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } break; - case 174: /* type_name ::= MEDIUMBLOB */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } + case 176: /* type_name ::= MEDIUMBLOB */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } break; - case 175: /* type_name ::= BLOB */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_BLOB); } + case 177: /* type_name ::= BLOB */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_BLOB); } break; - case 176: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } + case 178: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } break; - case 177: /* type_name ::= DECIMAL */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 179: /* type_name ::= DECIMAL */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 178: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 180: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 179: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ -{ yymsp[-5].minor.yy484 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 181: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ +{ yymsp[-5].minor.yy264 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 181: /* tags_def_opt ::= tags_def */ - case 392: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==392); -{ yylhsminor.yy424 = yymsp[0].minor.yy424; } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 183: /* tags_def_opt ::= tags_def */ + case 394: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==394); +{ yylhsminor.yy288 = yymsp[0].minor.yy288; } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 182: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ -{ yymsp[-3].minor.yy424 = yymsp[-1].minor.yy424; } + case 184: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ +{ yymsp[-3].minor.yy288 = yymsp[-1].minor.yy288; } break; - case 183: /* table_options ::= */ -{ yymsp[1].minor.yy812 = createDefaultTableOptions(pCxt); } + case 185: /* table_options ::= */ +{ yymsp[1].minor.yy232 = createDefaultTableOptions(pCxt); } break; - case 184: /* table_options ::= table_options COMMENT NK_STRING */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 186: /* table_options ::= table_options COMMENT NK_STRING */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 185: /* table_options ::= table_options MAX_DELAY duration_list */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 187: /* table_options ::= table_options MAX_DELAY duration_list */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 186: /* table_options ::= table_options WATERMARK duration_list */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 188: /* table_options ::= table_options WATERMARK duration_list */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 187: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-4].minor.yy812, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy424); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + case 189: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-4].minor.yy232, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy288); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 188: /* table_options ::= table_options TTL NK_INTEGER */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 190: /* table_options ::= table_options TTL NK_INTEGER */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 189: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-4].minor.yy812, TABLE_OPTION_SMA, yymsp[-1].minor.yy424); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + case 191: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-4].minor.yy232, TABLE_OPTION_SMA, yymsp[-1].minor.yy288); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 190: /* alter_table_options ::= alter_table_option */ -{ yylhsminor.yy812 = createAlterTableOptions(pCxt); yylhsminor.yy812 = setTableOption(pCxt, yylhsminor.yy812, yymsp[0].minor.yy245.type, &yymsp[0].minor.yy245.val); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 192: /* alter_table_options ::= alter_table_option */ +{ yylhsminor.yy232 = createAlterTableOptions(pCxt); yylhsminor.yy232 = setTableOption(pCxt, yylhsminor.yy232, yymsp[0].minor.yy101.type, &yymsp[0].minor.yy101.val); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 191: /* alter_table_options ::= alter_table_options alter_table_option */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-1].minor.yy812, yymsp[0].minor.yy245.type, &yymsp[0].minor.yy245.val); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 193: /* alter_table_options ::= alter_table_options alter_table_option */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-1].minor.yy232, yymsp[0].minor.yy101.type, &yymsp[0].minor.yy101.val); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 192: /* alter_table_option ::= COMMENT NK_STRING */ -{ yymsp[-1].minor.yy245.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } + case 194: /* alter_table_option ::= COMMENT NK_STRING */ +{ yymsp[-1].minor.yy101.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } break; - case 193: /* alter_table_option ::= TTL NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } + case 195: /* alter_table_option ::= TTL NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } break; - case 194: /* duration_list ::= duration_literal */ - case 357: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==357); -{ yylhsminor.yy424 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 196: /* duration_list ::= duration_literal */ + case 359: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==359); +{ yylhsminor.yy288 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 195: /* duration_list ::= duration_list NK_COMMA duration_literal */ - case 358: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==358); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; + case 197: /* duration_list ::= duration_list NK_COMMA duration_literal */ + case 360: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==360); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; break; - case 198: /* rollup_func_name ::= function_name */ -{ yylhsminor.yy812 = createFunctionNode(pCxt, &yymsp[0].minor.yy29, NULL); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 200: /* rollup_func_name ::= function_name */ +{ yylhsminor.yy232 = createFunctionNode(pCxt, &yymsp[0].minor.yy481, NULL); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 199: /* rollup_func_name ::= FIRST */ - case 200: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==200); -{ yylhsminor.yy812 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 201: /* rollup_func_name ::= FIRST */ + case 202: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==202); +{ yylhsminor.yy232 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 203: /* col_name ::= column_name */ -{ yylhsminor.yy812 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy29); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 205: /* col_name ::= column_name */ +{ yylhsminor.yy232 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy481); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 204: /* cmd ::= SHOW DNODES */ + case 206: /* cmd ::= SHOW DNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); } break; - case 205: /* cmd ::= SHOW USERS */ + case 207: /* cmd ::= SHOW USERS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); } break; - case 206: /* cmd ::= SHOW DATABASES */ + case 208: /* cmd ::= SHOW DATABASES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT); } break; - case 207: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy812, yymsp[0].minor.yy812, OP_TYPE_LIKE); } + case 209: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy232, yymsp[0].minor.yy232, OP_TYPE_LIKE); } break; - case 208: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy812, yymsp[0].minor.yy812, OP_TYPE_LIKE); } + case 210: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy232, yymsp[0].minor.yy232, OP_TYPE_LIKE); } break; - case 209: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy812, NULL, OP_TYPE_LIKE); } + case 211: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy232, NULL, OP_TYPE_LIKE); } break; - case 210: /* cmd ::= SHOW MNODES */ + case 212: /* cmd ::= SHOW MNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); } break; - case 211: /* cmd ::= SHOW QNODES */ + case 213: /* cmd ::= SHOW QNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); } break; - case 212: /* cmd ::= SHOW FUNCTIONS */ + case 214: /* cmd ::= SHOW FUNCTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); } break; - case 213: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy812, yymsp[-1].minor.yy812, OP_TYPE_EQUAL); } + case 215: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy232, yymsp[-1].minor.yy232, OP_TYPE_EQUAL); } break; - case 214: /* cmd ::= SHOW STREAMS */ + case 216: /* cmd ::= SHOW STREAMS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT); } break; - case 215: /* cmd ::= SHOW ACCOUNTS */ + case 217: /* cmd ::= SHOW ACCOUNTS */ { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } break; - case 216: /* cmd ::= SHOW APPS */ + case 218: /* cmd ::= SHOW APPS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); } break; - case 217: /* cmd ::= SHOW CONNECTIONS */ + case 219: /* cmd ::= SHOW CONNECTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); } break; - case 218: /* cmd ::= SHOW LICENCES */ - case 219: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==219); + case 220: /* cmd ::= SHOW LICENCES */ + case 221: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==221); { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); } break; - case 220: /* cmd ::= SHOW CREATE DATABASE db_name */ -{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy29); } + case 222: /* cmd ::= SHOW CREATE DATABASE db_name */ +{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy481); } break; - case 221: /* cmd ::= SHOW CREATE TABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy812); } + case 223: /* cmd ::= SHOW CREATE TABLE full_table_name */ +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy232); } break; - case 222: /* cmd ::= SHOW CREATE STABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy812); } + case 224: /* cmd ::= SHOW CREATE STABLE full_table_name */ +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy232); } break; - case 223: /* cmd ::= SHOW QUERIES */ + case 225: /* cmd ::= SHOW QUERIES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); } break; - case 224: /* cmd ::= SHOW SCORES */ + case 226: /* cmd ::= SHOW SCORES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); } break; - case 225: /* cmd ::= SHOW TOPICS */ + case 227: /* cmd ::= SHOW TOPICS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); } break; - case 226: /* cmd ::= SHOW VARIABLES */ - case 227: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==227); + case 228: /* cmd ::= SHOW VARIABLES */ + case 229: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==229); { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); } break; - case 228: /* cmd ::= SHOW LOCAL VARIABLES */ + case 230: /* cmd ::= SHOW LOCAL VARIABLES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT); } break; - case 229: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[-2].minor.yy0), yymsp[0].minor.yy812); } + case 231: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ +{ pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[-2].minor.yy0), yymsp[0].minor.yy232); } break; - case 230: /* cmd ::= SHOW BNODES */ + case 232: /* cmd ::= SHOW BNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); } break; - case 231: /* cmd ::= SHOW SNODES */ + case 233: /* cmd ::= SHOW SNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); } break; - case 232: /* cmd ::= SHOW CLUSTER */ + case 234: /* cmd ::= SHOW CLUSTER */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); } break; - case 233: /* cmd ::= SHOW TRANSACTIONS */ + case 235: /* cmd ::= SHOW TRANSACTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); } break; - case 234: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ -{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy812); } + case 236: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ +{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy232); } break; - case 235: /* cmd ::= SHOW CONSUMERS */ + case 237: /* cmd ::= SHOW CONSUMERS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); } break; - case 236: /* cmd ::= SHOW SUBSCRIPTIONS */ + case 238: /* cmd ::= SHOW SUBSCRIPTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); } break; - case 237: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy812, yymsp[-1].minor.yy812, OP_TYPE_EQUAL); } + case 239: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy232, yymsp[-1].minor.yy232, OP_TYPE_EQUAL); } break; - case 238: /* cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLE_TAGS_STMT, yymsp[0].minor.yy812, yymsp[-1].minor.yy812, OP_TYPE_EQUAL); } + case 240: /* cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLE_TAGS_STMT, yymsp[0].minor.yy232, yymsp[-1].minor.yy232, OP_TYPE_EQUAL); } break; - case 239: /* cmd ::= SHOW VNODES NK_INTEGER */ + case 241: /* cmd ::= SHOW VNODES NK_INTEGER */ { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0), NULL); } break; - case 240: /* cmd ::= SHOW VNODES NK_STRING */ + case 242: /* cmd ::= SHOW VNODES NK_STRING */ { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, createValueNode(pCxt, TSDB_DATA_TYPE_VARCHAR, &yymsp[0].minor.yy0)); } break; - case 241: /* db_name_cond_opt ::= */ - case 246: /* from_db_opt ::= */ yytestcase(yyruleno==246); -{ yymsp[1].minor.yy812 = createDefaultDatabaseCondValue(pCxt); } + case 243: /* db_name_cond_opt ::= */ + case 248: /* from_db_opt ::= */ yytestcase(yyruleno==248); +{ yymsp[1].minor.yy232 = createDefaultDatabaseCondValue(pCxt); } break; - case 242: /* db_name_cond_opt ::= db_name NK_DOT */ -{ yylhsminor.yy812 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 244: /* db_name_cond_opt ::= db_name NK_DOT */ +{ yylhsminor.yy232 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 243: /* like_pattern_opt ::= */ - case 289: /* subtable_opt ::= */ yytestcase(yyruleno==289); - case 402: /* case_when_else_opt ::= */ yytestcase(yyruleno==402); - case 432: /* from_clause_opt ::= */ yytestcase(yyruleno==432); - case 461: /* where_clause_opt ::= */ yytestcase(yyruleno==461); - case 470: /* twindow_clause_opt ::= */ yytestcase(yyruleno==470); - case 475: /* sliding_opt ::= */ yytestcase(yyruleno==475); - case 477: /* fill_opt ::= */ yytestcase(yyruleno==477); - case 489: /* having_clause_opt ::= */ yytestcase(yyruleno==489); - case 491: /* range_opt ::= */ yytestcase(yyruleno==491); - case 493: /* every_opt ::= */ yytestcase(yyruleno==493); - case 506: /* slimit_clause_opt ::= */ yytestcase(yyruleno==506); - case 510: /* limit_clause_opt ::= */ yytestcase(yyruleno==510); -{ yymsp[1].minor.yy812 = NULL; } + case 245: /* like_pattern_opt ::= */ + case 291: /* subtable_opt ::= */ yytestcase(yyruleno==291); + case 404: /* case_when_else_opt ::= */ yytestcase(yyruleno==404); + case 434: /* from_clause_opt ::= */ yytestcase(yyruleno==434); + case 463: /* where_clause_opt ::= */ yytestcase(yyruleno==463); + case 472: /* twindow_clause_opt ::= */ yytestcase(yyruleno==472); + case 477: /* sliding_opt ::= */ yytestcase(yyruleno==477); + case 479: /* fill_opt ::= */ yytestcase(yyruleno==479); + case 491: /* having_clause_opt ::= */ yytestcase(yyruleno==491); + case 493: /* range_opt ::= */ yytestcase(yyruleno==493); + case 495: /* every_opt ::= */ yytestcase(yyruleno==495); + case 508: /* slimit_clause_opt ::= */ yytestcase(yyruleno==508); + case 512: /* limit_clause_opt ::= */ yytestcase(yyruleno==512); +{ yymsp[1].minor.yy232 = NULL; } break; - case 244: /* like_pattern_opt ::= LIKE NK_STRING */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + case 246: /* like_pattern_opt ::= LIKE NK_STRING */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } break; - case 245: /* table_name_cond ::= table_name */ -{ yylhsminor.yy812 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy29); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 247: /* table_name_cond ::= table_name */ +{ yylhsminor.yy232 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy481); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 247: /* from_db_opt ::= FROM db_name */ -{ yymsp[-1].minor.yy812 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy29); } + case 249: /* from_db_opt ::= FROM db_name */ +{ yymsp[-1].minor.yy232 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy481); } break; - case 248: /* cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */ -{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy137, yymsp[-3].minor.yy812, yymsp[-1].minor.yy812, NULL, yymsp[0].minor.yy812); } + case 250: /* cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */ +{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy777, yymsp[-3].minor.yy232, yymsp[-1].minor.yy232, NULL, yymsp[0].minor.yy232); } break; - case 249: /* cmd ::= DROP INDEX exists_opt full_table_name */ -{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy137, yymsp[0].minor.yy812); } + case 251: /* cmd ::= DROP INDEX exists_opt full_table_name */ +{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy777, yymsp[0].minor.yy232); } break; - case 250: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ -{ yymsp[-9].minor.yy812 = createIndexOption(pCxt, yymsp[-7].minor.yy424, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), NULL, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 252: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ +{ yymsp[-9].minor.yy232 = createIndexOption(pCxt, yymsp[-7].minor.yy288, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), NULL, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 251: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ -{ yymsp[-11].minor.yy812 = createIndexOption(pCxt, yymsp[-9].minor.yy424, releaseRawExprNode(pCxt, yymsp[-5].minor.yy812), releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 253: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ +{ yymsp[-11].minor.yy232 = createIndexOption(pCxt, yymsp[-9].minor.yy288, releaseRawExprNode(pCxt, yymsp[-5].minor.yy232), releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 254: /* func ::= function_name NK_LP expression_list NK_RP */ -{ yylhsminor.yy812 = createFunctionNode(pCxt, &yymsp[-3].minor.yy29, yymsp[-1].minor.yy424); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 256: /* func ::= function_name NK_LP expression_list NK_RP */ +{ yylhsminor.yy232 = createFunctionNode(pCxt, &yymsp[-3].minor.yy481, yymsp[-1].minor.yy288); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 255: /* sma_stream_opt ::= */ - case 282: /* stream_options ::= */ yytestcase(yyruleno==282); -{ yymsp[1].minor.yy812 = createStreamOptions(pCxt); } + case 257: /* sma_stream_opt ::= */ + case 284: /* stream_options ::= */ yytestcase(yyruleno==284); +{ yymsp[1].minor.yy232 = createStreamOptions(pCxt); } break; - case 256: /* sma_stream_opt ::= stream_options WATERMARK duration_literal */ - case 286: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==286); -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 258: /* sma_stream_opt ::= stream_options WATERMARK duration_literal */ + case 288: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==288); +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 257: /* sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 259: /* sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 258: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ -{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy137, &yymsp[-2].minor.yy29, yymsp[0].minor.yy812); } + case 260: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ +{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy777, &yymsp[-2].minor.yy481, yymsp[0].minor.yy232); } break; - case 259: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy137, &yymsp[-3].minor.yy29, &yymsp[0].minor.yy29, false); } + case 261: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy777, &yymsp[-3].minor.yy481, &yymsp[0].minor.yy481, false); } break; - case 260: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy137, &yymsp[-5].minor.yy29, &yymsp[0].minor.yy29, true); } + case 262: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy777, &yymsp[-5].minor.yy481, &yymsp[0].minor.yy481, true); } break; - case 261: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy137, &yymsp[-3].minor.yy29, yymsp[0].minor.yy812, false); } + case 263: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy777, &yymsp[-3].minor.yy481, yymsp[0].minor.yy232, false); } break; - case 262: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy137, &yymsp[-5].minor.yy29, yymsp[0].minor.yy812, true); } + case 264: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy777, &yymsp[-5].minor.yy481, yymsp[0].minor.yy232, true); } break; - case 263: /* cmd ::= DROP TOPIC exists_opt topic_name */ -{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 265: /* cmd ::= DROP TOPIC exists_opt topic_name */ +{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 264: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ -{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy137, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29); } + case 266: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ +{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy777, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481); } break; - case 265: /* cmd ::= DESC full_table_name */ - case 266: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==266); -{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy812); } + case 267: /* cmd ::= DESC full_table_name */ + case 268: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==268); +{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy232); } break; - case 267: /* cmd ::= RESET QUERY CACHE */ + case 269: /* cmd ::= RESET QUERY CACHE */ { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); } break; - case 268: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ -{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy137, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 270: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ +{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy777, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 270: /* analyze_opt ::= ANALYZE */ - case 277: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==277); - case 452: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==452); -{ yymsp[0].minor.yy137 = true; } + case 273: /* explain_options ::= */ +{ yymsp[1].minor.yy232 = createDefaultExplainOptions(pCxt); } break; - case 271: /* explain_options ::= */ -{ yymsp[1].minor.yy812 = createDefaultExplainOptions(pCxt); } + case 274: /* explain_options ::= explain_options VERBOSE NK_BOOL */ +{ yylhsminor.yy232 = setExplainVerbose(pCxt, yymsp[-2].minor.yy232, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 272: /* explain_options ::= explain_options VERBOSE NK_BOOL */ -{ yylhsminor.yy812 = setExplainVerbose(pCxt, yymsp[-2].minor.yy812, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 275: /* explain_options ::= explain_options RATIO NK_FLOAT */ +{ yylhsminor.yy232 = setExplainRatio(pCxt, yymsp[-2].minor.yy232, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 273: /* explain_options ::= explain_options RATIO NK_FLOAT */ -{ yylhsminor.yy812 = setExplainRatio(pCxt, yymsp[-2].minor.yy812, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 276: /* cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ +{ pCxt->pRootNode = createCreateFunctionStmt(pCxt, yymsp[-6].minor.yy777, yymsp[-8].minor.yy777, &yymsp[-5].minor.yy481, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy264, yymsp[0].minor.yy692); } break; - case 274: /* cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ -{ pCxt->pRootNode = createCreateFunctionStmt(pCxt, yymsp[-6].minor.yy137, yymsp[-8].minor.yy137, &yymsp[-5].minor.yy29, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy484, yymsp[0].minor.yy460); } + case 277: /* cmd ::= DROP FUNCTION exists_opt function_name */ +{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 275: /* cmd ::= DROP FUNCTION exists_opt function_name */ -{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 282: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */ +{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-8].minor.yy777, &yymsp[-7].minor.yy481, yymsp[-4].minor.yy232, yymsp[-6].minor.yy232, yymsp[-3].minor.yy288, yymsp[-2].minor.yy232, yymsp[0].minor.yy232); } break; - case 280: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */ -{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-8].minor.yy137, &yymsp[-7].minor.yy29, yymsp[-4].minor.yy812, yymsp[-6].minor.yy812, yymsp[-3].minor.yy424, yymsp[-2].minor.yy812, yymsp[0].minor.yy812); } + case 283: /* cmd ::= DROP STREAM exists_opt stream_name */ +{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 281: /* cmd ::= DROP STREAM exists_opt stream_name */ -{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 285: /* stream_options ::= stream_options TRIGGER AT_ONCE */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 283: /* stream_options ::= stream_options TRIGGER AT_ONCE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 286: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 284: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 287: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ +{ ((SStreamOptions*)yymsp[-3].minor.yy232)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy232)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); yylhsminor.yy232 = yymsp[-3].minor.yy232; } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 285: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-3].minor.yy812)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy812)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); yylhsminor.yy812 = yymsp[-3].minor.yy812; } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 289: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ +{ ((SStreamOptions*)yymsp[-3].minor.yy232)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy232 = yymsp[-3].minor.yy232; } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 287: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ -{ ((SStreamOptions*)yymsp[-3].minor.yy812)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy812 = yymsp[-3].minor.yy812; } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 290: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->fillHistory = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 288: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->fillHistory = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 292: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + case 478: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==478); + case 496: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==496); +{ yymsp[-3].minor.yy232 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy232); } break; - case 290: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - case 476: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==476); - case 494: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==494); -{ yymsp[-3].minor.yy812 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy812); } - break; - case 291: /* cmd ::= KILL CONNECTION NK_INTEGER */ + case 293: /* cmd ::= KILL CONNECTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &yymsp[0].minor.yy0); } break; - case 292: /* cmd ::= KILL QUERY NK_STRING */ + case 294: /* cmd ::= KILL QUERY NK_STRING */ { pCxt->pRootNode = createKillQueryStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 293: /* cmd ::= KILL TRANSACTION NK_INTEGER */ + case 295: /* cmd ::= KILL TRANSACTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &yymsp[0].minor.yy0); } break; - case 294: /* cmd ::= BALANCE VGROUP */ + case 296: /* cmd ::= BALANCE VGROUP */ { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); } break; - case 295: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + case 297: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; - case 296: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ -{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy424); } + case 298: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ +{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy288); } break; - case 297: /* cmd ::= SPLIT VGROUP NK_INTEGER */ + case 299: /* cmd ::= SPLIT VGROUP NK_INTEGER */ { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 298: /* dnode_list ::= DNODE NK_INTEGER */ -{ yymsp[-1].minor.yy424 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + case 300: /* dnode_list ::= DNODE NK_INTEGER */ +{ yymsp[-1].minor.yy288 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } break; - case 300: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ -{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 302: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ +{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 302: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ -{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy812, yymsp[-2].minor.yy424, yymsp[0].minor.yy812); } + case 304: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ +{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy232, yymsp[-2].minor.yy288, yymsp[0].minor.yy232); } break; - case 303: /* cmd ::= INSERT INTO full_table_name query_or_subquery */ -{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy812, NULL, yymsp[0].minor.yy812); } + case 305: /* cmd ::= INSERT INTO full_table_name query_or_subquery */ +{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy232, NULL, yymsp[0].minor.yy232); } break; - case 304: /* literal ::= NK_INTEGER */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 306: /* literal ::= NK_INTEGER */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 305: /* literal ::= NK_FLOAT */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 307: /* literal ::= NK_FLOAT */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 306: /* literal ::= NK_STRING */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 308: /* literal ::= NK_STRING */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 307: /* literal ::= NK_BOOL */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 309: /* literal ::= NK_BOOL */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 308: /* literal ::= TIMESTAMP NK_STRING */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 310: /* literal ::= TIMESTAMP NK_STRING */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 309: /* literal ::= duration_literal */ - case 319: /* signed_literal ::= signed */ yytestcase(yyruleno==319); - case 339: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==339); - case 340: /* expr_or_subquery ::= subquery */ yytestcase(yyruleno==340); - case 341: /* expression ::= literal */ yytestcase(yyruleno==341); - case 342: /* expression ::= pseudo_column */ yytestcase(yyruleno==342); - case 343: /* expression ::= column_reference */ yytestcase(yyruleno==343); - case 344: /* expression ::= function_expression */ yytestcase(yyruleno==344); - case 345: /* expression ::= case_when_expression */ yytestcase(yyruleno==345); - case 375: /* function_expression ::= literal_func */ yytestcase(yyruleno==375); - case 424: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==424); - case 428: /* boolean_primary ::= predicate */ yytestcase(yyruleno==428); - case 430: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==430); - case 431: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==431); - case 434: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==434); - case 436: /* table_reference ::= table_primary */ yytestcase(yyruleno==436); - case 437: /* table_reference ::= joined_table */ yytestcase(yyruleno==437); - case 441: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==441); - case 496: /* query_simple ::= query_specification */ yytestcase(yyruleno==496); - case 497: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==497); - case 500: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==500); - case 502: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==502); -{ yylhsminor.yy812 = yymsp[0].minor.yy812; } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 311: /* literal ::= duration_literal */ + case 321: /* signed_literal ::= signed */ yytestcase(yyruleno==321); + case 341: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==341); + case 342: /* expr_or_subquery ::= subquery */ yytestcase(yyruleno==342); + case 343: /* expression ::= literal */ yytestcase(yyruleno==343); + case 344: /* expression ::= pseudo_column */ yytestcase(yyruleno==344); + case 345: /* expression ::= column_reference */ yytestcase(yyruleno==345); + case 346: /* expression ::= function_expression */ yytestcase(yyruleno==346); + case 347: /* expression ::= case_when_expression */ yytestcase(yyruleno==347); + case 377: /* function_expression ::= literal_func */ yytestcase(yyruleno==377); + case 426: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==426); + case 430: /* boolean_primary ::= predicate */ yytestcase(yyruleno==430); + case 432: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==432); + case 433: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==433); + case 436: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==436); + case 438: /* table_reference ::= table_primary */ yytestcase(yyruleno==438); + case 439: /* table_reference ::= joined_table */ yytestcase(yyruleno==439); + case 443: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==443); + case 498: /* query_simple ::= query_specification */ yytestcase(yyruleno==498); + case 499: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==499); + case 502: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==502); + case 504: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==504); +{ yylhsminor.yy232 = yymsp[0].minor.yy232; } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 310: /* literal ::= NULL */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 312: /* literal ::= NULL */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 311: /* literal ::= NK_QUESTION */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 313: /* literal ::= NK_QUESTION */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 312: /* duration_literal ::= NK_VARIABLE */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 314: /* duration_literal ::= NK_VARIABLE */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 313: /* signed ::= NK_INTEGER */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 315: /* signed ::= NK_INTEGER */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 314: /* signed ::= NK_PLUS NK_INTEGER */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } + case 316: /* signed ::= NK_PLUS NK_INTEGER */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } break; - case 315: /* signed ::= NK_MINUS NK_INTEGER */ + case 317: /* 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; - yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); + yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 316: /* signed ::= NK_FLOAT */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 318: /* signed ::= NK_FLOAT */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 317: /* signed ::= NK_PLUS NK_FLOAT */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + case 319: /* signed ::= NK_PLUS NK_FLOAT */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } break; - case 318: /* signed ::= NK_MINUS NK_FLOAT */ + case 320: /* 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; - yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); + yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 320: /* signed_literal ::= NK_STRING */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 322: /* signed_literal ::= NK_STRING */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 321: /* signed_literal ::= NK_BOOL */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 323: /* signed_literal ::= NK_BOOL */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 322: /* signed_literal ::= TIMESTAMP NK_STRING */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } + case 324: /* signed_literal ::= TIMESTAMP NK_STRING */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } break; - case 323: /* signed_literal ::= duration_literal */ - case 325: /* signed_literal ::= literal_func */ yytestcase(yyruleno==325); - case 395: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==395); - case 457: /* select_item ::= common_expression */ yytestcase(yyruleno==457); - case 467: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==467); - case 501: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==501); - case 503: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==503); - case 516: /* search_condition ::= common_expression */ yytestcase(yyruleno==516); -{ yylhsminor.yy812 = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 325: /* signed_literal ::= duration_literal */ + case 327: /* signed_literal ::= literal_func */ yytestcase(yyruleno==327); + case 397: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==397); + case 459: /* select_item ::= common_expression */ yytestcase(yyruleno==459); + case 469: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==469); + case 503: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==503); + case 505: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==505); + case 518: /* search_condition ::= common_expression */ yytestcase(yyruleno==518); +{ yylhsminor.yy232 = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 324: /* signed_literal ::= NULL */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 326: /* signed_literal ::= NULL */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 326: /* signed_literal ::= NK_QUESTION */ -{ yylhsminor.yy812 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 328: /* signed_literal ::= NK_QUESTION */ +{ yylhsminor.yy232 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 346: /* expression ::= NK_LP expression NK_RP */ - case 429: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==429); - case 515: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==515); -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 348: /* expression ::= NK_LP expression NK_RP */ + case 431: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==431); + case 517: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==517); +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 347: /* expression ::= NK_PLUS expr_or_subquery */ + case 349: /* expression ::= NK_PLUS expr_or_subquery */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 348: /* expression ::= NK_MINUS expr_or_subquery */ + case 350: /* expression ::= NK_MINUS expr_or_subquery */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy812), NULL)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy232), NULL)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 349: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + case 351: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 350: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + case 352: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 351: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + case 353: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 352: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + case 354: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 353: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ + case 355: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 354: /* expression ::= column_reference NK_ARROW NK_STRING */ + case 356: /* expression ::= column_reference NK_ARROW NK_STRING */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 355: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + case 357: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 356: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + case 358: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 359: /* column_reference ::= column_name */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy29, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy29)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 361: /* column_reference ::= column_name */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy481, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy481)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 360: /* column_reference ::= table_name NK_DOT column_name */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29, createColumnNode(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 362: /* column_reference ::= table_name NK_DOT column_name */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481, createColumnNode(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 361: /* pseudo_column ::= ROWTS */ - case 362: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==362); - case 364: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==364); - case 365: /* pseudo_column ::= QEND */ yytestcase(yyruleno==365); - case 366: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==366); - case 367: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==367); - case 368: /* pseudo_column ::= WEND */ yytestcase(yyruleno==368); - case 369: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==369); - case 370: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==370); - case 371: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==371); - case 377: /* literal_func ::= NOW */ yytestcase(yyruleno==377); -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 363: /* pseudo_column ::= ROWTS */ + case 364: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==364); + case 366: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==366); + case 367: /* pseudo_column ::= QEND */ yytestcase(yyruleno==367); + case 368: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==368); + case 369: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==369); + case 370: /* pseudo_column ::= WEND */ yytestcase(yyruleno==370); + case 371: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==371); + case 372: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==372); + case 373: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==373); + case 379: /* literal_func ::= NOW */ yytestcase(yyruleno==379); +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 363: /* pseudo_column ::= table_name NK_DOT TBNAME */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy29)))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 365: /* pseudo_column ::= table_name NK_DOT TBNAME */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy481)))); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 372: /* function_expression ::= function_name NK_LP expression_list NK_RP */ - case 373: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==373); -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy29, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy29, yymsp[-1].minor.yy424)); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 374: /* function_expression ::= function_name NK_LP expression_list NK_RP */ + case 375: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==375); +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy481, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy481, yymsp[-1].minor.yy288)); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 374: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-1].minor.yy484)); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; + case 376: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-1].minor.yy264)); } + yymsp[-5].minor.yy232 = yylhsminor.yy232; break; - case 376: /* literal_func ::= noarg_func NK_LP NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy29, NULL)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 378: /* literal_func ::= noarg_func NK_LP NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy481, NULL)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 391: /* star_func_para_list ::= NK_STAR */ -{ yylhsminor.yy424 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 393: /* star_func_para_list ::= NK_STAR */ +{ yylhsminor.yy288 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 396: /* star_func_para ::= table_name NK_DOT NK_STAR */ - case 460: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==460); -{ yylhsminor.yy812 = createColumnNode(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 398: /* star_func_para ::= table_name NK_DOT NK_STAR */ + case 462: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==462); +{ yylhsminor.yy232 = createColumnNode(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 397: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy424, yymsp[-1].minor.yy812)); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 399: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy288, yymsp[-1].minor.yy232)); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 398: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-2].minor.yy424, yymsp[-1].minor.yy812)); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + case 400: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-2].minor.yy288, yymsp[-1].minor.yy232)); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 401: /* when_then_expr ::= WHEN common_expression THEN common_expression */ -{ yymsp[-3].minor.yy812 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); } + case 403: /* when_then_expr ::= WHEN common_expression THEN common_expression */ +{ yymsp[-3].minor.yy232 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } break; - case 403: /* case_when_else_opt ::= ELSE common_expression */ -{ yymsp[-1].minor.yy812 = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); } + case 405: /* case_when_else_opt ::= ELSE common_expression */ +{ yymsp[-1].minor.yy232 = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); } break; - case 404: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ - case 409: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==409); + case 406: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ + case 411: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==411); { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy740, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy4, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 405: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + case 407: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy812), releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy232), releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 406: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + case 408: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy812), releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy232), releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; + yymsp[-5].minor.yy232 = yylhsminor.yy232; break; - case 407: /* predicate ::= expr_or_subquery IS NULL */ + case 409: /* predicate ::= expr_or_subquery IS NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), NULL)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 408: /* predicate ::= expr_or_subquery IS NOT NULL */ + case 410: /* predicate ::= expr_or_subquery IS NOT NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), NULL)); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 410: /* compare_op ::= NK_LT */ -{ yymsp[0].minor.yy740 = OP_TYPE_LOWER_THAN; } + case 412: /* compare_op ::= NK_LT */ +{ yymsp[0].minor.yy4 = OP_TYPE_LOWER_THAN; } break; - case 411: /* compare_op ::= NK_GT */ -{ yymsp[0].minor.yy740 = OP_TYPE_GREATER_THAN; } + case 413: /* compare_op ::= NK_GT */ +{ yymsp[0].minor.yy4 = OP_TYPE_GREATER_THAN; } break; - case 412: /* compare_op ::= NK_LE */ -{ yymsp[0].minor.yy740 = OP_TYPE_LOWER_EQUAL; } + case 414: /* compare_op ::= NK_LE */ +{ yymsp[0].minor.yy4 = OP_TYPE_LOWER_EQUAL; } break; - case 413: /* compare_op ::= NK_GE */ -{ yymsp[0].minor.yy740 = OP_TYPE_GREATER_EQUAL; } + case 415: /* compare_op ::= NK_GE */ +{ yymsp[0].minor.yy4 = OP_TYPE_GREATER_EQUAL; } break; - case 414: /* compare_op ::= NK_NE */ -{ yymsp[0].minor.yy740 = OP_TYPE_NOT_EQUAL; } + case 416: /* compare_op ::= NK_NE */ +{ yymsp[0].minor.yy4 = OP_TYPE_NOT_EQUAL; } break; - case 415: /* compare_op ::= NK_EQ */ -{ yymsp[0].minor.yy740 = OP_TYPE_EQUAL; } + case 417: /* compare_op ::= NK_EQ */ +{ yymsp[0].minor.yy4 = OP_TYPE_EQUAL; } break; - case 416: /* compare_op ::= LIKE */ -{ yymsp[0].minor.yy740 = OP_TYPE_LIKE; } + case 418: /* compare_op ::= LIKE */ +{ yymsp[0].minor.yy4 = OP_TYPE_LIKE; } break; - case 417: /* compare_op ::= NOT LIKE */ -{ yymsp[-1].minor.yy740 = OP_TYPE_NOT_LIKE; } + case 419: /* compare_op ::= NOT LIKE */ +{ yymsp[-1].minor.yy4 = OP_TYPE_NOT_LIKE; } break; - case 418: /* compare_op ::= MATCH */ -{ yymsp[0].minor.yy740 = OP_TYPE_MATCH; } + case 420: /* compare_op ::= MATCH */ +{ yymsp[0].minor.yy4 = OP_TYPE_MATCH; } break; - case 419: /* compare_op ::= NMATCH */ -{ yymsp[0].minor.yy740 = OP_TYPE_NMATCH; } + case 421: /* compare_op ::= NMATCH */ +{ yymsp[0].minor.yy4 = OP_TYPE_NMATCH; } break; - case 420: /* compare_op ::= CONTAINS */ -{ yymsp[0].minor.yy740 = OP_TYPE_JSON_CONTAINS; } + case 422: /* compare_op ::= CONTAINS */ +{ yymsp[0].minor.yy4 = OP_TYPE_JSON_CONTAINS; } break; - case 421: /* in_op ::= IN */ -{ yymsp[0].minor.yy740 = OP_TYPE_IN; } + case 423: /* in_op ::= IN */ +{ yymsp[0].minor.yy4 = OP_TYPE_IN; } break; - case 422: /* in_op ::= NOT IN */ -{ yymsp[-1].minor.yy740 = OP_TYPE_NOT_IN; } + case 424: /* in_op ::= NOT IN */ +{ yymsp[-1].minor.yy4 = OP_TYPE_NOT_IN; } break; - case 423: /* in_predicate_value ::= NK_LP literal_list NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy424)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 425: /* in_predicate_value ::= NK_LP literal_list NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy288)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 425: /* boolean_value_expression ::= NOT boolean_primary */ + case 427: /* boolean_value_expression ::= NOT boolean_primary */ { - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy812), NULL)); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy232), NULL)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 426: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + case 428: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 427: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + case 429: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 433: /* from_clause_opt ::= FROM table_reference_list */ - case 462: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==462); - case 490: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==490); -{ yymsp[-1].minor.yy812 = yymsp[0].minor.yy812; } + case 435: /* from_clause_opt ::= FROM table_reference_list */ + case 464: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==464); + case 492: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==492); +{ yymsp[-1].minor.yy232 = yymsp[0].minor.yy232; } break; - case 435: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ -{ yylhsminor.yy812 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy812, yymsp[0].minor.yy812, NULL); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 437: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ +{ yylhsminor.yy232 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy232, yymsp[0].minor.yy232, NULL); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 438: /* table_primary ::= table_name alias_opt */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 440: /* table_primary ::= table_name alias_opt */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 439: /* table_primary ::= db_name NK_DOT table_name alias_opt */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, &yymsp[-3].minor.yy29, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 441: /* table_primary ::= db_name NK_DOT table_name alias_opt */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, &yymsp[-3].minor.yy481, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 440: /* table_primary ::= subquery alias_opt */ -{ yylhsminor.yy812 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812), &yymsp[0].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 442: /* table_primary ::= subquery alias_opt */ +{ yylhsminor.yy232 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232), &yymsp[0].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 442: /* alias_opt ::= */ -{ yymsp[1].minor.yy29 = nil_token; } + case 444: /* alias_opt ::= */ +{ yymsp[1].minor.yy481 = nil_token; } break; - case 443: /* alias_opt ::= table_alias */ -{ yylhsminor.yy29 = yymsp[0].minor.yy29; } - yymsp[0].minor.yy29 = yylhsminor.yy29; + case 445: /* alias_opt ::= table_alias */ +{ yylhsminor.yy481 = yymsp[0].minor.yy481; } + yymsp[0].minor.yy481 = yylhsminor.yy481; break; - case 444: /* alias_opt ::= AS table_alias */ -{ yymsp[-1].minor.yy29 = yymsp[0].minor.yy29; } + case 446: /* alias_opt ::= AS table_alias */ +{ yymsp[-1].minor.yy481 = yymsp[0].minor.yy481; } break; - case 445: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - case 446: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==446); -{ yymsp[-2].minor.yy812 = yymsp[-1].minor.yy812; } + case 447: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + case 448: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==448); +{ yymsp[-2].minor.yy232 = yymsp[-1].minor.yy232; } break; - case 447: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ -{ yylhsminor.yy812 = createJoinTableNode(pCxt, yymsp[-4].minor.yy612, yymsp[-5].minor.yy812, yymsp[-2].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; + case 449: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ +{ yylhsminor.yy232 = createJoinTableNode(pCxt, yymsp[-4].minor.yy700, yymsp[-5].minor.yy232, yymsp[-2].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-5].minor.yy232 = yylhsminor.yy232; break; - case 448: /* join_type ::= */ -{ yymsp[1].minor.yy612 = JOIN_TYPE_INNER; } + case 450: /* join_type ::= */ +{ yymsp[1].minor.yy700 = JOIN_TYPE_INNER; } break; - case 449: /* join_type ::= INNER */ -{ yymsp[0].minor.yy612 = JOIN_TYPE_INNER; } + case 451: /* join_type ::= INNER */ +{ yymsp[0].minor.yy700 = JOIN_TYPE_INNER; } break; - case 450: /* 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 452: /* 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.yy812 = createSelectStmt(pCxt, yymsp[-10].minor.yy137, yymsp[-9].minor.yy424, yymsp[-8].minor.yy812); - yymsp[-11].minor.yy812 = addWhereClause(pCxt, yymsp[-11].minor.yy812, yymsp[-7].minor.yy812); - yymsp[-11].minor.yy812 = addPartitionByClause(pCxt, yymsp[-11].minor.yy812, yymsp[-6].minor.yy424); - yymsp[-11].minor.yy812 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy812, yymsp[-2].minor.yy812); - yymsp[-11].minor.yy812 = addGroupByClause(pCxt, yymsp[-11].minor.yy812, yymsp[-1].minor.yy424); - yymsp[-11].minor.yy812 = addHavingClause(pCxt, yymsp[-11].minor.yy812, yymsp[0].minor.yy812); - yymsp[-11].minor.yy812 = addRangeClause(pCxt, yymsp[-11].minor.yy812, yymsp[-5].minor.yy812); - yymsp[-11].minor.yy812 = addEveryClause(pCxt, yymsp[-11].minor.yy812, yymsp[-4].minor.yy812); - yymsp[-11].minor.yy812 = addFillClause(pCxt, yymsp[-11].minor.yy812, yymsp[-3].minor.yy812); + yymsp[-11].minor.yy232 = createSelectStmt(pCxt, yymsp[-10].minor.yy777, yymsp[-9].minor.yy288, yymsp[-8].minor.yy232); + yymsp[-11].minor.yy232 = addWhereClause(pCxt, yymsp[-11].minor.yy232, yymsp[-7].minor.yy232); + yymsp[-11].minor.yy232 = addPartitionByClause(pCxt, yymsp[-11].minor.yy232, yymsp[-6].minor.yy288); + yymsp[-11].minor.yy232 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy232, yymsp[-2].minor.yy232); + yymsp[-11].minor.yy232 = addGroupByClause(pCxt, yymsp[-11].minor.yy232, yymsp[-1].minor.yy288); + yymsp[-11].minor.yy232 = addHavingClause(pCxt, yymsp[-11].minor.yy232, yymsp[0].minor.yy232); + yymsp[-11].minor.yy232 = addRangeClause(pCxt, yymsp[-11].minor.yy232, yymsp[-5].minor.yy232); + yymsp[-11].minor.yy232 = addEveryClause(pCxt, yymsp[-11].minor.yy232, yymsp[-4].minor.yy232); + yymsp[-11].minor.yy232 = addFillClause(pCxt, yymsp[-11].minor.yy232, yymsp[-3].minor.yy232); } break; - case 453: /* set_quantifier_opt ::= ALL */ -{ yymsp[0].minor.yy137 = false; } + case 455: /* set_quantifier_opt ::= ALL */ +{ yymsp[0].minor.yy777 = false; } break; - case 456: /* select_item ::= NK_STAR */ -{ yylhsminor.yy812 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 458: /* select_item ::= NK_STAR */ +{ yylhsminor.yy232 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 458: /* select_item ::= common_expression column_alias */ - case 468: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==468); -{ yylhsminor.yy812 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812), &yymsp[0].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 460: /* select_item ::= common_expression column_alias */ + case 470: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==470); +{ yylhsminor.yy232 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232), &yymsp[0].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 459: /* select_item ::= common_expression AS column_alias */ - case 469: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==469); -{ yylhsminor.yy812 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), &yymsp[0].minor.yy29); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 461: /* select_item ::= common_expression AS column_alias */ + case 471: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==471); +{ yylhsminor.yy232 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), &yymsp[0].minor.yy481); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 464: /* partition_by_clause_opt ::= PARTITION BY partition_list */ - case 486: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==486); - case 505: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==505); -{ yymsp[-2].minor.yy424 = yymsp[0].minor.yy424; } + case 466: /* partition_by_clause_opt ::= PARTITION BY partition_list */ + case 488: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==488); + case 507: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==507); +{ yymsp[-2].minor.yy288 = yymsp[0].minor.yy288; } break; - case 471: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ -{ yymsp[-5].minor.yy812 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } + case 473: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ +{ yymsp[-5].minor.yy232 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } break; - case 472: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ -{ yymsp[-3].minor.yy812 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } + case 474: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ +{ yymsp[-3].minor.yy232 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } break; - case 473: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-5].minor.yy812 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), NULL, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 475: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ +{ yymsp[-5].minor.yy232 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), NULL, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 474: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-7].minor.yy812 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy812), releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 476: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ +{ yymsp[-7].minor.yy232 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy232), releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 478: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ -{ yymsp[-3].minor.yy812 = createFillNode(pCxt, yymsp[-1].minor.yy594, NULL); } + case 480: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ +{ yymsp[-3].minor.yy232 = createFillNode(pCxt, yymsp[-1].minor.yy614, NULL); } break; - case 479: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ -{ yymsp[-5].minor.yy812 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy424)); } + case 481: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ +{ yymsp[-5].minor.yy232 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy288)); } break; - case 480: /* fill_mode ::= NONE */ -{ yymsp[0].minor.yy594 = FILL_MODE_NONE; } + case 482: /* fill_mode ::= NONE */ +{ yymsp[0].minor.yy614 = FILL_MODE_NONE; } break; - case 481: /* fill_mode ::= PREV */ -{ yymsp[0].minor.yy594 = FILL_MODE_PREV; } + case 483: /* fill_mode ::= PREV */ +{ yymsp[0].minor.yy614 = FILL_MODE_PREV; } break; - case 482: /* fill_mode ::= NULL */ -{ yymsp[0].minor.yy594 = FILL_MODE_NULL; } + case 484: /* fill_mode ::= NULL */ +{ yymsp[0].minor.yy614 = FILL_MODE_NULL; } break; - case 483: /* fill_mode ::= LINEAR */ -{ yymsp[0].minor.yy594 = FILL_MODE_LINEAR; } + case 485: /* fill_mode ::= LINEAR */ +{ yymsp[0].minor.yy614 = FILL_MODE_LINEAR; } break; - case 484: /* fill_mode ::= NEXT */ -{ yymsp[0].minor.yy594 = FILL_MODE_NEXT; } + case 486: /* fill_mode ::= NEXT */ +{ yymsp[0].minor.yy614 = FILL_MODE_NEXT; } break; - case 487: /* group_by_list ::= expr_or_subquery */ -{ yylhsminor.yy424 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 489: /* group_by_list ::= expr_or_subquery */ +{ yylhsminor.yy288 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 488: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; + case 490: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; break; - case 492: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ -{ yymsp[-5].minor.yy812 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } + case 494: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ +{ yymsp[-5].minor.yy232 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } break; - case 495: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + case 497: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ { - yylhsminor.yy812 = addOrderByClause(pCxt, yymsp[-3].minor.yy812, yymsp[-2].minor.yy424); - yylhsminor.yy812 = addSlimitClause(pCxt, yylhsminor.yy812, yymsp[-1].minor.yy812); - yylhsminor.yy812 = addLimitClause(pCxt, yylhsminor.yy812, yymsp[0].minor.yy812); + yylhsminor.yy232 = addOrderByClause(pCxt, yymsp[-3].minor.yy232, yymsp[-2].minor.yy288); + yylhsminor.yy232 = addSlimitClause(pCxt, yylhsminor.yy232, yymsp[-1].minor.yy232); + yylhsminor.yy232 = addLimitClause(pCxt, yylhsminor.yy232, yymsp[0].minor.yy232); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 498: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ -{ yylhsminor.yy812 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 500: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ +{ yylhsminor.yy232 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 499: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ -{ yylhsminor.yy812 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 501: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ +{ yylhsminor.yy232 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 507: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ - case 511: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==511); -{ yymsp[-1].minor.yy812 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } + case 509: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ + case 513: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==513); +{ yymsp[-1].minor.yy232 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } break; - case 508: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - case 512: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==512); -{ yymsp[-3].minor.yy812 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } + case 510: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + case 514: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==514); +{ yymsp[-3].minor.yy232 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; - case 509: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - case 513: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==513); -{ yymsp[-3].minor.yy812 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } + case 511: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + case 515: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==515); +{ yymsp[-3].minor.yy232 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } break; - case 514: /* subquery ::= NK_LP query_expression NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy812); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 516: /* subquery ::= NK_LP query_expression NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy232); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 519: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ -{ yylhsminor.yy812 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), yymsp[-1].minor.yy38, yymsp[0].minor.yy757); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 521: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ +{ yylhsminor.yy232 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), yymsp[-1].minor.yy866, yymsp[0].minor.yy833); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 520: /* ordering_specification_opt ::= */ -{ yymsp[1].minor.yy38 = ORDER_ASC; } + case 522: /* ordering_specification_opt ::= */ +{ yymsp[1].minor.yy866 = ORDER_ASC; } break; - case 521: /* ordering_specification_opt ::= ASC */ -{ yymsp[0].minor.yy38 = ORDER_ASC; } + case 523: /* ordering_specification_opt ::= ASC */ +{ yymsp[0].minor.yy866 = ORDER_ASC; } break; - case 522: /* ordering_specification_opt ::= DESC */ -{ yymsp[0].minor.yy38 = ORDER_DESC; } + case 524: /* ordering_specification_opt ::= DESC */ +{ yymsp[0].minor.yy866 = ORDER_DESC; } break; - case 523: /* null_ordering_opt ::= */ -{ yymsp[1].minor.yy757 = NULL_ORDER_DEFAULT; } + case 525: /* null_ordering_opt ::= */ +{ yymsp[1].minor.yy833 = NULL_ORDER_DEFAULT; } break; - case 524: /* null_ordering_opt ::= NULLS FIRST */ -{ yymsp[-1].minor.yy757 = NULL_ORDER_FIRST; } + case 526: /* null_ordering_opt ::= NULLS FIRST */ +{ yymsp[-1].minor.yy833 = NULL_ORDER_FIRST; } break; - case 525: /* null_ordering_opt ::= NULLS LAST */ -{ yymsp[-1].minor.yy757 = NULL_ORDER_LAST; } + case 527: /* null_ordering_opt ::= NULLS LAST */ +{ yymsp[-1].minor.yy833 = NULL_ORDER_LAST; } break; default: break; diff --git a/source/libs/parser/test/parInitialDTest.cpp b/source/libs/parser/test/parInitialDTest.cpp index c7865f3da3..3ded71242b 100644 --- a/source/libs/parser/test/parInitialDTest.cpp +++ b/source/libs/parser/test/parInitialDTest.cpp @@ -87,7 +87,6 @@ TEST_F(ParserInitialDTest, dropConsumerGroup) { // todo DROP database -// todo DROP dnode TEST_F(ParserInitialDTest, dropDnode) { useDb("root", "test"); @@ -95,11 +94,15 @@ TEST_F(ParserInitialDTest, dropDnode) { auto clearDropDnodeReq = [&]() { memset(&expect, 0, sizeof(SDropDnodeReq)); }; - auto setDropDnodeReqById = [&](int32_t dnodeId) { expect.dnodeId = dnodeId; }; + auto setDropDnodeReqById = [&](int32_t dnodeId, bool force = false) { + expect.dnodeId = dnodeId; + expect.force = force; + }; - auto setDropDnodeReqByEndpoint = [&](const char* pFqdn, int32_t port) { + auto setDropDnodeReqByEndpoint = [&](const char* pFqdn, int32_t port, bool force = false) { strcpy(expect.fqdn, pFqdn); expect.port = port; + expect.force = force; }; setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) { @@ -110,15 +113,24 @@ TEST_F(ParserInitialDTest, dropDnode) { ASSERT_EQ(req.dnodeId, expect.dnodeId); ASSERT_EQ(std::string(req.fqdn), std::string(expect.fqdn)); ASSERT_EQ(req.port, expect.port); + ASSERT_EQ(req.force, expect.force); }); setDropDnodeReqById(1); run("DROP DNODE 1"); clearDropDnodeReq(); + setDropDnodeReqById(2, true); + run("DROP DNODE 2 FORCE"); + clearDropDnodeReq(); + setDropDnodeReqByEndpoint("host1", 7030); run("DROP DNODE 'host1:7030'"); clearDropDnodeReq(); + + setDropDnodeReqByEndpoint("host2", 8030, true); + run("DROP DNODE 'host2:8030' FORCE"); + clearDropDnodeReq(); } // todo DROP function From f790d91b45346fd486f28166668bf8b0b8d7898e Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 31 Oct 2022 10:41:25 +0800 Subject: [PATCH 53/81] fix(query): check null before free resource, and some internal refactor. --- source/dnode/vnode/src/tsdb/tsdbRead.c | 4 +- source/libs/executor/inc/executorimpl.h | 6 +- source/libs/executor/src/executil.c | 4 ++ source/libs/executor/src/executorimpl.c | 74 +++++++------------------ source/libs/executor/src/scanoperator.c | 46 +++++++++++++-- 5 files changed, 70 insertions(+), 64 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 04ffe3d900..5f90c567be 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -1867,7 +1867,7 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo* if (minKey == key) { init = true; TSDBROW fRow = tsdbRowFromBlockData(pBlockData, pDumpInfo->rowIndex); - int32_t code = tRowMergerInit(&merge, &fRow, pReader->pSchema); + code = tRowMergerInit(&merge, &fRow, pReader->pSchema); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -1881,7 +1881,7 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo* tRowMerge(&merge, &fRow1); } else { init = true; - int32_t code = tRowMergerInit(&merge, &fRow1, pReader->pSchema); + code = tRowMergerInit(&merge, &fRow1, pReader->pSchema); if (code != TSDB_CODE_SUCCESS) { return code; } diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index cad4b562b8..1191b6a485 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -555,7 +555,7 @@ typedef struct SSysTableScanInfo { typedef struct SBlockDistInfo { SSDataBlock* pResBlock; - void* pHandle; + STsdbReader* pHandle; SReadHandle readHandle; uint64_t uid; // table uid } SBlockDistInfo; @@ -970,8 +970,8 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionWinodwPhysiNode* pSessionNode, SExecTaskInfo* pTaskInfo); SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo); -SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* readHandle, uint64_t uid, - SBlockDistScanPhysiNode* pBlockScanNode, SExecTaskInfo* pTaskInfo); +SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, + SExecTaskInfo* pTaskInfo); SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond, SExecTaskInfo* pTaskInfo); diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 82427f6eff..64fe529b4f 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1772,6 +1772,10 @@ _error: } void* tableListDestroy(STableListInfo* pTableListInfo) { + if (pTableListInfo == NULL) { + return NULL; + } + pTableListInfo->pTableList = taosArrayDestroy(pTableListInfo->pTableList); taosMemoryFreeClear(pTableListInfo->groupOffset); diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 8a2d92af02..11dbfaff9f 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3378,34 +3378,11 @@ bool groupbyTbname(SNodeList* pGroupList) { return bytbname; } -static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pCond) { - memset(pCond, 0, sizeof(SQueryTableDataCond)); - - pCond->order = TSDB_ORDER_ASC; - pCond->numOfCols = 1; - pCond->colList = taosMemoryCalloc(1, sizeof(SColumnInfo)); - if (pCond->colList == NULL) { - terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; - return terrno; - } - - pCond->colList->colId = 1; - pCond->colList->type = TSDB_DATA_TYPE_TIMESTAMP; - pCond->colList->bytes = sizeof(TSKEY); - - pCond->twindows = (STimeWindow){.skey = INT64_MIN, .ekey = INT64_MAX}; - pCond->suid = uid; - pCond->type = TIMEWINDOW_RANGE_CONTAINED; - pCond->startVersion = -1; - pCond->endVersion = -1; - - return TSDB_CODE_SUCCESS; -} - -SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, - STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, - const char* pUser) { +SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SNode* pTagCond, + SNode* pTagIndexCond, const char* pUser) { int32_t type = nodeType(pPhyNode); + STableListInfo* pTableListInfo = pTaskInfo->pTableInfoList; + const char* idstr = GET_TASKID(pTaskInfo); if (pPhyNode->pChildren == NULL || LIST_LENGTH(pPhyNode->pChildren) == 0) { SOperatorInfo* pOperator = NULL; @@ -3420,10 +3397,10 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, pHandle, - pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + pTableListInfo, pTagCond, pTagIndexCond, idstr); if (code) { pTaskInfo->code = code; - qError("failed to createScanTableListInfo, code:%s, %s", tstrerror(code), GET_TASKID(pTaskInfo)); + qError("failed to createScanTableListInfo, code:%s, %s", tstrerror(code), idstr); return NULL; } @@ -3440,7 +3417,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo STableMergeScanPhysiNode* pTableScanNode = (STableMergeScanPhysiNode*)pPhyNode; int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, /*pTableScanNode->groupSort*/true, pHandle, - pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + pTableListInfo, pTagCond, pTagIndexCond, idstr); if (code) { pTaskInfo->code = code; qError("failed to createScanTableListInfo, code: %s", tstrerror(code)); @@ -3465,7 +3442,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo if (pHandle->vnode) { int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, - pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + pHandle, pTableListInfo, pTagCond, pTagIndexCond, idstr); if (code) { pTaskInfo->code = code; qError("failed to createScanTableListInfo, code: %s", tstrerror(code)); @@ -3492,7 +3469,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo STagScanPhysiNode* pScanPhyNode = (STagScanPhysiNode*)pPhyNode; int32_t code = createScanTableListInfo(pScanPhyNode, NULL, false, pHandle, pTableListInfo, pTagCond, - pTagIndexCond, GET_TASKID(pTaskInfo)); + pTagIndexCond, idstr); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; qError("failed to getTableList, code: %s", tstrerror(code)); @@ -3516,30 +3493,16 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo tableListAddTableInfo(pTableListInfo, p->uid, 0); } taosArrayDestroy(pList); - } else { // Create one table group. + } else { // Create group with only one table tableListAddTableInfo(pTableListInfo, pBlockNode->uid, 0); } - SQueryTableDataCond cond = {0}; - - int32_t code = initTableblockDistQueryCond(pBlockNode->suid, &cond); - if (code != TSDB_CODE_SUCCESS) { - return NULL; - } - - size_t num = tableListGetSize(pTableListInfo); - void* pList = tableListGetInfo(pTableListInfo, 0); - - STsdbReader* pReader = NULL; - tsdbReaderOpen(pHandle->vnode, &cond, pList, num, &pReader, ""); - cleanupQueryTableDataCond(&cond); - - pOperator = createDataBlockInfoScanOperator(pReader, pHandle, cond.suid, pBlockNode, pTaskInfo); + pOperator = createDataBlockInfoScanOperator(pHandle, pBlockNode, pTaskInfo); } else if (QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN == type) { SLastRowScanPhysiNode* pScanNode = (SLastRowScanPhysiNode*)pPhyNode; int32_t code = createScanTableListInfo(&pScanNode->scan, pScanNode->pGroupTags, true, pHandle, pTableListInfo, - pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + pTagCond, pTagIndexCond, idstr); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; return NULL; @@ -3566,17 +3529,18 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo } size_t size = LIST_LENGTH(pPhyNode->pChildren); - SOperatorInfo** ops = taosMemoryCalloc(size, POINTER_BYTES); + if (ops == NULL) { + return NULL; + } + for (int32_t i = 0; i < size; ++i) { SPhysiNode* pChildNode = (SPhysiNode*)nodesListGetNode(pPhyNode->pChildren, i); - ops[i] = createOperatorTree(pChildNode, pTaskInfo, pHandle, pTableListInfo, pTagCond, pTagIndexCond, pUser); + ops[i] = createOperatorTree(pChildNode, pTaskInfo, pHandle, pTagCond, pTagIndexCond, pUser); if (ops[i] == NULL) { taosMemoryFree(ops); return NULL; } - - ops[i]->resultDataBlockId = pChildNode->pOutputDataBlockDesc->dataBlockId; } SOperatorInfo* pOptr = NULL; @@ -3888,8 +3852,8 @@ int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SRead sql = NULL; (*pTaskInfo)->pSubplan = pPlan; - (*pTaskInfo)->pRoot = createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, (*pTaskInfo)->pTableInfoList, - pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user); + (*pTaskInfo)->pRoot = + createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user); if (NULL == (*pTaskInfo)->pRoot) { code = (*pTaskInfo)->code; diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index e254083d88..b9324d0c64 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1000,8 +1000,31 @@ static void destroyBlockDistScanOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* readHandle, uint64_t uid, - SBlockDistScanPhysiNode* pBlockScanNode, SExecTaskInfo* pTaskInfo) { +static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pCond) { + memset(pCond, 0, sizeof(SQueryTableDataCond)); + + pCond->order = TSDB_ORDER_ASC; + pCond->numOfCols = 1; + pCond->colList = taosMemoryCalloc(1, sizeof(SColumnInfo)); + if (pCond->colList == NULL) { + terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; + return terrno; + } + + pCond->colList->colId = 1; + pCond->colList->type = TSDB_DATA_TYPE_TIMESTAMP; + pCond->colList->bytes = sizeof(TSKEY); + + pCond->twindows = (STimeWindow){.skey = INT64_MIN, .ekey = INT64_MAX}; + pCond->suid = uid; + pCond->type = TIMEWINDOW_RANGE_CONTAINED; + pCond->startVersion = -1; + pCond->endVersion = -1; + + return TSDB_CODE_SUCCESS; +} + +SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, SExecTaskInfo* pTaskInfo) { SBlockDistInfo* pInfo = taosMemoryCalloc(1, sizeof(SBlockDistInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -1009,9 +1032,24 @@ SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* re goto _error; } - pInfo->pHandle = dataReader; + { + SQueryTableDataCond cond = {0}; + + int32_t code = initTableblockDistQueryCond(pBlockScanNode->suid, &cond); + if (code != TSDB_CODE_SUCCESS) { + return NULL; + } + + STableListInfo* pTableListInfo = pTaskInfo->pTableInfoList; + size_t num = tableListGetSize(pTableListInfo); + void* pList = tableListGetInfo(pTableListInfo, 0); + + tsdbReaderOpen(readHandle->vnode, &cond, pList, num, &pInfo->pHandle, pTaskInfo->id.str); + cleanupQueryTableDataCond(&cond); + } + pInfo->readHandle = *readHandle; - pInfo->uid = uid; + pInfo->uid = pBlockScanNode->suid; pInfo->pResBlock = createResDataBlock(pBlockScanNode->node.pOutputDataBlockDesc); int32_t numOfCols = 0; From 79ea4c2c79082e8dfe7fbfb8d659f0b0efcf2e97 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 31 Oct 2022 11:43:00 +0800 Subject: [PATCH 54/81] fix(query): add null ptr check. --- source/libs/executor/src/executil.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 64fe529b4f..bb87b5029a 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1788,6 +1788,10 @@ void* tableListDestroy(STableListInfo* pTableListInfo) { } void tableListClear(STableListInfo* pTableListInfo) { + if (pTableListInfo == NULL) { + return; + } + taosArrayClear(pTableListInfo->pTableList); taosHashClear(pTableListInfo->map); taosMemoryFree(pTableListInfo->groupOffset); From c4f4e008d0c820d04d56f7c55cdd65a178187e0f Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 31 Oct 2022 11:53:35 +0800 Subject: [PATCH 55/81] fix(query): add null ptr check. --- source/libs/executor/src/executor.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index 36af05d1c9..bbd62a9912 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -1001,11 +1001,14 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT initQueryTableDataCondForTmq(&pTaskInfo->streamInfo.tableCond, sContext, &mtInfo); pTaskInfo->streamInfo.tableCond.twindows.skey = pOffset->ts; - STableListInfo* pListInfo = pTaskInfo->pTableInfoList; - tableListAddTableInfo(pListInfo, mtInfo.uid, 0); + if (pTaskInfo->pTableInfoList == NULL) { + pTaskInfo->pTableInfoList = tableListCreate(); + } - STableKeyInfo* pList = tableListGetInfo(pListInfo, 0); - int32_t size = tableListGetSize(pListInfo); + tableListAddTableInfo(pTaskInfo->pTableInfoList, mtInfo.uid, 0); + + STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0); + int32_t size = tableListGetSize(pTaskInfo->pTableInfoList); ASSERT(size == 1); tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, size, &pInfo->dataReader, NULL); From 8831f386e68fe76d1bcf3dbbd527fb0163c00e37 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Mon, 31 Oct 2022 11:57:58 +0800 Subject: [PATCH 56/81] opt http module --- source/libs/transport/src/thttp.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c index 0c4492e1f0..fc61fb5122 100644 --- a/source/libs/transport/src/thttp.c +++ b/source/libs/transport/src/thttp.c @@ -107,13 +107,14 @@ static void transHttpEnvDestroy() { } typedef struct SHttpClient { - uv_connect_t conn; - uv_tcp_t tcp; - uv_write_t req; - uv_buf_t* wbuf; - char* rbuf; - char* addr; - uint16_t port; + uv_connect_t conn; + uv_tcp_t tcp; + uv_write_t req; + uv_buf_t* wbuf; + char* rbuf; + char* addr; + uint16_t port; + struct sockaddr_in dest; } SHttpClient; static int32_t taosBuildHttpHeader(const char* server, int32_t contLen, char* pHead, int32_t headLen, @@ -240,8 +241,7 @@ static FORCE_INLINE void clientRecvCb(uv_stream_t* handle, ssize_t nread, const static void clientSentCb(uv_write_t* req, int32_t status) { SHttpClient* cli = req->data; if (status != 0) { - terrno = TAOS_SYSTEM_ERROR(status); - uError("http-report failed to send data %s", uv_strerror(status)); + uError("http-report failed to send data, reason: %s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); } else { @@ -253,7 +253,6 @@ static void clientSentCb(uv_write_t* req, int32_t status) { } status = uv_read_start((uv_stream_t*)&cli->tcp, clientAllocBuffCb, clientRecvCb); if (status != 0) { - terrno = TAOS_SYSTEM_ERROR(status); uError("http-report failed to recv data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); @@ -265,7 +264,6 @@ static void clientSentCb(uv_write_t* req, int32_t status) { static void clientConnCb(uv_connect_t* req, int32_t status) { SHttpClient* cli = req->data; if (status != 0) { - terrno = TAOS_SYSTEM_ERROR(status); uError("http-report failed to conn to server, reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); @@ -276,7 +274,6 @@ static void clientConnCb(uv_connect_t* req, int32_t status) { } status = uv_write(&cli->req, (uv_stream_t*)&cli->tcp, cli->wbuf, 2, clientSentCb); if (0 != status) { - terrno = TAOS_SYSTEM_ERROR(status); uError("http-report failed to send data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); @@ -289,7 +286,6 @@ static void clientConnCb(uv_connect_t* req, int32_t status) { static FORCE_INLINE int32_t taosBuildDstAddr(const char* server, uint16_t port, struct sockaddr_in* dest) { uint32_t ip = taosGetIpv4FromFqdn(server); if (ip == 0xffffffff) { - terrno = TAOS_SYSTEM_ERROR(errno); uError("http-report failed to get http server:%s since %s", server, errno == 0 ? "invalid http server" : terrstr()); return -1; } @@ -309,6 +305,7 @@ static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* p msg->port = port; msg->cont = taosMemoryMalloc(contLen); memcpy(msg->cont, pCont, contLen); + msg->len = contLen; msg->flag = flag; transAsyncSend(http->asyncPool, &(msg->q)); @@ -329,8 +326,6 @@ static void httpHandleReq(SHttpMsg* msg) { } } - terrno = 0; - int32_t len = 2048; char* header = taosMemoryCalloc(1, len); int32_t headLen = taosBuildHttpHeader(msg->server, msg->len, header, len, msg->flag); @@ -347,6 +342,7 @@ static void httpHandleReq(SHttpMsg* msg) { cli->rbuf = taosMemoryCalloc(1, HTTP_RECV_BUF_SIZE); cli->addr = msg->server; cli->port = msg->port; + cli->dest = dest; taosMemoryFree(msg); @@ -361,7 +357,7 @@ static void httpHandleReq(SHttpMsg* msg) { return; } - ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&dest, clientConnCb); + ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&cli->dest, clientConnCb); if (ret != 0) { uError("http-report failed to connect to http-server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); From 0b20b914bbd5d7f0ff8a0f770fec3ff056dd470e Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Mon, 31 Oct 2022 14:17:26 +0800 Subject: [PATCH 57/81] refactor(sync): add sync local cmd --- include/libs/sync/sync.h | 2 ++ source/dnode/mnode/impl/src/mndMain.c | 5 ++++ source/dnode/vnode/src/vnd/vnodeSync.c | 5 ++++ source/libs/sync/src/syncMain.c | 39 +++++++++++++++++++++----- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/include/libs/sync/sync.h b/include/libs/sync/sync.h index b6c4a58150..95ee2ca2bc 100644 --- a/include/libs/sync/sync.h +++ b/include/libs/sync/sync.h @@ -232,6 +232,8 @@ int32_t syncLeaderTransferTo(int64_t rid, SNodeInfo newLeader); int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex); int32_t syncEndSnapshot(int64_t rid); +int32_t syncStepDown(int64_t rid, SyncTerm newTerm); + #ifdef __cplusplus } #endif diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index 7207343582..98a24286f6 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -586,6 +586,11 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { SRpcMsg rsp = {.code = code, .info = pMsg->info}; tmsgSendRsp(&rsp); + } else if (pMsg->msgType == TDMT_SYNC_LOCAL_CMD) { + SyncLocalCmd *pSyncMsg = syncLocalCmdFromRpcMsg2(pMsg); + code = syncNodeOnLocalCmd(pSyncNode, pSyncMsg); + syncLocalCmdDestroy(pSyncMsg); + } else { mError("failed to process msg:%p since invalid type:%s", pMsg, TMSG_INFO(pMsg->msgType)); code = -1; diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index 7acf5b4003..bf665fd6db 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -350,6 +350,11 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { code = syncNodeOnSnapshotReply(pSyncNode, pSyncMsg); syncSnapshotRspDestroy(pSyncMsg); + } else if (pMsg->msgType == TDMT_SYNC_LOCAL_CMD) { + SyncLocalCmd *pSyncMsg = syncLocalCmdFromRpcMsg2(pMsg); + code = syncNodeOnLocalCmd(pSyncNode, pSyncMsg); + syncLocalCmdDestroy(pSyncMsg); + } else { vGError("vgId:%d, msg:%p failed to process since error msg type:%d", pVnode->config.vgId, pMsg, pMsg->msgType); code = -1; diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 02e5c643a4..535db4181c 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -528,6 +528,20 @@ int32_t syncEndSnapshot(int64_t rid) { return code; } +int32_t syncStepDown(int64_t rid, SyncTerm newTerm) { + SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + if (pSyncNode == NULL) { + terrno = TSDB_CODE_SYN_INTERNAL_ERROR; + return -1; + } + ASSERT(rid == pSyncNode->rid); + + syncNodeStepDown(pSyncNode, newTerm); + + taosReleaseRef(tsNodeRefId, pSyncNode->rid); + return 0; +} + int32_t syncNodeLeaderTransfer(SSyncNode* pSyncNode) { if (pSyncNode->peersNum == 0) { sDebug("only one replica, cannot leader transfer"); @@ -3041,12 +3055,6 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) { SRpcMsg rpcMsg; syncHeartbeatReply2RpcMsg(pMsgReply, &rpcMsg); -#if 1 - if (pMsg->term >= ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_FOLLOWER) { - syncNodeStepDown(ths, pMsg->term); - } -#endif - if (pMsg->term == ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_LEADER) { syncNodeResetElectTimer(ths); ths->minMatchIndex = pMsg->minMatchIndex; @@ -3058,6 +3066,12 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) { #endif } +#if 1 + if (pMsg->term >= ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_FOLLOWER) { + syncNodeStepDown(ths, pMsg->term); + } +#endif + /* // htonl SMsgHead* pHead = rpcMsg.pCont; @@ -3081,6 +3095,17 @@ int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg) { return 0; } +int32_t syncNodeOnLocalCmd(SSyncNode* ths, SyncLocalCmd* pMsg) { + if (pMsg->cmd == SYNC_LOCAL_CMD_STEP_DOWN) { + syncNodeStepDown(ths, pMsg->sdNewTerm); + + } else { + syncNodeErrorLog(ths, "error local cmd"); + } + + return 0; +} + // TLA+ Spec // ClientRequest(i, v) == // /\ state[i] = Leader @@ -3379,7 +3404,7 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde // ASSERT(code == 0); // ASSERT(pEntry != NULL); if (code != 0 || pEntry == NULL) { - syncNodeErrorLog(ths, "get log entry error"); + syncNodeErrorLog(ths, "get log entry error"); continue; } } From 851f34ff36d0c390f58bda312b090bfb231608ae Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Mon, 31 Oct 2022 14:41:59 +0800 Subject: [PATCH 58/81] test:add replica 3 for all testcases and frameworks --- tests/pytest/util/cases.py | 4 +- tests/system-test/0-others/cachemodel.py | 2 +- tests/system-test/0-others/compatibility.py | 2 +- tests/system-test/0-others/fsync.py | 2 +- tests/system-test/0-others/show.py | 2 +- tests/system-test/0-others/sysinfo.py | 2 +- tests/system-test/0-others/taosShell.py | 2 +- tests/system-test/0-others/taosShellError.py | 2 +- tests/system-test/0-others/taosShellNetChk.py | 2 +- tests/system-test/0-others/taosdMonitor.py | 2 +- tests/system-test/0-others/taosdShell.py | 2 +- tests/system-test/0-others/taosdlog.py | 2 +- tests/system-test/0-others/telemetry.py | 2 +- tests/system-test/0-others/udfTest.py | 2 +- tests/system-test/0-others/udf_cfg1.py | 2 +- tests/system-test/0-others/udf_cfg2.py | 2 +- tests/system-test/0-others/udf_create.py | 2 +- .../system-test/0-others/udf_restart_taosd.py | 2 +- tests/system-test/0-others/user_control.py | 2 +- tests/system-test/1-insert/alter_database.py | 2 +- tests/system-test/1-insert/alter_stable.py | 2 +- tests/system-test/1-insert/alter_table.py | 2 +- tests/system-test/1-insert/block_wise.py | 2 +- .../system-test/1-insert/create_retentions.py | 2 +- .../system-test/1-insert/database_pre_suf.py | 2 +- .../system-test/1-insert/db_tb_name_check.py | 2 +- tests/system-test/1-insert/delete_data.py | 2 +- .../1-insert/influxdb_line_taosc_insert.py | 2 +- .../1-insert/insertWithMoreVgroup.py | 2 +- tests/system-test/1-insert/insert_drop.py | 2 +- tests/system-test/1-insert/keep_expired.py | 2 +- tests/system-test/1-insert/mutil_stage.py | 2 +- .../1-insert/mutipythonnodebugtaosd.py | 2 +- .../1-insert/opentsdb_json_taosc_insert.py | 2 +- .../opentsdb_telnet_line_taosc_insert.py | 2 +- tests/system-test/1-insert/table_comment.py | 2 +- tests/system-test/1-insert/table_param_ttl.py | 2 +- .../1-insert/tb_100w_data_order.py | 2 +- .../1-insert/test_stmt_muti_insert_query.py | 2 +- .../1-insert/test_stmt_set_tbname_tag.py | 2 +- tests/system-test/1-insert/time_range_wise.py | 2 +- tests/system-test/1-insert/update_data.py | 2 +- .../1-insert/update_data_muti_rows.py | 2 +- tests/system-test/2-query/Now.py | 2 +- tests/system-test/2-query/Timediff.py | 2 +- tests/system-test/2-query/To_iso8601.py | 2 +- tests/system-test/2-query/To_unixtimestamp.py | 2 +- tests/system-test/2-query/Today.py | 2 +- tests/system-test/2-query/abs.py | 2 +- tests/system-test/2-query/and_or_for_byte.py | 2 +- tests/system-test/2-query/apercentile.py | 2 +- tests/system-test/2-query/avg.py | 2 +- tests/system-test/2-query/between.py | 2 +- tests/system-test/2-query/bottom.py | 2 +- tests/system-test/2-query/cast.py | 2 +- tests/system-test/2-query/ceil.py | 2 +- tests/system-test/2-query/char_length.py | 2 +- tests/system-test/2-query/check_tsdb.py | 2 +- tests/system-test/2-query/concat.py | 2 +- tests/system-test/2-query/concat2.py | 2 +- tests/system-test/2-query/concat_ws.py | 2 +- tests/system-test/2-query/concat_ws2.py | 2 +- tests/system-test/2-query/count.py | 2 +- tests/system-test/2-query/count_partition.py | 2 +- tests/system-test/2-query/csum.py | 2 +- tests/system-test/2-query/db.py | 2 +- tests/system-test/2-query/diff.py | 2 +- tests/system-test/2-query/distinct.py | 2 +- .../2-query/distribute_agg_apercentile.py | 2 +- .../system-test/2-query/distribute_agg_avg.py | 2 +- .../2-query/distribute_agg_count.py | 2 +- .../system-test/2-query/distribute_agg_max.py | 2 +- .../system-test/2-query/distribute_agg_min.py | 2 +- .../2-query/distribute_agg_spread.py | 2 +- .../2-query/distribute_agg_stddev.py | 2 +- .../system-test/2-query/distribute_agg_sum.py | 2 +- tests/system-test/2-query/elapsed.py | 2 +- tests/system-test/2-query/explain.py | 2 +- tests/system-test/2-query/first.py | 2 +- tests/system-test/2-query/floor.py | 2 +- tests/system-test/2-query/function_diff.py | 2 +- tests/system-test/2-query/function_null.py | 2 +- .../2-query/function_stateduration.py | 2 +- tests/system-test/2-query/histogram.py | 33 ++++++++++- tests/system-test/2-query/hyperloglog.py | 2 +- tests/system-test/2-query/interp.py | 2 +- tests/system-test/2-query/irate.py | 2 +- tests/system-test/2-query/join.py | 2 +- tests/system-test/2-query/join2.py | 2 +- tests/system-test/2-query/json_tag.py | 2 +- .../2-query/json_tag_large_tables.py | 2 +- tests/system-test/2-query/last.py | 2 +- tests/system-test/2-query/last_row.py | 2 +- tests/system-test/2-query/leastsquares.py | 2 +- tests/system-test/2-query/length.py | 2 +- tests/system-test/2-query/log.py | 2 +- tests/system-test/2-query/lower.py | 2 +- tests/system-test/2-query/ltrim.py | 2 +- tests/system-test/2-query/mavg.py | 2 +- tests/system-test/2-query/max.py | 2 +- tests/system-test/2-query/max_partition.py | 2 +- tests/system-test/2-query/min.py | 2 +- tests/system-test/2-query/nestedQuery.py | 2 +- tests/system-test/2-query/percentile.py | 2 +- tests/system-test/2-query/qnodeCluster.py | 2 +- .../2-query/query_cols_tags_and_or.py | 2 +- tests/system-test/2-query/round.py | 2 +- tests/system-test/2-query/rtrim.py | 2 +- tests/system-test/2-query/sample.py | 2 +- tests/system-test/2-query/smaTest.py | 2 +- tests/system-test/2-query/sml.py | 2 +- tests/system-test/2-query/spread.py | 2 +- tests/system-test/2-query/stablity.py | 2 +- tests/system-test/2-query/statecount.py | 2 +- tests/system-test/2-query/stateduration.py | 2 +- tests/system-test/2-query/stddev.py | 2 +- tests/system-test/2-query/substr.py | 2 +- tests/system-test/2-query/sum.py | 2 +- tests/system-test/2-query/tail.py | 2 +- tests/system-test/2-query/timetruncate.py | 2 +- tests/system-test/2-query/timezone.py | 2 +- tests/system-test/2-query/top.py | 2 +- tests/system-test/2-query/tsbsQuery.py | 2 +- tests/system-test/2-query/ttl_comment.py | 2 +- tests/system-test/2-query/twa.py | 2 +- tests/system-test/2-query/union.py | 2 +- tests/system-test/2-query/union1.py | 2 +- tests/system-test/2-query/union2.py | 2 +- tests/system-test/2-query/union3.py | 2 +- tests/system-test/2-query/union4.py | 2 +- tests/system-test/2-query/unique.py | 2 +- tests/system-test/2-query/upper.py | 2 +- tests/system-test/2-query/varchar.py | 2 +- tests/system-test/5-taos-tools/TD-12478.py | 2 +- .../taosdump/taosdumpTestColTag.py | 2 +- .../5dnode3mnodeSep1VnodeStopMnodeCreateDb.py | 9 ++- ...ode3mnodeSep1VnodeStopMnodeCreateDbRep3.py | 4 +- .../6-cluster/clusterCommonCreate.py | 2 +- tests/system-test/7-tmq/basic5.py | 2 +- tests/system-test/7-tmq/create_wrong_topic.py | 2 +- .../7-tmq/dataFromTsdbNWal-multiCtb.py | 2 +- tests/system-test/7-tmq/dataFromTsdbNWal.py | 2 +- tests/system-test/7-tmq/db.py | 2 +- .../7-tmq/dropDbR3ConflictTransaction.py | 2 +- tests/system-test/7-tmq/schema.py | 2 +- tests/system-test/7-tmq/stbFilter.py | 2 +- tests/system-test/7-tmq/stbTagFilter-1ctb.py | 2 +- .../7-tmq/stbTagFilter-multiCtb.py | 2 +- tests/system-test/7-tmq/subscribeDb.py | 2 +- tests/system-test/7-tmq/subscribeDb0.py | 2 +- tests/system-test/7-tmq/subscribeDb1.py | 2 +- tests/system-test/7-tmq/subscribeDb2.py | 2 +- tests/system-test/7-tmq/subscribeDb3.py | 2 +- tests/system-test/7-tmq/subscribeDb4.py | 2 +- tests/system-test/7-tmq/subscribeStb.py | 2 +- tests/system-test/7-tmq/subscribeStb0.py | 2 +- tests/system-test/7-tmq/subscribeStb1.py | 2 +- tests/system-test/7-tmq/subscribeStb2.py | 2 +- tests/system-test/7-tmq/subscribeStb3.py | 2 +- tests/system-test/7-tmq/subscribeStb4.py | 2 +- tests/system-test/7-tmq/tmq3mnodeSwitch.py | 2 +- tests/system-test/7-tmq/tmqAlterSchema.py | 2 +- tests/system-test/7-tmq/tmqAutoCreateTbl.py | 2 +- tests/system-test/7-tmq/tmqCheckData.py | 2 +- tests/system-test/7-tmq/tmqCheckData1.py | 2 +- tests/system-test/7-tmq/tmqCommon.py | 2 +- .../7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py | 2 +- .../system-test/7-tmq/tmqConsFromTsdb-1ctb.py | 2 +- ...nsFromTsdb-mutilVg-mutilCtb-funcNFilter.py | 2 +- .../7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py | 2 +- .../7-tmq/tmqConsFromTsdb-mutilVg.py | 2 +- tests/system-test/7-tmq/tmqConsFromTsdb.py | 2 +- .../tmqConsFromTsdb1-1ctb-funcNFilter.py | 2 +- .../7-tmq/tmqConsFromTsdb1-1ctb.py | 2 +- ...sFromTsdb1-mutilVg-mutilCtb-funcNFilter.py | 2 +- .../tmqConsFromTsdb1-mutilVg-mutilCtb.py | 2 +- .../7-tmq/tmqConsFromTsdb1-mutilVg.py | 2 +- tests/system-test/7-tmq/tmqConsFromTsdb1.py | 2 +- tests/system-test/7-tmq/tmqConsumerGroup.py | 2 +- tests/system-test/7-tmq/tmqDelete-1ctb.py | 2 +- tests/system-test/7-tmq/tmqDelete-multiCtb.py | 2 +- tests/system-test/7-tmq/tmqDnode.py | 2 +- tests/system-test/7-tmq/tmqDnodeRestart.py | 2 +- .../system-test/7-tmq/tmqDropNtb-snapshot0.py | 2 +- .../system-test/7-tmq/tmqDropNtb-snapshot1.py | 2 +- tests/system-test/7-tmq/tmqDropStb.py | 2 +- tests/system-test/7-tmq/tmqDropStbCtb.py | 2 +- tests/system-test/7-tmq/tmqError.py | 2 +- tests/system-test/7-tmq/tmqModule.py | 2 +- tests/system-test/7-tmq/tmqShow.py | 2 +- tests/system-test/7-tmq/tmqSubscribeStb-r3.py | 2 +- .../7-tmq/tmqUdf-multCtb-snapshot0.py | 2 +- .../7-tmq/tmqUdf-multCtb-snapshot1.py | 2 +- tests/system-test/7-tmq/tmqUdf.py | 2 +- tests/system-test/7-tmq/tmqUpdate-1ctb.py | 2 +- .../7-tmq/tmqUpdate-multiCtb-snapshot0.py | 2 +- .../7-tmq/tmqUpdate-multiCtb-snapshot1.py | 2 +- tests/system-test/7-tmq/tmqUpdate-multiCtb.py | 2 +- .../system-test/7-tmq/tmqUpdateWithConsume.py | 2 +- tests/system-test/7-tmq/tmq_taosx.py | 2 +- tests/system-test/99-TDcase/TD-15517.py | 2 +- tests/system-test/99-TDcase/TD-15554.py | 2 +- tests/system-test/99-TDcase/TD-15557.py | 2 +- tests/system-test/99-TDcase/TD-15563.py | 2 +- tests/system-test/99-TDcase/TD-16025.py | 2 +- tests/system-test/99-TDcase/TD-16821.py | 2 +- tests/system-test/99-TDcase/TD-17255.py | 2 +- tests/system-test/99-TDcase/TD-17699.py | 2 +- tests/system-test/99-TDcase/TD-19201.py | 2 +- tests/system-test/fulltest.sh | 58 +++++++++---------- tests/system-test/test.py | 15 +++-- 211 files changed, 282 insertions(+), 251 deletions(-) mode change 100644 => 100755 tests/system-test/fulltest.sh diff --git a/tests/pytest/util/cases.py b/tests/pytest/util/cases.py index 2bfd8efdcd..3eb5cf2548 100644 --- a/tests/pytest/util/cases.py +++ b/tests/pytest/util/cases.py @@ -63,14 +63,14 @@ class TDCases: tdLog.info("total %d Linux test case(s) executed" % (runNum)) - def runOneLinux(self, conn, fileName): + def runOneLinux(self, conn, fileName, replicaVar): testModule = self.__dynamicLoadModule(fileName) runNum = 0 for tmp in self.linuxCases: if tmp.name.find(fileName) != -1: case = testModule.TDTestCase() - case.init(conn, self._logSql) + case.init(conn, self._logSql, replicaVar) try: case.run() except Exception as e: diff --git a/tests/system-test/0-others/cachemodel.py b/tests/system-test/0-others/cachemodel.py index 42c52a2f3c..53834f792d 100644 --- a/tests/system-test/0-others/cachemodel.py +++ b/tests/system-test/0-others/cachemodel.py @@ -14,7 +14,7 @@ class TDTestCase: updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), True) diff --git a/tests/system-test/0-others/compatibility.py b/tests/system-test/0-others/compatibility.py index e81579a9e4..88fbcd179d 100644 --- a/tests/system-test/0-others/compatibility.py +++ b/tests/system-test/0-others/compatibility.py @@ -22,7 +22,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py index 6eefc3db24..fe470c442e 100644 --- a/tests/system-test/0-others/fsync.py +++ b/tests/system-test/0-others/fsync.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/show.py b/tests/system-test/0-others/show.py index c25d1d1f33..6ce8872cda 100644 --- a/tests/system-test/0-others/show.py +++ b/tests/system-test/0-others/show.py @@ -20,7 +20,7 @@ from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/0-others/sysinfo.py b/tests/system-test/0-others/sysinfo.py index a4716dd544..b9ea39fc84 100644 --- a/tests/system-test/0-others/sysinfo.py +++ b/tests/system-test/0-others/sysinfo.py @@ -20,7 +20,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db' diff --git a/tests/system-test/0-others/taosShell.py b/tests/system-test/0-others/taosShell.py index 879d78e7ac..accb49dbfb 100644 --- a/tests/system-test/0-others/taosShell.py +++ b/tests/system-test/0-others/taosShell.py @@ -108,7 +108,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosShellError.py b/tests/system-test/0-others/taosShellError.py index 0dca5ff40f..e8271387a8 100644 --- a/tests/system-test/0-others/taosShellError.py +++ b/tests/system-test/0-others/taosShellError.py @@ -110,7 +110,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosShellNetChk.py b/tests/system-test/0-others/taosShellNetChk.py index 80f6a6bc30..72c06f71be 100644 --- a/tests/system-test/0-others/taosShellNetChk.py +++ b/tests/system-test/0-others/taosShellNetChk.py @@ -110,7 +110,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosdMonitor.py b/tests/system-test/0-others/taosdMonitor.py index 96e057c9f8..a9907419e4 100644 --- a/tests/system-test/0-others/taosdMonitor.py +++ b/tests/system-test/0-others/taosdMonitor.py @@ -284,7 +284,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosdShell.py b/tests/system-test/0-others/taosdShell.py index e09c8edce9..d09a9e7a47 100644 --- a/tests/system-test/0-others/taosdShell.py +++ b/tests/system-test/0-others/taosdShell.py @@ -44,7 +44,7 @@ class TDTestCase: # print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosdlog.py b/tests/system-test/0-others/taosdlog.py index bd3d6b9b4c..ba265abc2d 100644 --- a/tests/system-test/0-others/taosdlog.py +++ b/tests/system-test/0-others/taosdlog.py @@ -10,7 +10,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/telemetry.py b/tests/system-test/0-others/telemetry.py index 812b8b40c5..021b9aed2c 100644 --- a/tests/system-test/0-others/telemetry.py +++ b/tests/system-test/0-others/telemetry.py @@ -173,7 +173,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/udfTest.py b/tests/system-test/0-others/udfTest.py index c4c40348b8..a58e22ba1c 100644 --- a/tests/system-test/0-others/udfTest.py +++ b/tests/system-test/0-others/udfTest.py @@ -13,7 +13,7 @@ import subprocess class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_cfg1.py b/tests/system-test/0-others/udf_cfg1.py index e6ab57b488..9b1874d576 100644 --- a/tests/system-test/0-others/udf_cfg1.py +++ b/tests/system-test/0-others/udf_cfg1.py @@ -15,7 +15,7 @@ class TDTestCase: updatecfgDict = {'debugFlag': 143, "cDebugFlag": 143, "uDebugFlag": 143, "rpcDebugFlag": 143, "tmrDebugFlag": 143, "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "fnDebugFlag": 143 ,"udf":0} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_cfg2.py b/tests/system-test/0-others/udf_cfg2.py index 3f8ba37491..67848a9430 100644 --- a/tests/system-test/0-others/udf_cfg2.py +++ b/tests/system-test/0-others/udf_cfg2.py @@ -15,7 +15,7 @@ class TDTestCase: updatecfgDict = {'debugFlag': 143, "cDebugFlag": 143, "uDebugFlag": 143, "rpcDebugFlag": 143, "tmrDebugFlag": 143, "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "fnDebugFlag": 143 ,"udf":1} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_create.py b/tests/system-test/0-others/udf_create.py index 788202eb1b..736943cc56 100644 --- a/tests/system-test/0-others/udf_create.py +++ b/tests/system-test/0-others/udf_create.py @@ -15,7 +15,7 @@ import threading class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_restart_taosd.py b/tests/system-test/0-others/udf_restart_taosd.py index b860a0dfab..02c59c21e1 100644 --- a/tests/system-test/0-others/udf_restart_taosd.py +++ b/tests/system-test/0-others/udf_restart_taosd.py @@ -12,7 +12,7 @@ import subprocess class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index a20b7b17bc..c6a1a7eac2 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -154,7 +154,7 @@ class User: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/1-insert/alter_database.py b/tests/system-test/1-insert/alter_database.py index d3a55ee0a6..6d9e04ec42 100644 --- a/tests/system-test/1-insert/alter_database.py +++ b/tests/system-test/1-insert/alter_database.py @@ -11,7 +11,7 @@ from util.cases import * from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),logSql) self.buffer_boundary = [3,4097,8193,12289,16384] diff --git a/tests/system-test/1-insert/alter_stable.py b/tests/system-test/1-insert/alter_stable.py index b66cbb89c0..77ff6ae0f8 100644 --- a/tests/system-test/1-insert/alter_stable.py +++ b/tests/system-test/1-insert/alter_stable.py @@ -20,7 +20,7 @@ from util.sqlset import * from util import constant from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/1-insert/alter_table.py b/tests/system-test/1-insert/alter_table.py index 5fbfff9909..aed4089cfa 100644 --- a/tests/system-test/1-insert/alter_table.py +++ b/tests/system-test/1-insert/alter_table.py @@ -21,7 +21,7 @@ from util.common import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/1-insert/block_wise.py b/tests/system-test/1-insert/block_wise.py index 083eff34e6..53ffc0bfd6 100644 --- a/tests/system-test/1-insert/block_wise.py +++ b/tests/system-test/1-insert/block_wise.py @@ -142,7 +142,7 @@ class BSMAschema: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.precision = "ms" diff --git a/tests/system-test/1-insert/create_retentions.py b/tests/system-test/1-insert/create_retentions.py index 54abcec391..ec8f54fffa 100644 --- a/tests/system-test/1-insert/create_retentions.py +++ b/tests/system-test/1-insert/create_retentions.py @@ -44,7 +44,7 @@ NTBNAME = "nt1" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/1-insert/database_pre_suf.py b/tests/system-test/1-insert/database_pre_suf.py index fc4bf7f5de..a4aa8247ab 100755 --- a/tests/system-test/1-insert/database_pre_suf.py +++ b/tests/system-test/1-insert/database_pre_suf.py @@ -28,7 +28,7 @@ class TDTestCase: "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"fnDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/1-insert/db_tb_name_check.py b/tests/system-test/1-insert/db_tb_name_check.py index 5017fde68a..fd0bd43b01 100644 --- a/tests/system-test/1-insert/db_tb_name_check.py +++ b/tests/system-test/1-insert/db_tb_name_check.py @@ -31,7 +31,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.special_name = ['!','@','#','$','%','^','&','*','(',')','[',']','{','}',\ diff --git a/tests/system-test/1-insert/delete_data.py b/tests/system-test/1-insert/delete_data.py index f620a4b18a..d935a08133 100644 --- a/tests/system-test/1-insert/delete_data.py +++ b/tests/system-test/1-insert/delete_data.py @@ -23,7 +23,7 @@ from util.common import * from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/1-insert/influxdb_line_taosc_insert.py b/tests/system-test/1-insert/influxdb_line_taosc_insert.py index cae4294bc9..82db318c2b 100644 --- a/tests/system-test/1-insert/influxdb_line_taosc_insert.py +++ b/tests/system-test/1-insert/influxdb_line_taosc_insert.py @@ -29,7 +29,7 @@ if platform.system().lower() == 'windows': sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) self._conn = conn diff --git a/tests/system-test/1-insert/insertWithMoreVgroup.py b/tests/system-test/1-insert/insertWithMoreVgroup.py index b80a5f9a4a..9d033ff6e5 100644 --- a/tests/system-test/1-insert/insertWithMoreVgroup.py +++ b/tests/system-test/1-insert/insertWithMoreVgroup.py @@ -62,7 +62,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/insert_drop.py b/tests/system-test/1-insert/insert_drop.py index 3e30e94a6b..d063501484 100644 --- a/tests/system-test/1-insert/insert_drop.py +++ b/tests/system-test/1-insert/insert_drop.py @@ -8,7 +8,7 @@ import threading class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/1-insert/keep_expired.py b/tests/system-test/1-insert/keep_expired.py index 09db1e45ba..1a9cd1a158 100644 --- a/tests/system-test/1-insert/keep_expired.py +++ b/tests/system-test/1-insert/keep_expired.py @@ -7,7 +7,7 @@ import time class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.dbname = "test" diff --git a/tests/system-test/1-insert/mutil_stage.py b/tests/system-test/1-insert/mutil_stage.py index 63317e8036..08f0ba8313 100644 --- a/tests/system-test/1-insert/mutil_stage.py +++ b/tests/system-test/1-insert/mutil_stage.py @@ -57,7 +57,7 @@ DATA_PRE2 = f"data2" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.taos_cfg_path = tdDnodes.dnodes[0].cfgPath diff --git a/tests/system-test/1-insert/mutipythonnodebugtaosd.py b/tests/system-test/1-insert/mutipythonnodebugtaosd.py index 8aea53cd92..1f568fdea1 100644 --- a/tests/system-test/1-insert/mutipythonnodebugtaosd.py +++ b/tests/system-test/1-insert/mutipythonnodebugtaosd.py @@ -60,7 +60,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) # tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/opentsdb_json_taosc_insert.py b/tests/system-test/1-insert/opentsdb_json_taosc_insert.py index 3b01784000..9be51eb445 100644 --- a/tests/system-test/1-insert/opentsdb_json_taosc_insert.py +++ b/tests/system-test/1-insert/opentsdb_json_taosc_insert.py @@ -24,7 +24,7 @@ import threading import json class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self._conn = conn diff --git a/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py b/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py index 209cfb724e..ab11691cf8 100644 --- a/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py +++ b/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py @@ -28,7 +28,7 @@ if platform.system().lower() == 'windows': sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) self._conn = conn diff --git a/tests/system-test/1-insert/table_comment.py b/tests/system-test/1-insert/table_comment.py index a0ae364fcd..2a8aa9b26a 100644 --- a/tests/system-test/1-insert/table_comment.py +++ b/tests/system-test/1-insert/table_comment.py @@ -20,7 +20,7 @@ from util.sql import * from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # prepare data diff --git a/tests/system-test/1-insert/table_param_ttl.py b/tests/system-test/1-insert/table_param_ttl.py index 21c591b07e..a184c51178 100644 --- a/tests/system-test/1-insert/table_param_ttl.py +++ b/tests/system-test/1-insert/table_param_ttl.py @@ -18,7 +18,7 @@ from util.common import * class TDTestCase: updatecfgDict = {'ttlUnit':5,'ttlPushInterval':3} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ntbname = 'ntb' diff --git a/tests/system-test/1-insert/tb_100w_data_order.py b/tests/system-test/1-insert/tb_100w_data_order.py index d489ba21bc..85fe559cc2 100644 --- a/tests/system-test/1-insert/tb_100w_data_order.py +++ b/tests/system-test/1-insert/tb_100w_data_order.py @@ -5,7 +5,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ts = 1537146000000 diff --git a/tests/system-test/1-insert/test_stmt_muti_insert_query.py b/tests/system-test/1-insert/test_stmt_muti_insert_query.py index 7ddc0e60bd..89beb30dc9 100644 --- a/tests/system-test/1-insert/test_stmt_muti_insert_query.py +++ b/tests/system-test/1-insert/test_stmt_muti_insert_query.py @@ -57,7 +57,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/test_stmt_set_tbname_tag.py b/tests/system-test/1-insert/test_stmt_set_tbname_tag.py index 321dc88cd7..535a65ffed 100644 --- a/tests/system-test/1-insert/test_stmt_set_tbname_tag.py +++ b/tests/system-test/1-insert/test_stmt_set_tbname_tag.py @@ -57,7 +57,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/time_range_wise.py b/tests/system-test/1-insert/time_range_wise.py index 3188583181..1499c178d4 100644 --- a/tests/system-test/1-insert/time_range_wise.py +++ b/tests/system-test/1-insert/time_range_wise.py @@ -134,7 +134,7 @@ class SMAschema: class TDTestCase: updatecfgDict = {"querySmaOptimize": 1} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.precision = "ms" diff --git a/tests/system-test/1-insert/update_data.py b/tests/system-test/1-insert/update_data.py index 417adc39ac..e11b45190b 100644 --- a/tests/system-test/1-insert/update_data.py +++ b/tests/system-test/1-insert/update_data.py @@ -21,7 +21,7 @@ from util.sql import * from util.common import * from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),logSql) self.setsql = TDSetSql() diff --git a/tests/system-test/1-insert/update_data_muti_rows.py b/tests/system-test/1-insert/update_data_muti_rows.py index 623dc497ea..af78ba5d19 100644 --- a/tests/system-test/1-insert/update_data_muti_rows.py +++ b/tests/system-test/1-insert/update_data_muti_rows.py @@ -23,7 +23,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/2-query/Now.py b/tests/system-test/2-query/Now.py index 35291856f2..0e514cf43b 100644 --- a/tests/system-test/2-query/Now.py +++ b/tests/system-test/2-query/Now.py @@ -7,7 +7,7 @@ from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/Timediff.py b/tests/system-test/2-query/Timediff.py index 1f73215dd5..c126ce926a 100644 --- a/tests/system-test/2-query/Timediff.py +++ b/tests/system-test/2-query/Timediff.py @@ -4,7 +4,7 @@ from util.cases import * from util.gettime import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.get_time = GetTime() diff --git a/tests/system-test/2-query/To_iso8601.py b/tests/system-test/2-query/To_iso8601.py index ccc26e9b1b..bf4fe404aa 100644 --- a/tests/system-test/2-query/To_iso8601.py +++ b/tests/system-test/2-query/To_iso8601.py @@ -10,7 +10,7 @@ import os class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.rowNum = 10 diff --git a/tests/system-test/2-query/To_unixtimestamp.py b/tests/system-test/2-query/To_unixtimestamp.py index 64f7b18e41..df99b08862 100644 --- a/tests/system-test/2-query/To_unixtimestamp.py +++ b/tests/system-test/2-query/To_unixtimestamp.py @@ -10,7 +10,7 @@ from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/Today.py b/tests/system-test/2-query/Today.py index 0124c5bbac..0f89a378be 100644 --- a/tests/system-test/2-query/Today.py +++ b/tests/system-test/2-query/Today.py @@ -10,7 +10,7 @@ import pandas as pd class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.today_date = datetime.datetime.strptime(datetime.datetime.now().strftime("%Y-%m-%d"), "%Y-%m-%d") diff --git a/tests/system-test/2-query/abs.py b/tests/system-test/2-query/abs.py index c9fc025b97..6bc9457264 100644 --- a/tests/system-test/2-query/abs.py +++ b/tests/system-test/2-query/abs.py @@ -14,7 +14,7 @@ class TDTestCase: # "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, # "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "udfDebugFlag": 143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/and_or_for_byte.py b/tests/system-test/2-query/and_or_for_byte.py index 7d156da379..682d729f0e 100644 --- a/tests/system-test/2-query/and_or_for_byte.py +++ b/tests/system-test/2-query/and_or_for_byte.py @@ -14,7 +14,7 @@ class TDTestCase: # "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, # "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "udfDebugFlag": 143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/apercentile.py b/tests/system-test/2-query/apercentile.py index 128a03937a..8997238d7b 100644 --- a/tests/system-test/2-query/apercentile.py +++ b/tests/system-test/2-query/apercentile.py @@ -18,7 +18,7 @@ import numpy as np from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),False) self.rowNum = 10 diff --git a/tests/system-test/2-query/avg.py b/tests/system-test/2-query/avg.py index 5ba0a91a7e..e7086744f8 100644 --- a/tests/system-test/2-query/avg.py +++ b/tests/system-test/2-query/avg.py @@ -10,7 +10,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/between.py b/tests/system-test/2-query/between.py index a9dde5617d..dd7dda668b 100644 --- a/tests/system-test/2-query/between.py +++ b/tests/system-test/2-query/between.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/bottom.py b/tests/system-test/2-query/bottom.py index e75fde3ed4..4c352b619f 100644 --- a/tests/system-test/2-query/bottom.py +++ b/tests/system-test/2-query/bottom.py @@ -21,7 +21,7 @@ from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/2-query/cast.py b/tests/system-test/2-query/cast.py index 4045b6ad88..46a1e42158 100644 --- a/tests/system-test/2-query/cast.py +++ b/tests/system-test/2-query/cast.py @@ -12,7 +12,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.dbname = "db" diff --git a/tests/system-test/2-query/ceil.py b/tests/system-test/2-query/ceil.py index 6777b449f9..221b571e8e 100644 --- a/tests/system-test/2-query/ceil.py +++ b/tests/system-test/2-query/ceil.py @@ -13,7 +13,7 @@ class TDTestCase: # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/char_length.py b/tests/system-test/2-query/char_length.py index c0883e665e..e8546ca72e 100644 --- a/tests/system-test/2-query/char_length.py +++ b/tests/system-test/2-query/char_length.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [TS_COL] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/check_tsdb.py b/tests/system-test/2-query/check_tsdb.py index f504a55dcd..0cbbc60171 100644 --- a/tests/system-test/2-query/check_tsdb.py +++ b/tests/system-test/2-query/check_tsdb.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/concat.py b/tests/system-test/2-query/concat.py index 23b964012a..dc05a17185 100644 --- a/tests/system-test/2-query/concat.py +++ b/tests/system-test/2-query/concat.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/concat2.py b/tests/system-test/2-query/concat2.py index 5442220076..1316a3a228 100644 --- a/tests/system-test/2-query/concat2.py +++ b/tests/system-test/2-query/concat2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/concat_ws.py b/tests/system-test/2-query/concat_ws.py index ad784d92ec..8443d41818 100644 --- a/tests/system-test/2-query/concat_ws.py +++ b/tests/system-test/2-query/concat_ws.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/concat_ws2.py b/tests/system-test/2-query/concat_ws2.py index caaae6cecb..38b93660e1 100644 --- a/tests/system-test/2-query/concat_ws2.py +++ b/tests/system-test/2-query/concat_ws2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/count.py b/tests/system-test/2-query/count.py index 4d2a1cf07c..6362974d0b 100644 --- a/tests/system-test/2-query/count.py +++ b/tests/system-test/2-query/count.py @@ -3,7 +3,7 @@ from util.sql import * from util.cases import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),False) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/count_partition.py b/tests/system-test/2-query/count_partition.py index 90a6d9225b..4ab51c4efe 100644 --- a/tests/system-test/2-query/count_partition.py +++ b/tests/system-test/2-query/count_partition.py @@ -4,7 +4,7 @@ from util.sql import * from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/csum.py b/tests/system-test/2-query/csum.py index 83aaca8f12..fb828b85df 100644 --- a/tests/system-test/2-query/csum.py +++ b/tests/system-test/2-query/csum.py @@ -26,7 +26,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/db.py b/tests/system-test/2-query/db.py index f2d85ebf65..aea16dd162 100644 --- a/tests/system-test/2-query/db.py +++ b/tests/system-test/2-query/db.py @@ -11,7 +11,7 @@ import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/diff.py b/tests/system-test/2-query/diff.py index ceef3f93eb..6ec17ec49a 100644 --- a/tests/system-test/2-query/diff.py +++ b/tests/system-test/2-query/diff.py @@ -6,7 +6,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/distinct.py b/tests/system-test/2-query/distinct.py index 7214caec96..c7c6e1c9b0 100644 --- a/tests/system-test/2-query/distinct.py +++ b/tests/system-test/2-query/distinct.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/distribute_agg_apercentile.py b/tests/system-test/2-query/distribute_agg_apercentile.py index 9b8ec2ece8..d2364df65a 100644 --- a/tests/system-test/2-query/distribute_agg_apercentile.py +++ b/tests/system-test/2-query/distribute_agg_apercentile.py @@ -8,7 +8,7 @@ import random class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_avg.py b/tests/system-test/2-query/distribute_agg_avg.py index c54b89a2ba..4b5d3d8c5a 100644 --- a/tests/system-test/2-query/distribute_agg_avg.py +++ b/tests/system-test/2-query/distribute_agg_avg.py @@ -9,7 +9,7 @@ import platform class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_count.py b/tests/system-test/2-query/distribute_agg_count.py index f61b6d7c2e..e6cf718c05 100644 --- a/tests/system-test/2-query/distribute_agg_count.py +++ b/tests/system-test/2-query/distribute_agg_count.py @@ -8,7 +8,7 @@ import random class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_max.py b/tests/system-test/2-query/distribute_agg_max.py index 51b0ad4f94..92188bd765 100644 --- a/tests/system-test/2-query/distribute_agg_max.py +++ b/tests/system-test/2-query/distribute_agg_max.py @@ -9,7 +9,7 @@ class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_min.py b/tests/system-test/2-query/distribute_agg_min.py index 543142ddfa..afc42755b3 100644 --- a/tests/system-test/2-query/distribute_agg_min.py +++ b/tests/system-test/2-query/distribute_agg_min.py @@ -9,7 +9,7 @@ class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_spread.py b/tests/system-test/2-query/distribute_agg_spread.py index 222bd7315e..ab073c76a2 100644 --- a/tests/system-test/2-query/distribute_agg_spread.py +++ b/tests/system-test/2-query/distribute_agg_spread.py @@ -8,7 +8,7 @@ import random class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to execute {__file__}") tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_stddev.py b/tests/system-test/2-query/distribute_agg_stddev.py index 6b77fc7368..ae9479dcdd 100644 --- a/tests/system-test/2-query/distribute_agg_stddev.py +++ b/tests/system-test/2-query/distribute_agg_stddev.py @@ -9,7 +9,7 @@ import math class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_sum.py b/tests/system-test/2-query/distribute_agg_sum.py index 9be4602fd9..59804b7dc5 100644 --- a/tests/system-test/2-query/distribute_agg_sum.py +++ b/tests/system-test/2-query/distribute_agg_sum.py @@ -9,7 +9,7 @@ import platform class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/elapsed.py b/tests/system-test/2-query/elapsed.py index 333c60286e..03de3c35ed 100644 --- a/tests/system-test/2-query/elapsed.py +++ b/tests/system-test/2-query/elapsed.py @@ -20,7 +20,7 @@ from util.sql import * from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/explain.py b/tests/system-test/2-query/explain.py index 21e16fab43..1126e23f06 100644 --- a/tests/system-test/2-query/explain.py +++ b/tests/system-test/2-query/explain.py @@ -30,7 +30,7 @@ ALL_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, BOOL_C DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/first.py b/tests/system-test/2-query/first.py index 1aa51f8bb7..9523527076 100644 --- a/tests/system-test/2-query/first.py +++ b/tests/system-test/2-query/first.py @@ -23,7 +23,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/floor.py b/tests/system-test/2-query/floor.py index 793a56c1e5..65974ff2e9 100644 --- a/tests/system-test/2-query/floor.py +++ b/tests/system-test/2-query/floor.py @@ -12,7 +12,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/function_diff.py b/tests/system-test/2-query/function_diff.py index 946453bb23..7f11b12e89 100644 --- a/tests/system-test/2-query/function_diff.py +++ b/tests/system-test/2-query/function_diff.py @@ -26,7 +26,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/function_null.py b/tests/system-test/2-query/function_null.py index 93b46d2da1..3a74ca268f 100644 --- a/tests/system-test/2-query/function_null.py +++ b/tests/system-test/2-query/function_null.py @@ -11,7 +11,7 @@ import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/function_stateduration.py b/tests/system-test/2-query/function_stateduration.py index fec09e786b..8f25595713 100644 --- a/tests/system-test/2-query/function_stateduration.py +++ b/tests/system-test/2-query/function_stateduration.py @@ -5,7 +5,7 @@ from util.cases import * DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/histogram.py b/tests/system-test/2-query/histogram.py index 1dc5bdfa21..2a63fd6d8e 100644 --- a/tests/system-test/2-query/histogram.py +++ b/tests/system-test/2-query/histogram.py @@ -142,7 +142,7 @@ class Hsgschema: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) @@ -304,7 +304,9 @@ class TDTestCase: err_sqls.append( Hsgschema( col=INT_COL, bin_type="USER_INPUT", user_input="[0,3,6,9,'a']", normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="USER_INPUT", user_input="['a']", normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin=['{"start": 1, "width": 3, "count": 10, "infinity": false}'], normalized=1 ) ) - err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='[{"start": 1, "width": 3, "count": 10, "infinity": false}]', normalized=1 ) ) + # err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "width": 2, "count": 10, "infinity": false}', normalized=1 , "123" ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "width": float("inf"), "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": float("inf"), "width": 10, "count": 10, "infinity": false}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"begin": 1, "width": 3, "count": 10, "infinity": false}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "length": 3, "count": 10, "infinity": false}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "width": 3, "num": 10, "infinity": false}', normalized=1 ) ) @@ -322,6 +324,11 @@ class TDTestCase: err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin=['{"start": 1, "factor": 4, "count": 4, "infinity": true}'], normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='[{"start": 1, "factor": 4, "count": 4, "infinity": true}]', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"begin": 1, "factor": 4, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": -10, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 0, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 0, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": -10, "width": NULL, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "step": 4, "count": 4, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 4, "num": 4, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 4, "count": 4, "witgnull": true}', normalized=1 ) ) @@ -335,6 +342,13 @@ class TDTestCase: err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": -10, "count": 4, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 0, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": -10, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10001, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": "123", "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": float("inf"), "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": float("inf"), "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": float("inf"), "factor": 10, "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": float("-inf"), "factor": 10, "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10, "infinity": "true"}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10, "infinity": null}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10, "infinity": false}', where_clause=f"count({INT_COL}) >= 0 ") ) @@ -404,6 +418,21 @@ class TDTestCase: tdSql.checkData(0, 0, '{"lower_bin":0, "upper_bin":3, "count":3}') tdSql.checkData(1, 0, '{"lower_bin":3, "upper_bin":6, "count":3}') tdSql.checkData(2, 0, '{"lower_bin":6, "upper_bin":9, "count":3}') + + #error sql + # tdSql.error(f"SELECT HISTOGRAM(c_int, 'linear_bin', '{"start": -200, "width": 100, "count": 20, "infinity": false}', 0 ,1 ) from {dbname}.nt1 where c_int < 10") + + # tdSql.error(f"SELECT HISTOGRAM(c_int, 'linear_bin', '{"start": -200, "width": 100, "count": -10, "infinity": false}', 0 ) from {dbname}.nt1 where c_int < 10") + + # tdSql.error(f"SELECT HISTOGRAM(c_int, 'linear_bin', '{"start": -200, "width": 100, "count": 1001, "infinity": false}', 0 ) from {dbname}.nt1 where c_int < 10") + + tdSql.error(f"SELECT HISTOGRAM(c_int, 'log_bin', '[0,3,6,9]', 0 ,1 ) from {dbname}.nt1 where c_int < 10") + + tdSql.error(f"SELECT HISTOGRAM(c_int, 'USER_INPUT', '[0,3,6,9]', 0 ,1 ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM(c_int, 'USER_INPUT', '[0,3,6,9]' ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM('123', 'USER_INPUT', '[0,3,6,9]', 0 ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM('123', 123 ,123 ,123 ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM(123, '123' ,'123' ,'123' ) from {dbname}.nt1 where c_int < 10") def all_test(self, dbname=DBNAME): self.test_histogram(dbname) diff --git a/tests/system-test/2-query/hyperloglog.py b/tests/system-test/2-query/hyperloglog.py index 68f7ebdf2e..eff687cba7 100644 --- a/tests/system-test/2-query/hyperloglog.py +++ b/tests/system-test/2-query/hyperloglog.py @@ -31,7 +31,7 @@ class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/interp.py b/tests/system-test/2-query/interp.py index 3a05583418..afc8c06bde 100644 --- a/tests/system-test/2-query/interp.py +++ b/tests/system-test/2-query/interp.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/2-query/irate.py b/tests/system-test/2-query/irate.py index 408f4b3749..7b3ec10a8d 100644 --- a/tests/system-test/2-query/irate.py +++ b/tests/system-test/2-query/irate.py @@ -11,7 +11,7 @@ import random ,math class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/join.py b/tests/system-test/2-query/join.py index 9d30e1946a..04b4fa89a2 100644 --- a/tests/system-test/2-query/join.py +++ b/tests/system-test/2-query/join.py @@ -63,7 +63,7 @@ class DataSet: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/join2.py b/tests/system-test/2-query/join2.py index 5c8fe0f0f9..79cc62e4bc 100644 --- a/tests/system-test/2-query/join2.py +++ b/tests/system-test/2-query/join2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/json_tag.py b/tests/system-test/2-query/json_tag.py index d9715579ae..c6f1e5076d 100644 --- a/tests/system-test/2-query/json_tag.py +++ b/tests/system-test/2-query/json_tag.py @@ -13,7 +13,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/json_tag_large_tables.py b/tests/system-test/2-query/json_tag_large_tables.py index 9164c108f9..06170e0adf 100644 --- a/tests/system-test/2-query/json_tag_large_tables.py +++ b/tests/system-test/2-query/json_tag_large_tables.py @@ -30,7 +30,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): self.testcasePath = os.path.split(__file__)[0] self.testcaseFilename = os.path.split(__file__)[-1] # os.system("rm -rf %s/%s.sql" % (self.testcasePath,self.testcaseFilename)) diff --git a/tests/system-test/2-query/last.py b/tests/system-test/2-query/last.py index 3bca9f1671..0d721c8360 100644 --- a/tests/system-test/2-query/last.py +++ b/tests/system-test/2-query/last.py @@ -8,7 +8,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/last_row.py b/tests/system-test/2-query/last_row.py index 6286852641..333c1516b3 100644 --- a/tests/system-test/2-query/last_row.py +++ b/tests/system-test/2-query/last_row.py @@ -11,7 +11,7 @@ import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), True) self.tb_nums = 10 diff --git a/tests/system-test/2-query/leastsquares.py b/tests/system-test/2-query/leastsquares.py index fe7188a545..8870e416f8 100644 --- a/tests/system-test/2-query/leastsquares.py +++ b/tests/system-test/2-query/leastsquares.py @@ -29,7 +29,7 @@ ALL_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, BOOL_C DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/length.py b/tests/system-test/2-query/length.py index 1761572245..44c951dd4a 100644 --- a/tests/system-test/2-query/length.py +++ b/tests/system-test/2-query/length.py @@ -23,7 +23,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/log.py b/tests/system-test/2-query/log.py index 358d2b9551..791065924c 100644 --- a/tests/system-test/2-query/log.py +++ b/tests/system-test/2-query/log.py @@ -11,7 +11,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/lower.py b/tests/system-test/2-query/lower.py index 0e33e3834e..f8ac1ab217 100644 --- a/tests/system-test/2-query/lower.py +++ b/tests/system-test/2-query/lower.py @@ -22,7 +22,7 @@ TS_TYPE_COL = [TS_COL] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/ltrim.py b/tests/system-test/2-query/ltrim.py index 330f688990..ba769ba350 100644 --- a/tests/system-test/2-query/ltrim.py +++ b/tests/system-test/2-query/ltrim.py @@ -27,7 +27,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/mavg.py b/tests/system-test/2-query/mavg.py index b52217af9a..7f545f2048 100644 --- a/tests/system-test/2-query/mavg.py +++ b/tests/system-test/2-query/mavg.py @@ -27,7 +27,7 @@ from util.dnodes import * dbname = 'db' class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/max.py b/tests/system-test/2-query/max.py index 5cc9a2d9e8..80e7fa7f04 100644 --- a/tests/system-test/2-query/max.py +++ b/tests/system-test/2-query/max.py @@ -6,7 +6,7 @@ import numpy as np class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/max_partition.py b/tests/system-test/2-query/max_partition.py index 08bb7675ad..f50b9fb2bb 100644 --- a/tests/system-test/2-query/max_partition.py +++ b/tests/system-test/2-query/max_partition.py @@ -4,7 +4,7 @@ from util.sql import * from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/min.py b/tests/system-test/2-query/min.py index d97c4340f4..8849b14a33 100644 --- a/tests/system-test/2-query/min.py +++ b/tests/system-test/2-query/min.py @@ -6,7 +6,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/nestedQuery.py b/tests/system-test/2-query/nestedQuery.py index c6567a8e3b..4fbd840efe 100755 --- a/tests/system-test/2-query/nestedQuery.py +++ b/tests/system-test/2-query/nestedQuery.py @@ -28,7 +28,7 @@ class TDTestCase: "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"fnDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/percentile.py b/tests/system-test/2-query/percentile.py index 3b027ed6a0..58660eec6a 100644 --- a/tests/system-test/2-query/percentile.py +++ b/tests/system-test/2-query/percentile.py @@ -21,7 +21,7 @@ from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/qnodeCluster.py b/tests/system-test/2-query/qnodeCluster.py index 9e49bff938..6f3856146d 100644 --- a/tests/system-test/2-query/qnodeCluster.py +++ b/tests/system-test/2-query/qnodeCluster.py @@ -26,7 +26,7 @@ class TDTestCase: updatecfgDict = {'keepColumnName': 1} updatecfgDict["clientCfg"] = clientCfgDict - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/query_cols_tags_and_or.py b/tests/system-test/2-query/query_cols_tags_and_or.py index af3fbb83c0..9fc016cb40 100644 --- a/tests/system-test/2-query/query_cols_tags_and_or.py +++ b/tests/system-test/2-query/query_cols_tags_and_or.py @@ -16,7 +16,7 @@ from util.sql import tdSql from util.common import tdCom import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): ## add for TD-6672 tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/round.py b/tests/system-test/2-query/round.py index 1d69d3c9af..8f969a71d7 100644 --- a/tests/system-test/2-query/round.py +++ b/tests/system-test/2-query/round.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/rtrim.py b/tests/system-test/2-query/rtrim.py index 80307e8534..e4835fbd8e 100644 --- a/tests/system-test/2-query/rtrim.py +++ b/tests/system-test/2-query/rtrim.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/sample.py b/tests/system-test/2-query/sample.py index 7f1d7ab8c0..d1890d8623 100644 --- a/tests/system-test/2-query/sample.py +++ b/tests/system-test/2-query/sample.py @@ -24,7 +24,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ts = 1537146000000 diff --git a/tests/system-test/2-query/smaTest.py b/tests/system-test/2-query/smaTest.py index 0217b6c28c..66a89d8701 100644 --- a/tests/system-test/2-query/smaTest.py +++ b/tests/system-test/2-query/smaTest.py @@ -31,7 +31,7 @@ class TDTestCase: # updatecfgDict = {'fqdn': 135} # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) tdSql.prepare() diff --git a/tests/system-test/2-query/sml.py b/tests/system-test/2-query/sml.py index 4dae2ad6c0..64fe92438c 100644 --- a/tests/system-test/2-query/sml.py +++ b/tests/system-test/2-query/sml.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/2-query/spread.py b/tests/system-test/2-query/spread.py index ffe86ff363..79881d7293 100644 --- a/tests/system-test/2-query/spread.py +++ b/tests/system-test/2-query/spread.py @@ -30,7 +30,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/stablity.py b/tests/system-test/2-query/stablity.py index b434335970..3c8d18e9e6 100755 --- a/tests/system-test/2-query/stablity.py +++ b/tests/system-test/2-query/stablity.py @@ -28,7 +28,7 @@ class TDTestCase: "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"fnDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/statecount.py b/tests/system-test/2-query/statecount.py index c73c955de4..1d9a04cc73 100644 --- a/tests/system-test/2-query/statecount.py +++ b/tests/system-test/2-query/statecount.py @@ -12,7 +12,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.ts = 1420041600000 # 2015-01-01 00:00:00 this is begin time for first record diff --git a/tests/system-test/2-query/stateduration.py b/tests/system-test/2-query/stateduration.py index b6ddff4017..009ec37764 100644 --- a/tests/system-test/2-query/stateduration.py +++ b/tests/system-test/2-query/stateduration.py @@ -17,7 +17,7 @@ from util.sql import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ts = 1537146000000 diff --git a/tests/system-test/2-query/stddev.py b/tests/system-test/2-query/stddev.py index 837353dfc9..d044fb0dd7 100644 --- a/tests/system-test/2-query/stddev.py +++ b/tests/system-test/2-query/stddev.py @@ -20,7 +20,7 @@ from util.sql import * from util.common import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/2-query/substr.py b/tests/system-test/2-query/substr.py index ea55c5e44e..9b317aeab6 100644 --- a/tests/system-test/2-query/substr.py +++ b/tests/system-test/2-query/substr.py @@ -29,7 +29,7 @@ LENS = 6 class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(),False) diff --git a/tests/system-test/2-query/sum.py b/tests/system-test/2-query/sum.py index dbc79e25f5..ec1f60a720 100644 --- a/tests/system-test/2-query/sum.py +++ b/tests/system-test/2-query/sum.py @@ -24,7 +24,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/tail.py b/tests/system-test/2-query/tail.py index 687023f57e..3d5ecfaa9a 100644 --- a/tests/system-test/2-query/tail.py +++ b/tests/system-test/2-query/tail.py @@ -11,7 +11,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/timetruncate.py b/tests/system-test/2-query/timetruncate.py index 4cc6b27d64..917b98daa9 100644 --- a/tests/system-test/2-query/timetruncate.py +++ b/tests/system-test/2-query/timetruncate.py @@ -7,7 +7,7 @@ import time from datetime import datetime from util.gettime import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) print(conn) diff --git a/tests/system-test/2-query/timezone.py b/tests/system-test/2-query/timezone.py index 9a4953909c..0a2da114de 100644 --- a/tests/system-test/2-query/timezone.py +++ b/tests/system-test/2-query/timezone.py @@ -11,7 +11,7 @@ if platform.system().lower() == 'windows': class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/top.py b/tests/system-test/2-query/top.py index 7fd143f683..1cba18c2e2 100644 --- a/tests/system-test/2-query/top.py +++ b/tests/system-test/2-query/top.py @@ -19,7 +19,7 @@ from util.sql import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/tsbsQuery.py b/tests/system-test/2-query/tsbsQuery.py index 04a80a74ad..c4604799a1 100644 --- a/tests/system-test/2-query/tsbsQuery.py +++ b/tests/system-test/2-query/tsbsQuery.py @@ -20,7 +20,7 @@ class TDTestCase: updatecfgDict = {'keepColumnName': 1} updatecfgDict["clientCfg"] = clientCfgDict - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/ttl_comment.py b/tests/system-test/2-query/ttl_comment.py index 187df2e2d3..fabd641da7 100644 --- a/tests/system-test/2-query/ttl_comment.py +++ b/tests/system-test/2-query/ttl_comment.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/twa.py b/tests/system-test/2-query/twa.py index a499c17efb..1fd3b8fdda 100644 --- a/tests/system-test/2-query/twa.py +++ b/tests/system-test/2-query/twa.py @@ -9,7 +9,7 @@ import math class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/union.py b/tests/system-test/2-query/union.py index 4040bb71cb..737817f262 100644 --- a/tests/system-test/2-query/union.py +++ b/tests/system-test/2-query/union.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union1.py b/tests/system-test/2-query/union1.py index ea6940246e..1ca25e7844 100644 --- a/tests/system-test/2-query/union1.py +++ b/tests/system-test/2-query/union1.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union2.py b/tests/system-test/2-query/union2.py index 2d5e2f70bf..c063b5c383 100644 --- a/tests/system-test/2-query/union2.py +++ b/tests/system-test/2-query/union2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union3.py b/tests/system-test/2-query/union3.py index 30a15e7624..3322f30359 100644 --- a/tests/system-test/2-query/union3.py +++ b/tests/system-test/2-query/union3.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union4.py b/tests/system-test/2-query/union4.py index 4b2fba4272..2da83d8190 100644 --- a/tests/system-test/2-query/union4.py +++ b/tests/system-test/2-query/union4.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/unique.py b/tests/system-test/2-query/unique.py index ec77cbbcdc..cf23328fa3 100644 --- a/tests/system-test/2-query/unique.py +++ b/tests/system-test/2-query/unique.py @@ -12,7 +12,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/upper.py b/tests/system-test/2-query/upper.py index f15a6f3ba7..cc5347774c 100644 --- a/tests/system-test/2-query/upper.py +++ b/tests/system-test/2-query/upper.py @@ -22,7 +22,7 @@ TS_TYPE_COL = [TS_COL] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/varchar.py b/tests/system-test/2-query/varchar.py index 17c3ea6333..3d5f443b3c 100644 --- a/tests/system-test/2-query/varchar.py +++ b/tests/system-test/2-query/varchar.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/5-taos-tools/TD-12478.py b/tests/system-test/5-taos-tools/TD-12478.py index 69849d3c7a..576e59f339 100644 --- a/tests/system-test/5-taos-tools/TD-12478.py +++ b/tests/system-test/5-taos-tools/TD-12478.py @@ -36,7 +36,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py b/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py index 8c62f713b8..8cb58b8d70 100644 --- a/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py +++ b/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py @@ -28,7 +28,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py index 58ed8cde63..575e2ef712 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py @@ -25,13 +25,12 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self,conn ,logSql,replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) self.host = socket.gethostname() - - + self.replicaVar = replicaVar def getBuildPath(self): selfPath = os.path.dirname(os.path.realpath(__file__)) @@ -88,7 +87,7 @@ class TDTestCase: vnodeNumbers = int(dnodeNumbers-mnodeNums) allDbNumbers=(paraDict['dbNumbers']*restartNumbers) allStbNumbers=(paraDict['stbNumbers']*restartNumbers) - + paraDict['replica']=int(self.replicaVar) tdLog.info("first check dnode and mnode") tdSql.query("select * from information_schema.ins_dnodes;") tdSql.checkData(0,1,'%s:6030'%self.host) @@ -172,7 +171,7 @@ class TDTestCase: def run(self): # print(self.master_dnode.cfgDict) - self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=5,stopRole='mnode') + self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=1,stopRole='mnode') def stop(self): tdSql.close() diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py index 3dc3e7ec65..d24c749515 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self,conn ,logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) @@ -170,7 +170,7 @@ class TDTestCase: def run(self): # print(self.master_dnode.cfgDict) - self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=3,stopRole='mnode') + self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=3,stopRole='mnode') def stop(self): tdSql.close() diff --git a/tests/system-test/6-cluster/clusterCommonCreate.py b/tests/system-test/6-cluster/clusterCommonCreate.py index 299829144e..6c2017f91c 100644 --- a/tests/system-test/6-cluster/clusterCommonCreate.py +++ b/tests/system-test/6-cluster/clusterCommonCreate.py @@ -33,7 +33,7 @@ from util.common import * # INSERT_DATA = 3 class ClusterComCreate: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdSql.init(conn.cursor()) # tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/basic5.py b/tests/system-test/7-tmq/basic5.py index 9531541f13..d1985c6567 100644 --- a/tests/system-test/7-tmq/basic5.py +++ b/tests/system-test/7-tmq/basic5.py @@ -26,7 +26,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/create_wrong_topic.py b/tests/system-test/7-tmq/create_wrong_topic.py index d18cb0260e..dbdcedcbe8 100644 --- a/tests/system-test/7-tmq/create_wrong_topic.py +++ b/tests/system-test/7-tmq/create_wrong_topic.py @@ -13,7 +13,7 @@ from util.dnodes import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),logSql) self.setsql = TDSetSql() diff --git a/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py b/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py index 4add73ec2b..484969010c 100644 --- a/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py +++ b/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/dataFromTsdbNWal.py b/tests/system-test/7-tmq/dataFromTsdbNWal.py index 950c8fdcf6..ed22df2b07 100644 --- a/tests/system-test/7-tmq/dataFromTsdbNWal.py +++ b/tests/system-test/7-tmq/dataFromTsdbNWal.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/db.py b/tests/system-test/7-tmq/db.py index da5d7fefd2..17668d8d03 100644 --- a/tests/system-test/7-tmq/db.py +++ b/tests/system-test/7-tmq/db.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py b/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py index fc4fdcecf9..af6c51d947 100644 --- a/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py +++ b/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py @@ -26,7 +26,7 @@ class TDTestCase: self.ctbNum = 2 self.rowsPerTbl = 2 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/schema.py b/tests/system-test/7-tmq/schema.py index 34d36e5792..2a67cd1bc1 100644 --- a/tests/system-test/7-tmq/schema.py +++ b/tests/system-test/7-tmq/schema.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/stbFilter.py b/tests/system-test/7-tmq/stbFilter.py index 4942a39db4..0f0e7c5287 100644 --- a/tests/system-test/7-tmq/stbFilter.py +++ b/tests/system-test/7-tmq/stbFilter.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/stbTagFilter-1ctb.py b/tests/system-test/7-tmq/stbTagFilter-1ctb.py index 6cb152342b..0ef454f3e2 100644 --- a/tests/system-test/7-tmq/stbTagFilter-1ctb.py +++ b/tests/system-test/7-tmq/stbTagFilter-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/stbTagFilter-multiCtb.py b/tests/system-test/7-tmq/stbTagFilter-multiCtb.py index 9053bf2620..0ec114d3bd 100644 --- a/tests/system-test/7-tmq/stbTagFilter-multiCtb.py +++ b/tests/system-test/7-tmq/stbTagFilter-multiCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/subscribeDb.py b/tests/system-test/7-tmq/subscribeDb.py index ba46f72695..f738f816c7 100644 --- a/tests/system-test/7-tmq/subscribeDb.py +++ b/tests/system-test/7-tmq/subscribeDb.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb0.py b/tests/system-test/7-tmq/subscribeDb0.py index 7720001fbb..81d824156d 100644 --- a/tests/system-test/7-tmq/subscribeDb0.py +++ b/tests/system-test/7-tmq/subscribeDb0.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb1.py b/tests/system-test/7-tmq/subscribeDb1.py index 404938158f..02e72d0475 100644 --- a/tests/system-test/7-tmq/subscribeDb1.py +++ b/tests/system-test/7-tmq/subscribeDb1.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb2.py b/tests/system-test/7-tmq/subscribeDb2.py index 4702aef035..edf1a8ec80 100644 --- a/tests/system-test/7-tmq/subscribeDb2.py +++ b/tests/system-test/7-tmq/subscribeDb2.py @@ -21,7 +21,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb3.py b/tests/system-test/7-tmq/subscribeDb3.py index 0ff609ab6b..34df61dc09 100644 --- a/tests/system-test/7-tmq/subscribeDb3.py +++ b/tests/system-test/7-tmq/subscribeDb3.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb4.py b/tests/system-test/7-tmq/subscribeDb4.py index d253c34a53..27efbee016 100644 --- a/tests/system-test/7-tmq/subscribeDb4.py +++ b/tests/system-test/7-tmq/subscribeDb4.py @@ -51,7 +51,7 @@ class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") logSql = False tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/7-tmq/subscribeStb.py b/tests/system-test/7-tmq/subscribeStb.py index 2757e590a3..213f9aa89c 100644 --- a/tests/system-test/7-tmq/subscribeStb.py +++ b/tests/system-test/7-tmq/subscribeStb.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb0.py b/tests/system-test/7-tmq/subscribeStb0.py index 26e834ae2c..0c188754b2 100644 --- a/tests/system-test/7-tmq/subscribeStb0.py +++ b/tests/system-test/7-tmq/subscribeStb0.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb1.py b/tests/system-test/7-tmq/subscribeStb1.py index 0c49636b15..4d5407e927 100644 --- a/tests/system-test/7-tmq/subscribeStb1.py +++ b/tests/system-test/7-tmq/subscribeStb1.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb2.py b/tests/system-test/7-tmq/subscribeStb2.py index 2cbb16ec00..bb38a981d3 100644 --- a/tests/system-test/7-tmq/subscribeStb2.py +++ b/tests/system-test/7-tmq/subscribeStb2.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb3.py b/tests/system-test/7-tmq/subscribeStb3.py index 9c1b3fd241..32272491c6 100644 --- a/tests/system-test/7-tmq/subscribeStb3.py +++ b/tests/system-test/7-tmq/subscribeStb3.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb4.py b/tests/system-test/7-tmq/subscribeStb4.py index 33f4c4af1a..e347d27ac1 100644 --- a/tests/system-test/7-tmq/subscribeStb4.py +++ b/tests/system-test/7-tmq/subscribeStb4.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmq3mnodeSwitch.py b/tests/system-test/7-tmq/tmq3mnodeSwitch.py index 7ba914c05c..837317e5d7 100644 --- a/tests/system-test/7-tmq/tmq3mnodeSwitch.py +++ b/tests/system-test/7-tmq/tmq3mnodeSwitch.py @@ -32,7 +32,7 @@ class TDTestCase: self.portStep = 100 self.dnodeOfLeader = 0 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqAlterSchema.py b/tests/system-test/7-tmq/tmqAlterSchema.py index 232a1e11fa..3bff0e4754 100644 --- a/tests/system-test/7-tmq/tmqAlterSchema.py +++ b/tests/system-test/7-tmq/tmqAlterSchema.py @@ -32,7 +32,7 @@ class TDTestCase: self.portStep = 100 self.dnodeOfLeader = 0 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqAutoCreateTbl.py b/tests/system-test/7-tmq/tmqAutoCreateTbl.py index ce2cad4b14..568e49388b 100644 --- a/tests/system-test/7-tmq/tmqAutoCreateTbl.py +++ b/tests/system-test/7-tmq/tmqAutoCreateTbl.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 500 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqCheckData.py b/tests/system-test/7-tmq/tmqCheckData.py index 9338debfa6..9995af15c2 100644 --- a/tests/system-test/7-tmq/tmqCheckData.py +++ b/tests/system-test/7-tmq/tmqCheckData.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqCheckData1.py b/tests/system-test/7-tmq/tmqCheckData1.py index 7c236bbe8b..5b055cf725 100644 --- a/tests/system-test/7-tmq/tmqCheckData1.py +++ b/tests/system-test/7-tmq/tmqCheckData1.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqCommon.py b/tests/system-test/7-tmq/tmqCommon.py index b1455ebe48..e71e4d257d 100644 --- a/tests/system-test/7-tmq/tmqCommon.py +++ b/tests/system-test/7-tmq/tmqCommon.py @@ -37,7 +37,7 @@ from util.common import * # INSERT_DATA = 3 class TMQCom: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdSql.init(conn.cursor()) # tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py index 20b0c65c71..655097c924 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 100000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py index 494952ecd5..709464fc1e 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 100000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py index 666ca6ca64..09ad6e38c9 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 3000 self.rowsPerTbl = 150 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py index e4ce3b0f77..95e060d581 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 3000 self.rowsPerTbl = 70 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py index da7d9e4651..fc3437613b 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb.py b/tests/system-test/7-tmq/tmqConsFromTsdb.py index b3bb5f84e4..73af4d196f 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py index 07fb9c7751..20db44ef19 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 1000000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py index 313ff7476e..bd42f74c03 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 100000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py index 05f7030169..2eb1a7c52a 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 4000 self.rowsPerTbl = 150 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py index 232d90848f..351a10ed1f 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 3000 self.rowsPerTbl = 70 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py index 5841c6d605..6504274993 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1.py b/tests/system-test/7-tmq/tmqConsFromTsdb1.py index d0ab8d4fe3..2cfb6581d8 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsumerGroup.py b/tests/system-test/7-tmq/tmqConsumerGroup.py index b5cbfb8a51..5c7d21069b 100644 --- a/tests/system-test/7-tmq/tmqConsumerGroup.py +++ b/tests/system-test/7-tmq/tmqConsumerGroup.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqDelete-1ctb.py b/tests/system-test/7-tmq/tmqDelete-1ctb.py index 8329b00145..7509e43af7 100644 --- a/tests/system-test/7-tmq/tmqDelete-1ctb.py +++ b/tests/system-test/7-tmq/tmqDelete-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDelete-multiCtb.py b/tests/system-test/7-tmq/tmqDelete-multiCtb.py index c9d90b45be..ded6fe94d7 100644 --- a/tests/system-test/7-tmq/tmqDelete-multiCtb.py +++ b/tests/system-test/7-tmq/tmqDelete-multiCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDnode.py b/tests/system-test/7-tmq/tmqDnode.py index 802993e924..921e543e2d 100644 --- a/tests/system-test/7-tmq/tmqDnode.py +++ b/tests/system-test/7-tmq/tmqDnode.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqDnodeRestart.py b/tests/system-test/7-tmq/tmqDnodeRestart.py index bcc6725848..cb7e3152cb 100644 --- a/tests/system-test/7-tmq/tmqDnodeRestart.py +++ b/tests/system-test/7-tmq/tmqDnodeRestart.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py b/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py index b952dc2d57..0d75df58f9 100644 --- a/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py +++ b/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1000 self.rowsPerTbl = 10 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py b/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py index 4cb208b616..79cb79a83c 100644 --- a/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py +++ b/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1000 self.rowsPerTbl = 10 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDropStb.py b/tests/system-test/7-tmq/tmqDropStb.py index b172224c2a..7679f0ca44 100644 --- a/tests/system-test/7-tmq/tmqDropStb.py +++ b/tests/system-test/7-tmq/tmqDropStb.py @@ -51,7 +51,7 @@ class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") logSql = False tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/7-tmq/tmqDropStbCtb.py b/tests/system-test/7-tmq/tmqDropStbCtb.py index 704811d083..95780538d1 100644 --- a/tests/system-test/7-tmq/tmqDropStbCtb.py +++ b/tests/system-test/7-tmq/tmqDropStbCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqError.py b/tests/system-test/7-tmq/tmqError.py index 2d7b464025..757a3611f2 100644 --- a/tests/system-test/7-tmq/tmqError.py +++ b/tests/system-test/7-tmq/tmqError.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqModule.py b/tests/system-test/7-tmq/tmqModule.py index 1ff47da159..0063edce56 100644 --- a/tests/system-test/7-tmq/tmqModule.py +++ b/tests/system-test/7-tmq/tmqModule.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqShow.py b/tests/system-test/7-tmq/tmqShow.py index 0691da6786..6ff08498ea 100644 --- a/tests/system-test/7-tmq/tmqShow.py +++ b/tests/system-test/7-tmq/tmqShow.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py index c5f98bc3a0..33b8268a88 100644 --- a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py +++ b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py @@ -27,7 +27,7 @@ class TDTestCase: self.ctbNum = 1000 self.rowsPerTbl = 100 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py index f70c6ad49b..8158249fa6 100644 --- a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py +++ b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py @@ -23,7 +23,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py index 58cdc775ee..97e50cf654 100644 --- a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py +++ b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py @@ -23,7 +23,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqUdf.py b/tests/system-test/7-tmq/tmqUdf.py index 5eac0ae69d..d081423142 100644 --- a/tests/system-test/7-tmq/tmqUdf.py +++ b/tests/system-test/7-tmq/tmqUdf.py @@ -23,7 +23,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqUpdate-1ctb.py b/tests/system-test/7-tmq/tmqUpdate-1ctb.py index 12de04cd9c..a95920b7c4 100644 --- a/tests/system-test/7-tmq/tmqUpdate-1ctb.py +++ b/tests/system-test/7-tmq/tmqUpdate-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py index 02641d8bcb..0ced8fc34b 100644 --- a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py +++ b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py @@ -22,7 +22,7 @@ class TDTestCase: self.rowsPerTbl = 1000 self.autoCtbPrefix = 'aCtb' - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py index baeb70e656..bdcbb9578e 100644 --- a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py +++ b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py @@ -22,7 +22,7 @@ class TDTestCase: self.rowsPerTbl = 1000 self.autoCtbPrefix = 'aCtb' - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdate-multiCtb.py b/tests/system-test/7-tmq/tmqUpdate-multiCtb.py index bde266e634..df150130c0 100644 --- a/tests/system-test/7-tmq/tmqUpdate-multiCtb.py +++ b/tests/system-test/7-tmq/tmqUpdate-multiCtb.py @@ -22,7 +22,7 @@ class TDTestCase: self.rowsPerTbl = 1000 self.autoCtbPrefix = 'aCtb' - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdateWithConsume.py b/tests/system-test/7-tmq/tmqUpdateWithConsume.py index be07ba13a9..dbeac427ac 100644 --- a/tests/system-test/7-tmq/tmqUpdateWithConsume.py +++ b/tests/system-test/7-tmq/tmqUpdateWithConsume.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmq_taosx.py b/tests/system-test/7-tmq/tmq_taosx.py index 626e935733..fd7e1b7bb1 100644 --- a/tests/system-test/7-tmq/tmq_taosx.py +++ b/tests/system-test/7-tmq/tmq_taosx.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15517.py b/tests/system-test/99-TDcase/TD-15517.py index fe2d9b9041..e45a54c272 100644 --- a/tests/system-test/99-TDcase/TD-15517.py +++ b/tests/system-test/99-TDcase/TD-15517.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15554.py b/tests/system-test/99-TDcase/TD-15554.py index 16a34086b7..02654b5703 100644 --- a/tests/system-test/99-TDcase/TD-15554.py +++ b/tests/system-test/99-TDcase/TD-15554.py @@ -19,7 +19,7 @@ class TDTestCase: #updatecfgDict["clientCfg"] = clientCfgDict #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15557.py b/tests/system-test/99-TDcase/TD-15557.py index 243a0a4d7e..ca29e1282f 100644 --- a/tests/system-test/99-TDcase/TD-15557.py +++ b/tests/system-test/99-TDcase/TD-15557.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15563.py b/tests/system-test/99-TDcase/TD-15563.py index 74b5472d89..6b37f25bb6 100644 --- a/tests/system-test/99-TDcase/TD-15563.py +++ b/tests/system-test/99-TDcase/TD-15563.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-16025.py b/tests/system-test/99-TDcase/TD-16025.py index 4cf94f5daf..0adc313429 100644 --- a/tests/system-test/99-TDcase/TD-16025.py +++ b/tests/system-test/99-TDcase/TD-16025.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-16821.py b/tests/system-test/99-TDcase/TD-16821.py index 31c1c34485..b2b5e3f425 100644 --- a/tests/system-test/99-TDcase/TD-16821.py +++ b/tests/system-test/99-TDcase/TD-16821.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-17255.py b/tests/system-test/99-TDcase/TD-17255.py index 5d18fee8d2..bcf02b654f 100644 --- a/tests/system-test/99-TDcase/TD-17255.py +++ b/tests/system-test/99-TDcase/TD-17255.py @@ -20,7 +20,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/99-TDcase/TD-17699.py b/tests/system-test/99-TDcase/TD-17699.py index 40650e4b92..d4c4a4cc32 100644 --- a/tests/system-test/99-TDcase/TD-17699.py +++ b/tests/system-test/99-TDcase/TD-17699.py @@ -52,7 +52,7 @@ class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") logSql = False tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/99-TDcase/TD-19201.py b/tests/system-test/99-TDcase/TD-19201.py index 26caa27815..0fd86bf6b4 100644 --- a/tests/system-test/99-TDcase/TD-19201.py +++ b/tests/system-test/99-TDcase/TD-19201.py @@ -13,7 +13,7 @@ from util.dnodes import * class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/fulltest.sh b/tests/system-test/fulltest.sh old mode 100644 new mode 100755 index fd2ff916fd..12a20821f8 --- a/tests/system-test/fulltest.sh +++ b/tests/system-test/fulltest.sh @@ -2,35 +2,35 @@ set -e set -x -python3 ./test.py -f 0-others/taosShell.py -python3 ./test.py -f 0-others/taosShellError.py -python3 ./test.py -f 0-others/taosShellNetChk.py -python3 ./test.py -f 0-others/telemetry.py -python3 ./test.py -f 0-others/taosdMonitor.py -python3 ./test.py -f 0-others/udfTest.py -python3 ./test.py -f 0-others/udf_create.py -python3 ./test.py -f 0-others/udf_restart_taosd.py -python3 ./test.py -f 0-others/cachemodel.py -python3 ./test.py -f 0-others/udf_cfg1.py -python3 ./test.py -f 0-others/udf_cfg2.py -python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3 -python3 ./test.py -f 0-others/sysinfo.py -python3 ./test.py -f 0-others/user_control.py -python3 ./test.py -f 0-others/fsync.py -python3 ./test.py -f 0-others/compatibility.py -python3 ./test.py -f 1-insert/alter_database.py -python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py -python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py -python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py -python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py -python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py -python3 ./test.py -f 1-insert/alter_stable.py -python3 ./test.py -f 1-insert/alter_table.py -python3 ./test.py -f 1-insert/insertWithMoreVgroup.py -python3 ./test.py -f 1-insert/table_comment.py -python3 ./test.py -f 1-insert/time_range_wise.py -python3 ./test.py -f 1-insert/block_wise.py -python3 ./test.py -f 1-insert/create_retentions.py +# python3 ./test.py -f 0-others/taosShell.py +# python3 ./test.py -f 0-others/taosShellError.py +# python3 ./test.py -f 0-others/taosShellNetChk.py +# python3 ./test.py -f 0-others/telemetry.py +# python3 ./test.py -f 0-others/taosdMonitor.py +# python3 ./test.py -f 0-others/udfTest.py +# python3 ./test.py -f 0-others/udf_create.py +# python3 ./test.py -f 0-others/udf_restart_taosd.py +# python3 ./test.py -f 0-others/cachemodel.py +# python3 ./test.py -f 0-others/udf_cfg1.py +# python3 ./test.py -f 0-others/udf_cfg2.py +# python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3 +# python3 ./test.py -f 0-others/sysinfo.py +# python3 ./test.py -f 0-others/user_control.py +# python3 ./test.py -f 0-others/fsync.py +# python3 ./test.py -f 0-others/compatibility.py +# python3 ./test.py -f 1-insert/alter_database.py +# python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py +# python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py +# python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py +# python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py +# python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py +# python3 ./test.py -f 1-insert/alter_stable.py +# python3 ./test.py -f 1-insert/alter_table.py +# python3 ./test.py -f 1-insert/insertWithMoreVgroup.py +# python3 ./test.py -f 1-insert/table_comment.py +# python3 ./test.py -f 1-insert/time_range_wise.py +# python3 ./test.py -f 1-insert/block_wise.py +# python3 ./test.py -f 1-insert/create_retentions.py python3 ./test.py -f 1-insert/table_param_ttl.py python3 ./test.py -f 1-insert/mutil_stage.py python3 ./test.py -f 1-insert/table_param_ttl.py -R diff --git a/tests/system-test/test.py b/tests/system-test/test.py index dd49f037bd..b25bda4a3b 100644 --- a/tests/system-test/test.py +++ b/tests/system-test/test.py @@ -72,8 +72,9 @@ if __name__ == "__main__": queryPolicy = 1 createDnodeNums = 1 restful = False - opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:', [ - 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate']) + replicaVar = 1 + opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:n:', [ + 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate','replicaVar']) for key, value in opts: if key in ['-h', '--help']: tdLog.printNoPrefix( @@ -95,8 +96,7 @@ if __name__ == "__main__": tdLog.printNoPrefix('-C create Dnode Numbers in one cluster') tdLog.printNoPrefix('-R restful realization form') tdLog.printNoPrefix('-D taosadapter update cfg dict ') - - + tdLog.printNoPrefix('-n the number of replicas') sys.exit(0) if key in ['-r', '--restart']: @@ -168,6 +168,9 @@ if __name__ == "__main__": print('adapter cfg update convert fail.') sys.exit(0) + if key in ['-n', '--replicaVar']: + replicaVar = value + if not execCmd == "": if restful: tAdapter.init(deployPath) @@ -512,7 +515,7 @@ if __name__ == "__main__": if fileName == "all": tdCases.runAllLinux(conn) else: - tdCases.runOneLinux(conn, fileName) + tdCases.runOneLinux(conn, fileName, replicaVar) if restart: if fileName == "all": @@ -529,7 +532,7 @@ if __name__ == "__main__": conn = taosrest.connect(url=f"http://{host}:6041") tdLog.info("Procedures for tdengine deployed in %s" % (host)) tdLog.info("query test after taosd restart") - tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py") + tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py", replicaVar) else: tdLog.info("not need to query") From 77ba900776d63143cc95f5f26e2d5375703b4ffe Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Mon, 31 Oct 2022 16:12:40 +0800 Subject: [PATCH 59/81] refactor(sync): add sync local cmd, step down --- include/libs/sync/syncTools.h | 3 +++ source/libs/sync/inc/syncInt.h | 2 ++ source/libs/sync/src/syncMain.c | 31 +++++++++++++++++++++++++++--- source/libs/sync/src/syncMessage.c | 8 ++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/include/libs/sync/syncTools.h b/include/libs/sync/syncTools.h index eedc403493..a1cff2b738 100644 --- a/include/libs/sync/syncTools.h +++ b/include/libs/sync/syncTools.h @@ -679,10 +679,13 @@ void syncReconfigFinishLog(const SyncReconfigFinish* pMsg); void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg); // --------------------------------------------- + typedef enum { SYNC_LOCAL_CMD_STEP_DOWN = 100, } ESyncLocalCmd; +const char* syncLocalCmdGetStr(int32_t cmd); + typedef struct SyncLocalCmd { uint32_t bytes; int32_t vgId; diff --git a/source/libs/sync/inc/syncInt.h b/source/libs/sync/inc/syncInt.h index ae053328ab..f4949e1016 100644 --- a/source/libs/sync/inc/syncInt.h +++ b/source/libs/sync/inc/syncInt.h @@ -341,6 +341,8 @@ void syncLogRecvHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const void syncLogSendHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s); void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s); +void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s); + // for debug -------------- void syncNodePrint(SSyncNode* pObj); void syncNodePrint2(char* s, SSyncNode* pObj); diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 535db4181c..7142e8fb22 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -3066,11 +3066,27 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) { #endif } -#if 1 if (pMsg->term >= ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_FOLLOWER) { - syncNodeStepDown(ths, pMsg->term); + // syncNodeStepDown(ths, pMsg->term); + SyncLocalCmd* pSyncMsg = syncLocalCmdBuild(ths->vgId); + pSyncMsg->cmd = SYNC_LOCAL_CMD_STEP_DOWN; + pSyncMsg->sdNewTerm = pMsg->term; + + SRpcMsg rpcMsgLocalCmd; + syncLocalCmd2RpcMsg(pSyncMsg, &rpcMsgLocalCmd); + + if (ths->FpEqMsg != NULL && ths->msgcb != NULL) { + int32_t code = ths->FpEqMsg(ths->msgcb, &rpcMsgLocalCmd); + if (code != 0) { + sError("vgId:%d, sync enqueue step-down msg error, code:%d", ths->vgId, code); + rpcFreeCont(rpcMsgLocalCmd.pCont); + } else { + sTrace("vgId:%d, sync enqueue step-down msg, new-term: %" PRIu64, ths->vgId, pSyncMsg->sdNewTerm); + } + } + + syncLocalCmdDestroy(pSyncMsg); } -#endif /* // htonl @@ -3096,6 +3112,8 @@ int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg) { } int32_t syncNodeOnLocalCmd(SSyncNode* ths, SyncLocalCmd* pMsg) { + syncLogRecvLocalCmd(ths, pMsg, ""); + if (pMsg->cmd == SYNC_LOCAL_CMD_STEP_DOWN) { syncNodeStepDown(ths, pMsg->sdNewTerm); @@ -3768,3 +3786,10 @@ void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* p host, port, pMsg->term, pMsg->privateTerm, s); syncNodeEventLog(pSyncNode, logBuf); } + +void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s) { + char logBuf[256]; + snprintf(logBuf, sizeof(logBuf), "recv sync-local-cmd {cmd:%d-%s, sd-new-term:%" PRIu64 "}, %s", pMsg->cmd, + syncLocalCmdGetStr(pMsg->cmd), pMsg->sdNewTerm, s); + syncNodeEventLog(pSyncNode, logBuf); +} \ No newline at end of file diff --git a/source/libs/sync/src/syncMessage.c b/source/libs/sync/src/syncMessage.c index 3c36633fe8..f9609d9c39 100644 --- a/source/libs/sync/src/syncMessage.c +++ b/source/libs/sync/src/syncMessage.c @@ -3097,6 +3097,14 @@ void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg) { } // --------------------------------------------- +const char* syncLocalCmdGetStr(int32_t cmd) { + if (cmd == SYNC_LOCAL_CMD_STEP_DOWN) { + return "step-down"; + } + + return "unknown-local-cmd"; +} + SyncLocalCmd* syncLocalCmdBuild(int32_t vgId) { uint32_t bytes = sizeof(SyncLocalCmd); SyncLocalCmd* pMsg = taosMemoryMalloc(bytes); From f1e3e0892a4eed97a3944b404c641ae209e3886d Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao@163.com> Date: Mon, 31 Oct 2022 14:03:57 +0800 Subject: [PATCH 60/81] fix(planner):add semantic check --- source/libs/parser/src/parTranslater.c | 9 +++++---- tests/script/tsim/parser/function.sim | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index bffeb06f7c..0c28831d90 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -674,6 +674,10 @@ static bool isSelectFunc(const SNode* pNode) { return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsSelectFunc(((SFunctionNode*)pNode)->funcId)); } +static bool isWindowPseudoColumnFunc(const SNode* pNode) { + return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsWindowPseudoColumnFunc(((SFunctionNode*)pNode)->funcId)); +} + static bool isTimelineFunc(const SNode* pNode) { return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsTimelineFunc(((SFunctionNode*)pNode)->funcId)); } @@ -1264,10 +1268,7 @@ static EDealRes translateOperator(STranslateContext* pCxt, SOperatorNode* pOp) { } static EDealRes haveVectorFunction(SNode* pNode, void* pContext) { - if (isAggFunc(pNode)) { - *((bool*)pContext) = true; - return DEAL_RES_END; - } else if (isIndefiniteRowsFunc(pNode)) { + if (isAggFunc(pNode) || isIndefiniteRowsFunc(pNode) || isWindowPseudoColumnFunc(pNode)) { *((bool*)pContext) = true; return DEAL_RES_END; } diff --git a/tests/script/tsim/parser/function.sim b/tests/script/tsim/parser/function.sim index 0002a5d095..e3ef94e1cc 100644 --- a/tests/script/tsim/parser/function.sim +++ b/tests/script/tsim/parser/function.sim @@ -995,3 +995,22 @@ endi if $data00 != 0.000000000 then return -1 endi + +sql create table ft1(ts timestamp, a int, b int , c int, d double); + +sql insert into ft1 values(1648791213000,1,2,3,1.0); +sql_error select sum(_wduration), a from ft1 state_window(a); + +sql_error select count(_wduration), a from ft1 state_window(a); + +sql_error select max(_wduration), a from ft1 state_window(a); + +sql_error select sum(1 + _wduration), a from ft1 state_window(a); + +sql_error select sum(cast(_wstart as bigint)), a from ft1 state_window(a); + +sql_error select sum(cast(_wend as bigint)), a from ft1 state_window(a); + +sql_error create stream streams1 trigger at_once into streamt as select _wstart, sum(_wduration) from ft1 interval(10s); + +sql_error create stream streams1 trigger at_once into streamt as select _wstart, sum(cast(_wend as bigint)) from ft1 interval(10s); \ No newline at end of file From 6b744129948c2ccd356548b5848083d92df853b8 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Mon, 31 Oct 2022 16:30:42 +0800 Subject: [PATCH 61/81] refactor(sync): print fatal log when commit error --- source/libs/sync/src/syncMain.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 02e5c643a4..82ae8d7e51 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -3380,6 +3380,7 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde // ASSERT(pEntry != NULL); if (code != 0 || pEntry == NULL) { syncNodeErrorLog(ths, "get log entry error"); + sFatal("vgId:%d, get log entry %" PRId64 " error when commit since %s", ths->vgId, i, terrstr()); continue; } } From 08c2b3ff05fbfe0d565a1f8badbfb446ee8119f0 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 31 Oct 2022 16:40:03 +0800 Subject: [PATCH 62/81] fix(query): set correct error code. --- source/libs/executor/src/executorimpl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 11dbfaff9f..0c0d5549f2 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3050,7 +3050,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN } taosMemoryFreeClear(pOperator); - pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; + pTaskInfo->code = code; return NULL; } From aa2b54c57c11fcf37cccb269b370f5e43041e0ee Mon Sep 17 00:00:00 2001 From: slzhou Date: Mon, 31 Oct 2022 16:45:39 +0800 Subject: [PATCH 63/81] enhance: add configuration for udfd LD_LIBRARY_PATH to taos.cfg --- include/common/tglobal.h | 1 + source/common/src/tglobal.c | 6 ++++-- source/libs/function/src/tudf.c | 21 ++++++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/include/common/tglobal.h b/include/common/tglobal.h index cb4426f8a9..7df6124152 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -119,6 +119,7 @@ extern SDiskCfg tsDiskCfg[]; // udf extern bool tsStartUdfd; extern char tsUdfdResFuncs[]; +extern char tsUdfdLdLibPath[]; // schemaless extern char tsSmlChildTableName[]; diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index fbb9e04a25..660730f0dc 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -163,7 +163,8 @@ int32_t tsTtlUnit = 86400; int32_t tsTtlPushInterval = 86400; int32_t tsGrantHBInterval = 60; int32_t tsUptimeInterval = 300; // seconds -char tsUdfdResFuncs[1024] = ""; // udfd resident funcs that teardown when udfd exits +char tsUdfdResFuncs[512] = ""; // udfd resident funcs that teardown when udfd exits +char tsUdfdLdLibPath[512] = ""; #ifndef _STORAGE int32_t taosSetTfsCfg(SConfig *pCfg) { @@ -424,6 +425,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1; if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, 0) != 0) return -1; + if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, 0) != 0) return -1; GRANT_CFG_ADD; return 0; } @@ -722,7 +724,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsStartUdfd = cfgGetItem(pCfg, "udf")->bval; tstrncpy(tsUdfdResFuncs, cfgGetItem(pCfg, "udfdResFuncs")->str, sizeof(tsUdfdResFuncs)); - + tstrncpy(tsUdfdLdLibPath, cfgGetItem(pCfg, "udfdLdLibPath")->str, sizeof(tsUdfdLdLibPath)); if (tsQueryBufferSize >= 0) { tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL; } diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c index ea59e92e98..eff3c6cc7b 100644 --- a/source/libs/function/src/tudf.c +++ b/source/libs/function/src/tudf.c @@ -117,10 +117,29 @@ static int32_t udfSpawnUdfd(SUdfdData *pData) { char dnodeIdEnvItem[32] = {0}; char thrdPoolSizeEnvItem[32] = {0}; snprintf(dnodeIdEnvItem, 32, "%s=%d", "DNODE_ID", pData->dnodeId); + float numCpuCores = 4; taosGetCpuCores(&numCpuCores); snprintf(thrdPoolSizeEnvItem, 32, "%s=%d", "UV_THREADPOOL_SIZE", (int)numCpuCores * 2); - char *envUdfd[] = {dnodeIdEnvItem, thrdPoolSizeEnvItem, NULL}; + + char pathTaosdLdLib[512] = {0}; + size_t taosdLdLibPathLen = sizeof(pathTaosdLdLib); + uv_os_getenv("LD_LIBRARY_PATH", pathTaosdLdLib, &taosdLdLibPathLen); + + char udfdPathLdLib[1024] = {0}; + size_t udfdLdLibPathLen = strlen(tsUdfdLdLibPath); + strncpy(udfdPathLdLib, tsUdfdLdLibPath, udfdLdLibPathLen); + udfdPathLdLib[udfdLdLibPathLen] = ':'; + strncpy(udfdPathLdLib + udfdLdLibPathLen + 1, pathTaosdLdLib, sizeof(udfdPathLdLib) - udfdLdLibPathLen); + if (udfdLdLibPathLen + taosdLdLibPathLen < 1024) { + fnInfo("udfd LD_LIBRARY_PATH: %s", udfdPathLdLib); + } else { + fnError("can not set correct udfd LD_LIBRARY_PATH"); + } + char ldLibPathEnvItem[1024 + 32] = {0}; + snprintf(ldLibPathEnvItem, 1024 + 32, "%s=%s", "LD_LIBRARY_PATH", ldLibPathEnvItem); + + char *envUdfd[] = {dnodeIdEnvItem, thrdPoolSizeEnvItem, ldLibPathEnvItem, NULL}; options.env = envUdfd; int err = uv_spawn(&pData->loop, &pData->process, &options); From 7ddde569a019735f0673cacad45b7ac054093b4e Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 31 Oct 2022 15:54:47 +0800 Subject: [PATCH 64/81] enh: force drop dnode --- source/dnode/mnode/impl/inc/mndMnode.h | 2 +- source/dnode/mnode/impl/inc/mndQnode.h | 2 +- source/dnode/mnode/impl/inc/mndSnode.h | 2 +- source/dnode/mnode/impl/inc/mndVgroup.h | 3 +- source/dnode/mnode/impl/src/mndDnode.c | 20 +- source/dnode/mnode/impl/src/mndMnode.c | 21 +- source/dnode/mnode/impl/src/mndQnode.c | 8 +- source/dnode/mnode/impl/src/mndSnode.c | 8 +- source/dnode/mnode/impl/src/mndVgroup.c | 61 +++-- source/util/src/tconfig.c | 2 +- tests/script/jenkins/basic.txt | 1 + tests/script/tsim/dnode/drop_dnode_force.sim | 257 +++++++++++++++++++ 12 files changed, 339 insertions(+), 48 deletions(-) create mode 100644 tests/script/tsim/dnode/drop_dnode_force.sim diff --git a/source/dnode/mnode/impl/inc/mndMnode.h b/source/dnode/mnode/impl/inc/mndMnode.h index a433af9947..320d3651f0 100644 --- a/source/dnode/mnode/impl/inc/mndMnode.h +++ b/source/dnode/mnode/impl/inc/mndMnode.h @@ -28,7 +28,7 @@ SMnodeObj *mndAcquireMnode(SMnode *pMnode, int32_t mnodeId); void mndReleaseMnode(SMnode *pMnode, SMnodeObj *pObj); bool mndIsMnode(SMnode *pMnode, int32_t dnodeId); void mndGetMnodeEpSet(SMnode *pMnode, SEpSet *pEpSet); -int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj); +int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj, bool force); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/inc/mndQnode.h b/source/dnode/mnode/impl/inc/mndQnode.h index 17615500c4..36eebd3157 100644 --- a/source/dnode/mnode/impl/inc/mndQnode.h +++ b/source/dnode/mnode/impl/inc/mndQnode.h @@ -29,7 +29,7 @@ void mndCleanupQnode(SMnode *pMnode); SQnodeObj *mndAcquireQnode(SMnode *pMnode, int32_t qnodeId); void mndReleaseQnode(SMnode *pMnode, SQnodeObj *pObj); int32_t mndCreateQnodeList(SMnode *pMnode, SArray **pList, int32_t limit); -int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj); +int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj, bool force); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/inc/mndSnode.h b/source/dnode/mnode/impl/inc/mndSnode.h index ec7bb02ca7..342bc23712 100644 --- a/source/dnode/mnode/impl/inc/mndSnode.h +++ b/source/dnode/mnode/impl/inc/mndSnode.h @@ -27,7 +27,7 @@ void mndCleanupSnode(SMnode *pMnode); SSnodeObj *mndAcquireSnode(SMnode *pMnode, int32_t qnodeId); void mndReleaseSnode(SMnode *pMnode, SSnodeObj *pObj); SEpSet mndAcquireEpFromSnode(SMnode *pMnode, const SSnodeObj *pSnode); -int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj); +int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj, bool force); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/inc/mndVgroup.h b/source/dnode/mnode/impl/inc/mndVgroup.h index 76c3519808..94469899fc 100644 --- a/source/dnode/mnode/impl/inc/mndVgroup.h +++ b/source/dnode/mnode/impl/inc/mndVgroup.h @@ -42,8 +42,7 @@ int32_t mndAddCreateVnodeAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *p int32_t mndAddAlterVnodeConfirmAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup); int32_t mndAddAlterVnodeAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, tmsg_t msgType); int32_t mndAddDropVnodeAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, SVnodeGid *pVgid, bool isRedo); -int32_t mndSetMoveVgroupInfoToTrans(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, int32_t vn, SArray *pArray); -int32_t mndSetMoveVgroupsInfoToTrans(SMnode *, STrans *pTrans, int32_t dropDnodeId); +int32_t mndSetMoveVgroupsInfoToTrans(SMnode *, STrans *pTrans, int32_t dropDnodeId, bool force); int32_t mndBuildAlterVgroupAction(SMnode *pMnode, STrans *pTrans, SDbObj *pOldDb, SDbObj *pNewDb, SVgObj *pVgroup, SArray *pArray); diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 5307117533..c4ab741a41 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -670,7 +670,7 @@ _OVER: } static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SMnodeObj *pMObj, SQnodeObj *pQObj, - SSnodeObj *pSObj, int32_t numOfVnodes) { + SSnodeObj *pSObj, int32_t numOfVnodes, bool force) { int32_t code = -1; SSdbRaw *pRaw = NULL; STrans *pTrans = NULL; @@ -678,7 +678,7 @@ static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SM pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_GLOBAL, pReq, "drop-dnode"); if (pTrans == NULL) goto _OVER; mndTransSetSerial(pTrans); - mInfo("trans:%d, used to drop dnode:%d", pTrans->id, pDnode->id); + mInfo("trans:%d, used to drop dnode:%d, force:%d", pTrans->id, pDnode->id, force); pRaw = mndDnodeActionEncode(pDnode); if (pRaw == NULL) goto _OVER; @@ -694,22 +694,22 @@ static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SM if (pMObj != NULL) { mInfo("trans:%d, mnode on dnode:%d will be dropped", pTrans->id, pDnode->id); - if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pMObj) != 0) goto _OVER; + if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pMObj, force) != 0) goto _OVER; } if (pQObj != NULL) { mInfo("trans:%d, qnode on dnode:%d will be dropped", pTrans->id, pDnode->id); - if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pQObj) != 0) goto _OVER; + if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pQObj, force) != 0) goto _OVER; } if (pSObj != NULL) { mInfo("trans:%d, snode on dnode:%d will be dropped", pTrans->id, pDnode->id); - if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pSObj) != 0) goto _OVER; + if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pSObj, force) != 0) goto _OVER; } if (numOfVnodes > 0) { mInfo("trans:%d, %d vnodes on dnode:%d will be dropped", pTrans->id, numOfVnodes, pDnode->id); - if (mndSetMoveVgroupsInfoToTrans(pMnode, pTrans, pDnode->id) != 0) goto _OVER; + if (mndSetMoveVgroupsInfoToTrans(pMnode, pTrans, pDnode->id, force) != 0) goto _OVER; } if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; @@ -767,16 +767,16 @@ static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq) { } int32_t numOfVnodes = mndGetVnodesNum(pMnode, pDnode->id); - if (numOfVnodes > 0 || pMObj != NULL) { + if ((numOfVnodes > 0 || pMObj != NULL || pSObj != NULL || pQObj != NULL) && !dropReq.force) { if (!mndIsDnodeOnline(pDnode, taosGetTimestampMs())) { terrno = TSDB_CODE_NODE_OFFLINE; - mError("dnode:%d, failed to drop since %s, has_mnode:%d numOfVnodes:%d", pDnode->id, terrstr(), pMObj != NULL, - numOfVnodes); + mError("dnode:%d, failed to drop since %s, vnodes:%d mnode:%d qnode:%d snode:%d", pDnode->id, terrstr(), + numOfVnodes, pMObj != NULL, pQObj != NULL, pSObj != NULL); goto _OVER; } } - code = mndDropDnode(pMnode, pReq, pDnode, pMObj, pQObj, pSObj, numOfVnodes); + code = mndDropDnode(pMnode, pReq, pDnode, pMObj, pQObj, pSObj, numOfVnodes, dropReq.force); if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; _OVER: diff --git a/source/dnode/mnode/impl/src/mndMnode.c b/source/dnode/mnode/impl/src/mndMnode.c index 5889a162f8..f9ee2a327e 100644 --- a/source/dnode/mnode/impl/src/mndMnode.c +++ b/source/dnode/mnode/impl/src/mndMnode.c @@ -472,7 +472,7 @@ static int32_t mndSetDropMnodeCommitLogs(SMnode *pMnode, STrans *pTrans, SMnodeO return 0; } -static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) { +static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj, bool force) { SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; SDDropMnodeReq dropReq = {0}; @@ -485,12 +485,21 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode int32_t totalMnodes = sdbGetSize(pSdb, SDB_MNODE); if (totalMnodes == 2) { + if (force) { + mError("cant't force drop dnode, since a mnode on it and replica is 2"); + terrno = TSDB_CODE_NODE_OFFLINE; + return -1; + } mInfo("vgId:1, has %d mnodes, exec redo log first", totalMnodes); if (mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj) != 0) return -1; - if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + if (!force) { + if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + } } else if (totalMnodes == 3) { mInfo("vgId:1, has %d mnodes, exec redo action first", totalMnodes); - if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + if (!force) { + if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + } if (mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj) != 0) return -1; } else { return -1; @@ -499,9 +508,9 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode return 0; } -int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { +int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj, bool force) { if (pObj == NULL) return 0; - if (mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj) != 0) return -1; + if (mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj, force) != 0) return -1; if (mndSetDropMnodeCommitLogs(pMnode, pTrans, pObj) != 0) return -1; return 0; } @@ -515,7 +524,7 @@ static int32_t mndDropMnode(SMnode *pMnode, SRpcMsg *pReq, SMnodeObj *pObj) { mndTransSetSerial(pTrans); mInfo("trans:%d, used to drop mnode:%d", pTrans->id, pObj->id); - if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pObj) != 0) goto _OVER; + if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; diff --git a/source/dnode/mnode/impl/src/mndQnode.c b/source/dnode/mnode/impl/src/mndQnode.c index 70f9b35312..434e6fbc52 100644 --- a/source/dnode/mnode/impl/src/mndQnode.c +++ b/source/dnode/mnode/impl/src/mndQnode.c @@ -353,11 +353,13 @@ static int32_t mndSetDropQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQn return 0; } -int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj) { +int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj, bool force) { if (pObj == NULL) return 0; if (mndSetDropQnodeRedoLogs(pTrans, pObj) != 0) return -1; if (mndSetDropQnodeCommitLogs(pTrans, pObj) != 0) return -1; - if (mndSetDropQnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + if (!force) { + if (mndSetDropQnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + } return 0; } @@ -368,7 +370,7 @@ static int32_t mndDropQnode(SMnode *pMnode, SRpcMsg *pReq, SQnodeObj *pObj) { if (pTrans == NULL) goto _OVER; mInfo("trans:%d, used to drop qnode:%d", pTrans->id, pObj->id); - if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pObj) != 0) goto _OVER; + if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; diff --git a/source/dnode/mnode/impl/src/mndSnode.c b/source/dnode/mnode/impl/src/mndSnode.c index bb93745aee..e6c8192eec 100644 --- a/source/dnode/mnode/impl/src/mndSnode.c +++ b/source/dnode/mnode/impl/src/mndSnode.c @@ -360,11 +360,13 @@ static int32_t mndSetDropSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SSn return 0; } -int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj) { +int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj, bool force) { if (pObj == NULL) return 0; if (mndSetDropSnodeRedoLogs(pTrans, pObj) != 0) return -1; if (mndSetDropSnodeCommitLogs(pTrans, pObj) != 0) return -1; - if (mndSetDropSnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + if (!force) { + if (mndSetDropSnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + } return 0; } @@ -375,7 +377,7 @@ static int32_t mndDropSnode(SMnode *pMnode, SRpcMsg *pReq, SSnodeObj *pObj) { if (pTrans == NULL) goto _OVER; mInfo("trans:%d, used to drop snode:%d", pTrans->id, pObj->id); - if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pObj) != 0) goto _OVER; + if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; diff --git a/source/dnode/mnode/impl/src/mndVgroup.c b/source/dnode/mnode/impl/src/mndVgroup.c index c409a57d87..ac13679343 100644 --- a/source/dnode/mnode/impl/src/mndVgroup.c +++ b/source/dnode/mnode/impl/src/mndVgroup.c @@ -1071,7 +1071,7 @@ int32_t mndAddDropVnodeAction(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgOb } int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, int32_t vnIndex, - SArray *pArray) { + SArray *pArray, bool force) { SVgObj newVg = {0}; memcpy(&newVg, pVgroup, sizeof(SVgObj)); @@ -1080,24 +1080,45 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, mInfo("vgId:%d, vnode:%d dnode:%d", newVg.vgId, i, newVg.vnodeGid[i].dnodeId); } - mInfo("vgId:%d, will add 1 vnodes", pVgroup->vgId); - if (mndAddVnodeToVgroup(pMnode, &newVg, pArray) != 0) return -1; - if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, &newVg, &newVg.vnodeGid[newVg.replica - 1]) != 0) return -1; - for (int32_t i = 0; i < newVg.replica - 1; ++i) { - if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; - } - if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; + if (!force) { + mInfo("vgId:%d, will add 1 vnode", pVgroup->vgId); + if (mndAddVnodeToVgroup(pMnode, &newVg, pArray) != 0) return -1; + if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, &newVg, &newVg.vnodeGid[newVg.replica - 1]) != 0) return -1; + for (int32_t i = 0; i < newVg.replica - 1; ++i) { + if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; + } + if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; - mInfo("vgId:%d, will remove 1 vnodes", pVgroup->vgId); - newVg.replica--; - SVnodeGid del = newVg.vnodeGid[vnIndex]; - newVg.vnodeGid[vnIndex] = newVg.vnodeGid[newVg.replica]; - memset(&newVg.vnodeGid[newVg.replica], 0, sizeof(SVnodeGid)); - if (mndAddDropVnodeAction(pMnode, pTrans, pDb, &newVg, &del, true) != 0) return -1; - for (int32_t i = 0; i < newVg.replica; ++i) { - if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; + mInfo("vgId:%d, will remove 1 vnode", pVgroup->vgId); + newVg.replica--; + SVnodeGid del = newVg.vnodeGid[vnIndex]; + newVg.vnodeGid[vnIndex] = newVg.vnodeGid[newVg.replica]; + memset(&newVg.vnodeGid[newVg.replica], 0, sizeof(SVnodeGid)); + if (mndAddDropVnodeAction(pMnode, pTrans, pDb, &newVg, &del, true) != 0) return -1; + for (int32_t i = 0; i < newVg.replica; ++i) { + if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; + } + if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; + } else { + mInfo("vgId:%d, will add 1 vnode and force remove 1 vnode", pVgroup->vgId); + if (mndAddVnodeToVgroup(pMnode, &newVg, pArray) != 0) return -1; + newVg.replica--; + SVnodeGid del = newVg.vnodeGid[vnIndex]; + newVg.vnodeGid[vnIndex] = newVg.vnodeGid[newVg.replica]; + memset(&newVg.vnodeGid[newVg.replica], 0, sizeof(SVnodeGid)); + + if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, &newVg, &newVg.vnodeGid[vnIndex]) != 0) return -1; + for (int32_t i = 0; i < newVg.replica; ++i) { + if (i != vnIndex) { + if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; + } + } + if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; + + if (newVg.replica == 1) { + mInfo("vgId:%d, all data is dropped since replica=1 and dnode force dropped, stable should be recreated in this vgroup, but we not support it yet", pVgroup->vgId); + } } - if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; { SSdbRaw *pRaw = mndVgroupActionEncode(&newVg); @@ -1120,7 +1141,7 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, return 0; } -int32_t mndSetMoveVgroupsInfoToTrans(SMnode *pMnode, STrans *pTrans, int32_t delDnodeId) { +int32_t mndSetMoveVgroupsInfoToTrans(SMnode *pMnode, STrans *pTrans, int32_t delDnodeId, bool force) { int32_t code = 0; SArray *pArray = mndBuildDnodesArray(pMnode, delDnodeId); if (pArray == NULL) return -1; @@ -1141,9 +1162,9 @@ int32_t mndSetMoveVgroupsInfoToTrans(SMnode *pMnode, STrans *pTrans, int32_t del code = 0; if (vnIndex != -1) { - mInfo("vgId:%d, vnode:%d will be removed from dnode:%d", pVgroup->vgId, vnIndex, delDnodeId); + mInfo("vgId:%d, vnode:%d will be removed from dnode:%d, force:%d", pVgroup->vgId, vnIndex, delDnodeId, force); SDbObj *pDb = mndAcquireDb(pMnode, pVgroup->dbName); - code = mndSetMoveVgroupInfoToTrans(pMnode, pTrans, pDb, pVgroup, vnIndex, pArray); + code = mndSetMoveVgroupInfoToTrans(pMnode, pTrans, pDb, pVgroup, vnIndex, pArray, force); mndReleaseDb(pMnode, pDb); } diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index 0bf9e7cc33..712ff8feba 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -915,7 +915,7 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { int32_t olen, vlen, vlen2, vlen3; int32_t code = 0; if (url == NULL || strlen(url) == 0) { - uInfo("fail to load apoll url"); + uInfo("apoll url not load"); return 0; } diff --git a/tests/script/jenkins/basic.txt b/tests/script/jenkins/basic.txt index cf3d26eb17..6328124b0d 100644 --- a/tests/script/jenkins/basic.txt +++ b/tests/script/jenkins/basic.txt @@ -48,6 +48,7 @@ ./test.sh -f tsim/dnode/drop_dnode_has_vnode_replica3.sim ./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica1.sim ./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica3.sim +./test.sh -f tsim/dnode/drop_dnode_force.sim ./test.sh -f tsim/dnode/offline_reason.sim ./test.sh -f tsim/dnode/redistribute_vgroup_replica1.sim ./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_leader.sim diff --git a/tests/script/tsim/dnode/drop_dnode_force.sim b/tests/script/tsim/dnode/drop_dnode_force.sim new file mode 100644 index 0000000000..0263c07065 --- /dev/null +++ b/tests/script/tsim/dnode/drop_dnode_force.sim @@ -0,0 +1,257 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/deploy.sh -n dnode2 -i 2 +system sh/deploy.sh -n dnode3 -i 3 +system sh/deploy.sh -n dnode4 -i 4 +system sh/deploy.sh -n dnode5 -i 5 +system sh/cfg.sh -n dnode1 -c supportVnodes -v 0 +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode4 -s start +sql connect + +print =============== step1 create dnode2 dnode3 dnode4 dnode 5 +sql create dnode $hostname port 7200 +sql create dnode $hostname port 7300 +sql create dnode $hostname port 7400 +sql create dnode $hostname port 7500 + +$x = 0 +step1: + $ = $x + 1 + sleep 1000 + if $x == 10 then + print ====> dnode not online! + return -1 + endi +sql select * from information_schema.ins_dnodes +print ===> $data00 $data01 $data02 $data03 $data04 $data05 +print ===> $data10 $data11 $data12 $data13 $data14 $data15 +if $rows != 5 then + return -1 +endi +if $data(1)[4] != ready then + goto step1 +endi +if $data(2)[4] != ready then + goto step1 +endi +if $data(3)[4] != ready then + goto step1 +endi +if $data(4)[4] != ready then + goto step1 +endi +if $data(5)[4] != offline then + goto step1 +endi + +print =============== step2 create database +sql create database d1 vgroups 1 replica 3 +sql use d1 +sql create table d1.st (ts timestamp, i int) tags (j int) +sql create table d1.c0 using st tags(0) +sql create table d1.c1 using st tags(1) +sql create table d1.c2 using st tags(2) +sql create table d1.c3 using st tags(3) +sql create table d1.c4 using st tags(4) +sql create table d1.c5 using st tags(5) +sql create table d1.c6 using st tags(6) +sql create table d1.c7 using st tags(7) +sql create table d1.c8 using st tags(8) +sql create table d1.c9 using st tags(9) +sql show d1.tables +if $rows != 10 then + return -1 +endi + +sql create database d2 vgroups 3 replica 1 +sql use d2 +sql create table d2.st1 (ts timestamp, i int) tags (j int) +sql create table d2.c10 using st1 tags(0) +sql create table d2.c11 using st1 tags(1) +sql create table d2.c12 using st1 tags(2) +sql create table d2.c13 using st1 tags(3) +sql create table d2.c14 using st1 tags(4) +sql create table d2.c15 using st1 tags(5) +sql create table d2.c16 using st1 tags(6) +sql create table d2.c17 using st1 tags(7) +sql create table d2.c18 using st1 tags(8) +sql create table d2.c19 using st1 tags(9) +sql show d2.tables +if $rows != 10 then + return -1 +endi +sql create table d2.st2 (ts timestamp, i int) tags (j int) +sql create table d2.c20 using st2 tags(0) +sql create table d2.c21 using st2 tags(1) +sql create table d2.c22 using st2 tags(2) +sql create table d2.c23 using st2 tags(3) +sql create table d2.c24 using st2 tags(4) +sql create table d2.c25 using st2 tags(5) +sql create table d2.c26 using st2 tags(6) +sql create table d2.c27 using st2 tags(7) +sql create table d2.c28 using st2 tags(8) +sql create table d2.c29 using st2 tags(9) +sql show d2.tables +if $rows != 20 then + return -1 +endi + +print =============== step3: create qnode snode on dnode 2 +sql create qnode on dnode 2 +sql create snode on dnode 2 +sql select * from information_schema.ins_qnodes +if $rows != 1 then + return -1 +endi +sql show snodes +if $rows != 1 then + return -1 +endi + +print =============== step4: create mnode on dnode 2 +sql create mnode on dnode 3 +sql create mnode on dnode 2 +$x = 0 +step4: + $x = $x + 1 + sleep 1000 + if $x == 10 then + return -1 + endi +sql select * from information_schema.ins_mnodes -x step4 +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] +print $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[1][4] +#if $data(1)[2] != leader then +# goto step4 +#endi +if $data(2)[2] != follower then + goto step4 +endi +#if $data(3)[2] != follower then +# goto step4 +#endi + +print =============== step5: create dnode 5 +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode5 -s start +$x = 0 +step5: + $ = $x + 1 + sleep 1000 + if $x == 10 then + print ====> dnode not online! + return -1 + endi +sql select * from information_schema.ins_dnodes +print ===> $data00 $data01 $data02 $data03 $data04 $data05 +print ===> $data10 $data11 $data12 $data13 $data14 $data15 +print ===> $data20 $data21 $data22 $data23 $data24 $data25 +print ===> $data30 $data31 $data32 $data33 $data34 $data35 +print ===> $data40 $data41 $data42 $data43 $data44 $data45 +if $rows != 5 then + return -1 +endi +if $data(1)[4] != ready then + goto step5 +endi +if $data(2)[4] != offline then + goto step5 +endi +if $data(3)[4] != ready then + goto step5 +endi +if $data(4)[4] != ready then + goto step5 +endi +if $data(5)[4] != ready then + goto step5 +endi + +print =============== step5: drop dnode 2 +sql_error drop dnode 2 +sql drop dnode 2 force + +print select * from information_schema.ins_dnodes; +sql select * from information_schema.ins_dnodes; +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] +if $rows != 4 then + return -1 +endi + +print select * from information_schema.ins_mnodes; +sql select * from information_schema.ins_mnodes +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] +if $rows != 2 then + return -1 +endi +if $data(1)[2] != leader then + return -1 +endi + +sql select * from information_schema.ins_qnodes +if $rows != 0 then + return -1 +endi +sql show snodes +if $rows != 0 then + return -1 +endi + +print =============== step6: check d1 +sql show d1.tables +if $rows != 10 then + return -1 +endi + +print =============== step7: check d2 +sql show d2.tables +print ===> rows: $rows remained +if $rows > 10 then + return -1 +endi +$remain = $rows + +return +print =============== step8: alter stable +sql alter table d2.s1 add column b smallint +sql create table d2.c30 using st tags(0) +sql create table d2.c31 using st tags(1) +sql create table d2.c32 using st tags(2) +sql create table d2.c33 using st tags(3) +sql create table d2.c34 using st tags(4) +sql create table d2.c35 using st tags(5) +sql create table d2.c36 using st tags(6) +sql create table d2.c37 using st tags(7) +sql create table d2.c38 using st tags(8) +sql create table d2.c39 using st tags(9) +sql show d2.tables +if $rows != 10 then + return -1 +endi + +print =============== step9: drop stable and recreate it +sql create table d2.st2 (ts timestamp, i int) tags (j int) +sql create table d2.c20 using st2 tags(0) +sql create table d2.c21 using st2 tags(1) +sql create table d2.c22 using st2 tags(2) +sql create table d2.c23 using st2 tags(3) +sql create table d2.c24 using st2 tags(4) +sql create table d2.c25 using st2 tags(5) +sql create table d2.c26 using st2 tags(6) +sql create table d2.c27 using st2 tags(7) +sql create table d2.c28 using st2 tags(8) +sql create table d2.c29 using st2 tags(9) +sql show d2.tables +if $rows != 20 then + return -1 +endi + + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT From d246514da28d742614cbffdf45623b2e017bb650 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Mon, 31 Oct 2022 18:16:58 +0800 Subject: [PATCH 65/81] refactor(sync): check msgcb, putToQueueFp NULL --- source/dnode/mnode/impl/src/mndSync.c | 37 ++++++++++++++++++++++++-- source/dnode/vnode/src/vnd/vnodeSync.c | 16 +++++++++-- source/libs/sync/src/syncMain.c | 8 +++--- source/libs/sync/src/syncTimeout.c | 2 +- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndSync.c b/source/dnode/mnode/impl/src/mndSync.c index df4b526775..6853ff5ccc 100644 --- a/source/dnode/mnode/impl/src/mndSync.c +++ b/source/dnode/mnode/impl/src/mndSync.c @@ -17,11 +17,44 @@ #include "mndSync.h" #include "mndTrans.h" -static int32_t mndSyncEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { +static int32_t mndSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + SMsgHead *pHead = pMsg->pCont; pHead->contLen = htonl(pHead->contLen); pHead->vgId = htonl(pHead->vgId); + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; + return -1; + } + + int32_t code = tmsgPutToQueue(msgcb, SYNC_CTRL_QUEUE, pMsg); + if (code != 0) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; + } + return code; +} + +static int32_t mndSyncEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + + SMsgHead *pHead = pMsg->pCont; + pHead->contLen = htonl(pHead->contLen); + pHead->vgId = htonl(pHead->vgId); + + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; + return -1; + } + int32_t code = tmsgPutToQueue(msgcb, SYNC_QUEUE, pMsg); if (code != 0) { rpcFreeCont(pMsg->pCont); @@ -212,7 +245,7 @@ int32_t mndInitSync(SMnode *pMnode) { .msgcb = NULL, .FpSendMsg = mndSyncSendMsg, .FpEqMsg = mndSyncEqMsg, - .FpEqCtrlMsg = NULL, + .FpEqCtrlMsg = mndSyncEqCtrlMsg, }; snprintf(syncInfo.path, sizeof(syncInfo.path), "%s%ssync", pMnode->path, TD_DIRSEP); diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index 7acf5b4003..4af89dfa38 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -365,7 +365,13 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { } static int32_t vnodeSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { - if (msgcb == NULL) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; return -1; } @@ -378,7 +384,13 @@ static int32_t vnodeSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { } static int32_t vnodeSyncEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { - if (msgcb == NULL) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; return -1; } diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 82ae8d7e51..b4d939e980 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -508,7 +508,7 @@ int32_t syncEndSnapshot(int64_t rid) { SSyncLogStoreData* pData = pSyncNode->pLogStore->data; code = walEndSnapshot(pData->pWal); if (code != 0) { - sError("vgId:%d, wal snapshot end error since:%s", pSyncNode->vgId, terrstr(terrno)); + sError("vgId:%d, wal snapshot end error since:%s", pSyncNode->vgId, terrstr()); taosReleaseRef(tsNodeRefId, pSyncNode->rid); return -1; @@ -2793,7 +2793,7 @@ static void syncNodeEqElectTimer(void* param, void* tmrId) { pSyncNode->vgId, pSyncNode); SRpcMsg rpcMsg; syncTimeout2RpcMsg(pSyncMsg, &rpcMsg); - if (pSyncNode->FpEqMsg != NULL) { + if (pSyncNode->FpEqMsg != NULL && pSyncNode->msgcb != NULL && pSyncNode->msgcb->putToQueueFp != NULL) { int32_t code = pSyncNode->FpEqMsg(pSyncNode->msgcb, &rpcMsg); if (code != 0) { sError("vgId:%d, sync enqueue elect msg error, code:%d", pSyncNode->vgId, code); @@ -3379,8 +3379,8 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde // ASSERT(code == 0); // ASSERT(pEntry != NULL); if (code != 0 || pEntry == NULL) { - syncNodeErrorLog(ths, "get log entry error"); - sFatal("vgId:%d, get log entry %" PRId64 " error when commit since %s", ths->vgId, i, terrstr()); + syncNodeErrorLog(ths, "get log entry error"); + sFatal("vgId:%d, get log entry %" PRId64 " error when commit since %s", ths->vgId, i, terrstr()); continue; } } diff --git a/source/libs/sync/src/syncTimeout.c b/source/libs/sync/src/syncTimeout.c index 5ff73a6406..1c08217099 100644 --- a/source/libs/sync/src/syncTimeout.c +++ b/source/libs/sync/src/syncTimeout.c @@ -76,7 +76,7 @@ int32_t syncNodeTimerRoutine(SSyncNode* ths) { SSyncLogStoreData* pData = ths->pLogStore->data; int32_t code = walEndSnapshot(pData->pWal); if (code != 0) { - sError("vgId:%d, wal snapshot end error since:%s", ths->vgId, terrstr(terrno)); + sError("vgId:%d, timer wal snapshot end error since:%s", ths->vgId, terrstr()); return -1; } else { do { From b8e451d272057480cefd74ca629743790b468678 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao@163.com> Date: Mon, 31 Oct 2022 18:33:30 +0800 Subject: [PATCH 66/81] fix(stream): scalar stream update data --- source/libs/executor/src/groupoperator.c | 18 +-- source/libs/executor/src/scanoperator.c | 121 +++++++++--------- source/libs/executor/src/timewindowoperator.c | 5 +- tests/script/tsim/stream/scalar.sim | 94 ++++++++++++++ 4 files changed, 167 insertions(+), 71 deletions(-) create mode 100644 tests/script/tsim/stream/scalar.sim diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index 644f02f60d..d8340b72f2 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -62,7 +62,7 @@ static int32_t initGroupOptrInfo(SArray** pGroupColVals, int32_t* keyLen, char** int32_t numOfGroupCols = taosArrayGetSize(pGroupColList); for (int32_t i = 0; i < numOfGroupCols; ++i) { - SColumn* pCol = (SColumn*) taosArrayGet(pGroupColList, i); + SColumn* pCol = (SColumn*)taosArrayGet(pGroupColList, i); (*keyLen) += pCol->bytes; // actual data + null_flag SGroupKeys key = {0}; @@ -397,7 +397,7 @@ static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { return buildGroupResultDataBlock(pOperator); } -SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode *pAggNode, SExecTaskInfo* pTaskInfo) { +SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo) { SGroupbyOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SGroupbyOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -442,8 +442,8 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode pOperator->info = pInfo; pOperator->pTaskInfo = pTaskInfo; - pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, hashGroupbyAggregate, NULL, NULL, - destroyGroupOperatorInfo, NULL); + pOperator->fpSet = + createOperatorFpSet(operatorDummyOpenFn, hashGroupbyAggregate, NULL, NULL, destroyGroupOperatorInfo, NULL); code = appendDownstream(pOperator, &downstream, 1); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -765,7 +765,6 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition goto _error; } - int32_t numOfCols = 0; SExprInfo* pExprInfo = createExprInfo(pPartNode->pTargets, NULL, &numOfCols); pInfo->pGroupCols = extractPartitionColInfo(pPartNode->pPartitionKeys); @@ -819,8 +818,8 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition pOperator->info = pInfo; pOperator->pTaskInfo = pTaskInfo; - pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, hashPartition, NULL, NULL, destroyPartitionOperatorInfo, - NULL); + pOperator->fpSet = + createOperatorFpSet(operatorDummyOpenFn, hashPartition, NULL, NULL, destroyPartitionOperatorInfo, NULL); code = appendDownstream(pOperator, &downstream, 1); return pOperator; @@ -965,6 +964,7 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { case STREAM_DELETE_DATA: { copyDataBlock(pInfo->pDelRes, pBlock); pInfo->pDelRes->info.type = STREAM_DELETE_RESULT; + printDataBlock(pInfo->pDelRes, "stream partitionby delete"); return pInfo->pDelRes; } break; default: @@ -1014,6 +1014,9 @@ void initParDownStream(SOperatorInfo* downstream, SPartitionBySupporter* pParSup SStreamScanInfo* pScanInfo = downstream->info; pScanInfo->partitionSup = *pParSup; pScanInfo->pPartScalarSup = pExpr; + if (!pScanInfo->pUpdateInfo) { + pScanInfo->pUpdateInfo = updateInfoInit(60000, TSDB_TIME_PRECISION_MILLI, 0); + } } SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStreamPartitionPhysiNode* pPartNode, @@ -1108,7 +1111,6 @@ _error: return NULL; } - SArray* extractColumnInfo(SNodeList* pNodeList) { size_t numOfCols = LIST_LENGTH(pNodeList); SArray* pList = taosArrayInit(numOfCols, sizeof(SColumn)); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index b9324d0c64..582c79e8d3 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -363,7 +363,8 @@ void applyLimitOffset(SLimitInfo* pLimitInfo, SSDataBlock* pBlock, SExecTaskInfo if (pLimitInfo->remainOffset >= pBlock->info.rows) { pLimitInfo->remainOffset -= pBlock->info.rows; pBlock->info.rows = 0; - qDebug("current block ignore due to offset, current:%"PRId64", %s", pLimitInfo->remainOffset, GET_TASKID(pTaskInfo)); + qDebug("current block ignore due to offset, current:%" PRId64 ", %s", pLimitInfo->remainOffset, + GET_TASKID(pTaskInfo)); } else { blockDataTrimFirstNRows(pBlock, pLimitInfo->remainOffset); pLimitInfo->remainOffset = 0; @@ -376,7 +377,7 @@ void applyLimitOffset(SLimitInfo* pLimitInfo, SSDataBlock* pBlock, SExecTaskInfo int32_t keep = pBlock->info.rows - overflowRows; blockDataKeepFirstNRows(pBlock, keep); - qDebug("output limit %"PRId64" has reached, %s", pLimit->limit, GET_TASKID(pTaskInfo)); + qDebug("output limit %" PRId64 " has reached, %s", pLimit->limit, GET_TASKID(pTaskInfo)); pOperator->status = OP_EXEC_DONE; } } @@ -748,13 +749,13 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { return NULL; } - int32_t num = 0; + int32_t num = 0; STableKeyInfo* pList = NULL; tableListGetGroupList(pTaskInfo->pTableInfoList, pInfo->currentGroupId, &pList, &num); ASSERT(pInfo->dataReader == NULL); - int32_t code = tsdbReaderOpen(pInfo->readHandle.vnode, &pInfo->cond, pList, num, (STsdbReader**)&pInfo->dataReader, - GET_TASKID(pTaskInfo)); + int32_t code = tsdbReaderOpen(pInfo->readHandle.vnode, &pInfo->cond, pList, num, + (STsdbReader**)&pInfo->dataReader, GET_TASKID(pTaskInfo)); if (code != TSDB_CODE_SUCCESS) { T_LONG_JMP(pTaskInfo->env, code); } @@ -776,7 +777,7 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { pInfo->limitInfo.numOfOutputRows = 0; pInfo->limitInfo.remainOffset = pInfo->limitInfo.limit.offset; - int32_t num = 0; + int32_t num = 0; STableKeyInfo* pList = NULL; tableListGetGroupList(pTaskInfo->pTableInfoList, pInfo->currentGroupId, &pList, &num); @@ -819,8 +820,8 @@ static void destroyTableScanOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, - SExecTaskInfo* pTaskInfo) { +SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, + SExecTaskInfo* pTaskInfo) { STableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -884,7 +885,7 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, pOperator->cost.openCost = 0; return pOperator; - _error: +_error: if (pInfo != NULL) { destroyTableScanOperatorInfo(pInfo); } @@ -1024,7 +1025,8 @@ static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pC return TSDB_CODE_SUCCESS; } -SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, SExecTaskInfo* pTaskInfo) { +SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, + SExecTaskInfo* pTaskInfo) { SBlockDistInfo* pInfo = taosMemoryCalloc(1, sizeof(SBlockDistInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -1041,8 +1043,8 @@ SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDi } STableListInfo* pTableListInfo = pTaskInfo->pTableInfoList; - size_t num = tableListGetSize(pTableListInfo); - void* pList = tableListGetInfo(pTableListInfo, 0); + size_t num = tableListGetSize(pTableListInfo); + void* pList = tableListGetInfo(pTableListInfo, 0); tsdbReaderOpen(readHandle->vnode, &cond, pList, num, &pInfo->pHandle, pTaskInfo->id.str); cleanupQueryTableDataCond(&cond); @@ -1070,7 +1072,7 @@ SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDi createOperatorFpSet(operatorDummyOpenFn, doBlockInfoScan, NULL, NULL, destroyBlockDistScanOperatorInfo, NULL); return pOperator; - _error: +_error: taosMemoryFreeClear(pInfo); taosMemoryFreeClear(pOperator); return NULL; @@ -1135,8 +1137,8 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU blockDataCleanup(pBlock); STsdbReader* pReader = NULL; - int32_t code = tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &cond, &tblInfo, 1, (STsdbReader**)&pReader, - GET_TASKID(pTaskInfo)); + int32_t code = tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &cond, &tblInfo, 1, (STsdbReader**)&pReader, + GET_TASKID(pTaskInfo)); if (code != TSDB_CODE_SUCCESS) { terrno = code; return NULL; @@ -1162,7 +1164,8 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU tsdbReaderClose(pReader); qDebug("retrieve prev rows:%d, skey:%" PRId64 ", ekey:%" PRId64 " uid:%" PRIu64 ", max ver:%" PRId64 - ", suid:%" PRIu64, pBlock->info.rows, startTs, endTs, tbUid, maxVersion, cond.suid); + ", suid:%" PRIu64, + pBlock->info.rows, startTs, endTs, tbUid, maxVersion, cond.suid); return pBlock->info.rows > 0 ? pBlock : NULL; } @@ -1178,12 +1181,12 @@ static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, static uint64_t getGroupIdByUid(SStreamScanInfo* pInfo, uint64_t uid) { return getTableGroupId(pInfo->pTableScanOp->pTaskInfo->pTableInfoList, uid); -// SHashObj* map = pInfo->pTableScanOp->pTaskInfo->pTableInfoList.map; -// uint64_t* groupId = taosHashGet(map, &uid, sizeof(int64_t)); -// if (groupId) { -// return *groupId; -// } -// return 0; + // SHashObj* map = pInfo->pTableScanOp->pTaskInfo->pTableInfoList.map; + // uint64_t* groupId = taosHashGet(map, &uid, sizeof(int64_t)); + // if (groupId) { + // return *groupId; + // } + // return 0; } static uint64_t getGroupIdByData(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, int64_t maxVersion) { @@ -1380,7 +1383,7 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS if (rows == 0) { return TSDB_CODE_SUCCESS; } - int32_t code = blockDataEnsureCapacity(pDestBlock, rows * 2); + int32_t code = blockDataEnsureCapacity(pDestBlock, rows); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -1423,39 +1426,33 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS } static int32_t generateDeleteResultBlock(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock) { - if (pSrcBlock->info.rows == 0) { + blockDataCleanup(pDestBlock); + int32_t rows = pSrcBlock->info.rows; + if (rows == 0) { return TSDB_CODE_SUCCESS; } - blockDataCleanup(pDestBlock); - int32_t code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); + int32_t code = blockDataEnsureCapacity(pDestBlock, rows); if (code != TSDB_CODE_SUCCESS) { return code; } - ASSERT(taosArrayGetSize(pSrcBlock->pDataBlock) >= 3); - SColumnInfoData* pStartTsCol = taosArrayGet(pSrcBlock->pDataBlock, START_TS_COLUMN_INDEX); - TSKEY* startData = (TSKEY*)pStartTsCol->pData; - SColumnInfoData* pEndTsCol = taosArrayGet(pSrcBlock->pDataBlock, END_TS_COLUMN_INDEX); - TSKEY* endData = (TSKEY*)pEndTsCol->pData; - SColumnInfoData* pUidCol = taosArrayGet(pSrcBlock->pDataBlock, UID_COLUMN_INDEX); - uint64_t* uidCol = (uint64_t*)pUidCol->pData; - SColumnInfoData* pDestStartCol = taosArrayGet(pDestBlock->pDataBlock, START_TS_COLUMN_INDEX); - SColumnInfoData* pDestEndCol = taosArrayGet(pDestBlock->pDataBlock, END_TS_COLUMN_INDEX); - SColumnInfoData* pDestUidCol = taosArrayGet(pDestBlock->pDataBlock, UID_COLUMN_INDEX); - SColumnInfoData* pDestGpCol = taosArrayGet(pDestBlock->pDataBlock, GROUPID_COLUMN_INDEX); - SColumnInfoData* pDestCalStartTsCol = taosArrayGet(pDestBlock->pDataBlock, CALCULATE_START_TS_COLUMN_INDEX); - SColumnInfoData* pDestCalEndTsCol = taosArrayGet(pDestBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX); - int32_t dummy = 0; - int64_t version = pSrcBlock->info.version - 1; + SColumnInfoData* pSrcStartTsCol = (SColumnInfoData*)taosArrayGet(pSrcBlock->pDataBlock, START_TS_COLUMN_INDEX); + SColumnInfoData* pSrcEndTsCol = (SColumnInfoData*)taosArrayGet(pSrcBlock->pDataBlock, END_TS_COLUMN_INDEX); + SColumnInfoData* pSrcUidCol = taosArrayGet(pSrcBlock->pDataBlock, UID_COLUMN_INDEX); + uint64_t* srcUidData = (uint64_t*)pSrcUidCol->pData; + SColumnInfoData* pSrcGpCol = taosArrayGet(pSrcBlock->pDataBlock, GROUPID_COLUMN_INDEX); + uint64_t* srcGp = (uint64_t*)pSrcGpCol->pData; + ASSERT(pSrcStartTsCol->info.type == TSDB_DATA_TYPE_TIMESTAMP); + TSKEY* srcStartTsCol = (TSKEY*)pSrcStartTsCol->pData; + TSKEY* srcEndTsCol = (TSKEY*)pSrcEndTsCol->pData; + int64_t version = pSrcBlock->info.version - 1; for (int32_t i = 0; i < pSrcBlock->info.rows; i++) { - uint64_t groupId = getGroupIdByData(pInfo, uidCol[i], startData[i], version); - colDataAppend(pDestStartCol, i, (const char*)(startData + i), false); - colDataAppend(pDestEndCol, i, (const char*)(endData + i), false); - colDataAppendNULL(pDestUidCol, i); - colDataAppend(pDestGpCol, i, (const char*)&groupId, false); - colDataAppendNULL(pDestCalStartTsCol, i); - colDataAppendNULL(pDestCalEndTsCol, i); - pDestBlock->info.rows++; + uint64_t srcUid = srcUidData[i]; + uint64_t groupId = srcGp[i]; + if (groupId == 0) { + groupId = getGroupIdByData(pInfo, srcUid, srcStartTsCol[i], version); + } + appendOneRowToStreamSpecialBlock(pDestBlock, srcStartTsCol + i, srcEndTsCol + i, srcUidData + i, &groupId, NULL); } return TSDB_CODE_SUCCESS; } @@ -1466,6 +1463,8 @@ static int32_t generateScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, code = generateIntervalScanRange(pInfo, pSrcBlock, pDestBlock); } else if (isSessionWindow(pInfo) || isStateWindow(pInfo)) { code = generateSessionScanRange(pInfo, pSrcBlock, pDestBlock); + } else { + code = generateDeleteResultBlock(pInfo, pSrcBlock, pDestBlock); } pDestBlock->info.type = STREAM_CLEAR; pDestBlock->info.version = pSrcBlock->info.version; @@ -1894,8 +1893,8 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { #endif size_t total = taosArrayGetSize(pInfo->pBlockLists); - // TODO: refactor - FETCH_NEXT_BLOCK: +// TODO: refactor +FETCH_NEXT_BLOCK: if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) { if (pInfo->validBlockIndex >= total) { doClearBufferedBlocks(pInfo); @@ -2022,7 +2021,7 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { int32_t totBlockNum = taosArrayGetSize(pInfo->pBlockLists); - NEXT_SUBMIT_BLK: + NEXT_SUBMIT_BLK: while (1) { if (pInfo->tqReader->pMsg == NULL) { if (pInfo->validBlockIndex >= totBlockNum) { @@ -2278,7 +2277,7 @@ SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pT pOperator->fpSet = createOperatorFpSet(NULL, doRawScan, NULL, NULL, destroyRawScanOperatorInfo, NULL); return pOperator; - _end: +_end: taosMemoryFree(pInfo); taosMemoryFree(pOperator); pTaskInfo->code = code; @@ -2388,7 +2387,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys } STableKeyInfo* pList = NULL; - int32_t num = 0; + int32_t num = 0; tableListGetGroupList(pTaskInfo->pTableInfoList, 0, &pList, &num); if (pHandle->initTableReader) { @@ -2467,7 +2466,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys return pOperator; - _error: +_error: if (pColIds != NULL) { taosArrayDestroy(pColIds); } @@ -4102,7 +4101,7 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScan return pOperator; - _error: +_error: taosMemoryFreeClear(pInfo); taosMemoryFreeClear(pOperator); terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; @@ -4241,7 +4240,7 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi return pOperator; - _error: +_error: taosMemoryFree(pInfo); taosMemoryFree(pOperator); terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -4264,8 +4263,8 @@ int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, STsdbReader** ppReader, const char* idstr) { STsdbReader* pReader = NULL; - void* pStart = tableListGetInfo(pTableListInfo, tableStartIdx); - int32_t num = tableEndIdx - tableStartIdx + 1; + void* pStart = tableListGetInfo(pTableListInfo, tableStartIdx); + int32_t num = tableEndIdx - tableStartIdx + 1; int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, num, &pReader, idstr); if (code != 0) { @@ -4426,7 +4425,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc bool allColumnsHaveAgg = true; SColumnDataAgg** pColAgg = NULL; -// STsdbReader* reader = pTableScanInfo->pReader; // taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); + // STsdbReader* reader = pTableScanInfo->pReader; // taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); if (allColumnsHaveAgg == true) { int32_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); @@ -4524,7 +4523,7 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { int64_t st = taosGetTimestampUs(); - void* p = tableListGetInfo(pInfo->tableListInfo, readIdx + pInfo->tableStartIndex); + void* p = tableListGetInfo(pInfo->tableListInfo, readIdx + pInfo->tableStartIndex); SReadHandle* pHandle = &pInfo->readHandle; tsdbReaderOpen(pHandle->vnode, pQueryCond, p, 1, &pInfo->pReader, GET_TASKID(pTaskInfo)); diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 49a7112eba..ee45d0547f 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -1687,7 +1687,9 @@ void initIntervalDownStream(SOperatorInfo* downstream, uint16_t type, SAggSuppor SStreamScanInfo* pScanInfo = downstream->info; pScanInfo->windowSup.parentType = type; pScanInfo->windowSup.pIntervalAggSup = pSup; - pScanInfo->pUpdateInfo = updateInfoInitP(pInterval, pTwSup->waterMark); + if (!pScanInfo->pUpdateInfo) { + pScanInfo->pUpdateInfo = updateInfoInitP(pInterval, pTwSup->waterMark); + } pScanInfo->interval = *pInterval; pScanInfo->twAggSup = *pTwSup; } @@ -2453,7 +2455,6 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) { } else { // non-linear interpolation pSliceInfo->current = taosTimeAdd(pSliceInfo->current, pInterval->interval, pInterval->intervalUnit, pInterval->precision); - } } diff --git a/tests/script/tsim/stream/scalar.sim b/tests/script/tsim/stream/scalar.sim new file mode 100644 index 0000000000..e211357276 --- /dev/null +++ b/tests/script/tsim/stream/scalar.sim @@ -0,0 +1,94 @@ +$loop_all = 0 +looptest: + +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 + +sql drop database if exists test; +sql create database test vgroups 1; +sql use test; +sql create stable st(ts timestamp,a int,b int,c int, d double) 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); +sql create stream streams0 into streamt0 as select ts c1, a, abs(b) c4 from t1 partition by a; +sql create stream streams1 into streamt1 as select ts c1, a, abs(b) c4 from t1; +sql create stream streams2 into streamt2 as select ts c1, a, abs(b) c4 from st partition by tbname; + +sql insert into t1 values(1648791213000,1,1,1,1); +sql insert into t1 values(1648791213001,1,1,1,1); +sql insert into t1 values(1648791213002,1,1,1,1); + +sql insert into t2 values(1648791213000,1,2,2,2); +sql insert into t2 values(1648791213001,1,1,1,1); +sql insert into t2 values(1648791213002,1,1,1,1); + +sql insert into t1 values(1648791213001,2,11,11,11); + + +$loop_count = 0 +loop1: + +sleep 200 + +sql select * from streamt0 order by a desc; + +$loop_count = $loop_count + 1 + +if $loop_count == 10 then + return -1 +endi + +if $rows != 3 then + print ======streamt0=rows=$rows + goto loop1 +endi + +if $data01 != 2 then + print ======streamt0=data01=$data01 + goto loop1 +endi + +if $data02 != 11 then + print ======streamt0=data02=$data02 + goto loop1 +endi + + +sql select * from streamt1 order by a desc; + +if $rows != 3 then + print ======streamt1=rows=$rows + goto loop1 +endi + +if $data01 != 2 then + print ======streamt1=data01=$data01 + goto loop1 +endi + +if $data02 != 11 then + print ======streamt1=data02=$data02 + goto loop1 +endi + +sql select * from streamt2 order by a desc; + +if $rows != 6 then + print ======streamt2=rows=$rows + goto loop1 +endi + +if $data01 != 2 then + print ======streamt2=data01=$data01 + goto loop1 +endi + +if $data02 != 11 then + print ======streamt2=data02=$data02 + goto loop1 +endi + +system sh/stop_dnodes.sh \ No newline at end of file From 06c06d290f8878b30a34e9061d82dcbdf3ee3918 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Mon, 31 Oct 2022 18:45:10 +0800 Subject: [PATCH 67/81] opt http module --- source/libs/transport/inc/transComm.h | 1 + source/libs/transport/src/thttp.c | 280 +++++++++++++++++--------- source/libs/transport/src/trans.c | 2 + 3 files changed, 183 insertions(+), 100 deletions(-) diff --git a/source/libs/transport/inc/transComm.h b/source/libs/transport/inc/transComm.h index b83f84e3f2..2354f0f959 100644 --- a/source/libs/transport/inc/transComm.h +++ b/source/libs/transport/inc/transComm.h @@ -428,6 +428,7 @@ void transDestoryExHandle(void* handle); int32_t transGetRefMgt(); int32_t transGetInstMgt(); +void transHttpEnvDestroy(); #ifdef __cplusplus } #endif diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c index fc61fb5122..9526ad472a 100644 --- a/source/libs/transport/src/thttp.c +++ b/source/libs/transport/src/thttp.c @@ -39,73 +39,11 @@ typedef struct SHttpMsg { char* cont; int32_t len; EHttpCompFlag flag; + int8_t quit; + SHttpModule* http; } SHttpMsg; -static TdThreadOnce transHttpInit = PTHREAD_ONCE_INIT; -static SHttpModule* http = NULL; - -static void httpHandleReq(SHttpMsg* msg); -static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, - EHttpCompFlag flag); - -static void* httpThread(void* arg) { - SHttpModule* http = (SHttpModule*)arg; - setThreadName("http-cli-send-thread"); - uv_run(http->loop, UV_RUN_DEFAULT); - return NULL; -} - -static void httpDestroyMsg(SHttpMsg* msg) { - if (msg == NULL) return; - - taosMemoryFree(msg->server); - taosMemoryFree(msg->cont); - taosMemoryFree(msg); -} -static void httpAsyncCb(uv_async_t* handle) { - SAsyncItem* item = handle->data; - SHttpModule* http = item->pThrd; - - SHttpMsg* msg = NULL; - - queue wq; - taosThreadMutexLock(&item->mtx); - QUEUE_MOVE(&item->qmsg, &wq); - taosThreadMutexUnlock(&item->mtx); - - int count = 0; - while (!QUEUE_IS_EMPTY(&wq)) { - queue* h = QUEUE_HEAD(&wq); - QUEUE_REMOVE(h); - msg = QUEUE_DATA(h, SHttpMsg, q); - httpHandleReq(msg); - } -} - -static void transHttpEnvInit() { - http = taosMemoryMalloc(sizeof(SHttpModule)); - - http->loop = taosMemoryMalloc(sizeof(uv_loop_t)); - uv_loop_init(http->loop); - - http->asyncPool = transAsyncPoolCreate(http->loop, 1, http, httpAsyncCb); - - int err = taosThreadCreate(&http->thread, NULL, httpThread, (void*)http); - if (err != 0) { - taosMemoryFree(http->loop); - taosMemoryFree(http); - http = NULL; - } -} -static void transHttpEnvDestroy() { - if (http == NULL) return; - - transAsyncPoolDestroy(http->asyncPool); - taosMemoryFree(http->loop); - taosMemoryFree(http); -} - typedef struct SHttpClient { uv_connect_t conn; uv_tcp_t tcp; @@ -117,6 +55,17 @@ typedef struct SHttpClient { struct sockaddr_in dest; } SHttpClient; +static TdThreadOnce transHttpInit = PTHREAD_ONCE_INIT; +static SHttpModule* thttp = NULL; +static void transHttpEnvInit(); + +static void httpHandleReq(SHttpMsg* msg); +static void httpHandleQuit(SHttpMsg* msg); +static int32_t httpSendQuit(); + +static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, + EHttpCompFlag flag); + static int32_t taosBuildHttpHeader(const char* server, int32_t contLen, char* pHead, int32_t headLen, EHttpCompFlag flag) { if (flag == HTTP_FLAT) { @@ -135,6 +84,7 @@ static int32_t taosBuildHttpHeader(const char* server, int32_t contLen, char* pH "Content-Length: %d\n\n", server, contLen); } else { + terrno = TSDB_CODE_INVALID_CFG; return -1; } } @@ -208,6 +158,57 @@ _OVER: return code; } +static FORCE_INLINE int32_t taosBuildDstAddr(const char* server, uint16_t port, struct sockaddr_in* dest) { + uint32_t ip = taosGetIpv4FromFqdn(server); + if (ip == 0xffffffff) { + tError("http-report failed to get http server:%s since %s", server, errno == 0 ? "invalid http server" : terrstr()); + return -1; + } + char buf[128] = {0}; + tinet_ntoa(buf, ip); + uv_ip4_addr(buf, port, dest); + return 0; +} + +static void* httpThread(void* arg) { + SHttpModule* http = (SHttpModule*)arg; + setThreadName("http-cli-send-thread"); + uv_run(http->loop, UV_RUN_DEFAULT); + return NULL; +} + +static void httpDestroyMsg(SHttpMsg* msg) { + if (msg == NULL) return; + + taosMemoryFree(msg->server); + taosMemoryFree(msg->cont); + taosMemoryFree(msg); +} +static void httpAsyncCb(uv_async_t* handle) { + SAsyncItem* item = handle->data; + SHttpModule* http = item->pThrd; + + SHttpMsg *msg = NULL, *quitMsg = NULL; + + queue wq; + taosThreadMutexLock(&item->mtx); + QUEUE_MOVE(&item->qmsg, &wq); + taosThreadMutexUnlock(&item->mtx); + + int count = 0; + while (!QUEUE_IS_EMPTY(&wq)) { + queue* h = QUEUE_HEAD(&wq); + QUEUE_REMOVE(h); + msg = QUEUE_DATA(h, SHttpMsg, q); + if (msg->quit) { + quitMsg = msg; + } else { + httpHandleReq(msg); + } + } + if (quitMsg) httpHandleQuit(quitMsg); +} + static FORCE_INLINE void destroyHttpClient(SHttpClient* cli) { taosMemoryFree(cli->wbuf[0].base); taosMemoryFree(cli->wbuf[1].base); @@ -216,88 +217,82 @@ static FORCE_INLINE void destroyHttpClient(SHttpClient* cli) { taosMemoryFree(cli->addr); taosMemoryFree(cli); } + static FORCE_INLINE void clientCloseCb(uv_handle_t* handle) { SHttpClient* cli = handle->data; destroyHttpClient(cli); } + static FORCE_INLINE void clientAllocBuffCb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { SHttpClient* cli = handle->data; buf->base = cli->rbuf; buf->len = HTTP_RECV_BUF_SIZE; } + static FORCE_INLINE void clientRecvCb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { SHttpClient* cli = handle->data; if (nread < 0) { - uError("http-report recv error:%s", uv_err_name(nread)); + tError("http-report recv error:%s", uv_err_name(nread)); } else { - uTrace("http-report succ to recv %d bytes", (int32_t)nread); + tTrace("http-report succ to recv %d bytes", (int32_t)nread); } if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); } } static void clientSentCb(uv_write_t* req, int32_t status) { SHttpClient* cli = req->data; if (status != 0) { - uError("http-report failed to send data, reason: %s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + tError("http-report failed to send data, reason: %s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); } return; } else { - uTrace("http-report succ to send data"); + tTrace("http-report succ to send data"); } status = uv_read_start((uv_stream_t*)&cli->tcp, clientAllocBuffCb, clientRecvCb); if (status != 0) { - uError("http-report failed to recv data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + tError("http-report failed to recv data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); } } } static void clientConnCb(uv_connect_t* req, int32_t status) { SHttpClient* cli = req->data; if (status != 0) { - uError("http-report failed to conn to server, reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + tError("http-report failed to conn to server, reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); } return; } status = uv_write(&cli->req, (uv_stream_t*)&cli->tcp, cli->wbuf, 2, clientSentCb); if (0 != status) { - uError("http-report failed to send data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + tError("http-report failed to send data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); } } } -static FORCE_INLINE int32_t taosBuildDstAddr(const char* server, uint16_t port, struct sockaddr_in* dest) { - uint32_t ip = taosGetIpv4FromFqdn(server); - if (ip == 0xffffffff) { - uError("http-report failed to get http server:%s since %s", server, errno == 0 ? "invalid http server" : terrstr()); +int32_t httpSendQuit() { + SHttpMsg* msg = taosMemoryCalloc(1, sizeof(SHttpMsg)); + msg->quit = 1; + + SHttpModule* load = atomic_load_ptr(&thttp); + if (load == NULL) { + httpDestroyMsg(msg); + tError("http-report already released"); return -1; + } else { + msg->http = load; } - char buf[128] = {0}; - tinet_ntoa(buf, ip); - uv_ip4_addr(buf, port, dest); + transAsyncSend(load->asyncPool, &(msg->q)); return 0; } -int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { - taosThreadOnce(&transHttpInit, transHttpEnvInit); - return taosSendHttpReportImpl(server, port, pCont, contLen, flag); -} + static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { SHttpMsg* msg = taosMemoryMalloc(sizeof(SHttpMsg)); @@ -307,15 +302,49 @@ static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* p memcpy(msg->cont, pCont, contLen); msg->len = contLen; msg->flag = flag; + msg->quit = 0; + + SHttpModule* load = atomic_load_ptr(&thttp); + if (load == NULL) { + httpDestroyMsg(msg); + tError("http-report already released"); + return -1; + } else { + msg->http = load; + transAsyncSend(load->asyncPool, &(msg->q)); + } - transAsyncSend(http->asyncPool, &(msg->q)); return 0; } + +static void httpDestroyClientCb(uv_handle_t* handle) { + SHttpClient* http = handle->data; + destroyHttpClient(http); +} +static void httpWalkCb(uv_handle_t* handle, void* arg) { + // impl later + if (!uv_is_closing(handle)) { + uv_handle_type type = uv_handle_get_type(handle); + if (uv_handle_get_type(handle) == UV_TCP) { + uv_close(handle, httpDestroyClientCb); + } else { + uv_close(handle, NULL); + } + } + return; +} +static void httpHandleQuit(SHttpMsg* msg) { + SHttpModule* http = msg->http; + taosMemoryFree(msg); + + uv_walk(http->loop, httpWalkCb, NULL); +} static void httpHandleReq(SHttpMsg* msg) { + SHttpModule* http = msg->http; + struct sockaddr_in dest = {0}; - if (taosBuildDstAddr(msg->server, msg->port, &dest) < 0) { - httpDestroyMsg(msg); - return; + if (taosBuildDstAddr(msg->server, msg->port + 1, &dest) < 0) { + goto END; } if (msg->flag == HTTP_GZIP) { int32_t dstLen = taosCompressHttpRport(msg->cont, msg->len); @@ -324,11 +353,18 @@ static void httpHandleReq(SHttpMsg* msg) { } else { msg->flag = HTTP_FLAT; } + if (dstLen < 0) { + goto END; + } } int32_t len = 2048; char* header = taosMemoryCalloc(1, len); int32_t headLen = taosBuildHttpHeader(msg->server, msg->len, header, len, msg->flag); + if (headLen < 0) { + taosMemoryFree(header); + goto END; + } uv_buf_t* wb = taosMemoryCalloc(2, sizeof(uv_buf_t)); wb[0] = uv_buf_init((char*)header, strlen(header)); // heap var @@ -347,20 +383,64 @@ static void httpHandleReq(SHttpMsg* msg) { taosMemoryFree(msg); uv_tcp_init(http->loop, &cli->tcp); + // set up timeout to avoid stuck; int32_t fd = taosCreateSocketWithTimeout(5); - - int ret = uv_tcp_open((uv_tcp_t*)&cli->tcp, fd); + int ret = uv_tcp_open((uv_tcp_t*)&cli->tcp, fd); if (ret != 0) { - uError("http-report failed to open socket, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); + tError("http-report failed to open socket, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); destroyHttpClient(cli); return; } ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&cli->dest, clientConnCb); if (ret != 0) { - uError("http-report failed to connect to http-server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, + tError("http-report failed to connect to http-server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); destroyHttpClient(cli); } + return; + +END: + tError("http-report failed to report, reason: %s, addr: %s:%d", terrstr(), msg->server, msg->port); + httpDestroyMsg(msg); +} + +int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { + taosThreadOnce(&transHttpInit, transHttpEnvInit); + return taosSendHttpReportImpl(server, port, pCont, contLen, flag); +} + +static void transHttpEnvInit() { + SHttpModule* http = taosMemoryMalloc(sizeof(SHttpModule)); + + http->loop = taosMemoryMalloc(sizeof(uv_loop_t)); + uv_loop_init(http->loop); + + http->asyncPool = transAsyncPoolCreate(http->loop, 1, http, httpAsyncCb); + + int err = taosThreadCreate(&http->thread, NULL, httpThread, (void*)http); + if (err != 0) { + taosMemoryFree(http->loop); + taosMemoryFree(http); + http = NULL; + } + atomic_store_ptr(&thttp, http); +} + +void transHttpEnvDestroy() { + SHttpModule* load = atomic_load_ptr(&thttp); + if (load == NULL) { + return; + } + httpSendQuit(); + taosThreadJoin(load->thread, NULL); + + TRANS_DESTROY_ASYNC_POOL_MSG(load->asyncPool, SHttpMsg, httpDestroyMsg); + transAsyncPoolDestroy(load->asyncPool); + uv_loop_close(load->loop); + taosMemoryFree(load->loop); + taosMemoryFree(load); + + atomic_store_ptr(&thttp, NULL); } diff --git a/source/libs/transport/src/trans.c b/source/libs/transport/src/trans.c index 756a8ff2cf..d3db4879d1 100644 --- a/source/libs/transport/src/trans.c +++ b/source/libs/transport/src/trans.c @@ -172,6 +172,8 @@ int32_t rpcInit() { } void rpcCleanup(void) { transCleanup(); + transHttpEnvDestroy(); + return; } From d21d88becc44ec8789b8acda81fb6af1ff3c5c60 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Mon, 31 Oct 2022 18:50:19 +0800 Subject: [PATCH 68/81] opt http module --- source/libs/transport/src/thttp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c index 9526ad472a..00854b5ee5 100644 --- a/source/libs/transport/src/thttp.c +++ b/source/libs/transport/src/thttp.c @@ -343,7 +343,7 @@ static void httpHandleReq(SHttpMsg* msg) { SHttpModule* http = msg->http; struct sockaddr_in dest = {0}; - if (taosBuildDstAddr(msg->server, msg->port + 1, &dest) < 0) { + if (taosBuildDstAddr(msg->server, msg->port, &dest) < 0) { goto END; } if (msg->flag == HTTP_GZIP) { From ad857047aba317c8f375ae134dd7b463ef29a01b Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Mon, 31 Oct 2022 19:03:49 +0800 Subject: [PATCH 69/81] test:add replica 3 for all testcases and frameworks --- tests/system-test/0-others/udf_cluster.py | 2 +- tests/system-test/2-query/arccos.py | 2 +- tests/system-test/2-query/arcsin.py | 2 +- tests/system-test/2-query/arctan.py | 2 +- tests/system-test/2-query/cos.py | 2 +- tests/system-test/2-query/pow.py | 2 +- tests/system-test/2-query/queryQnode.py | 2 +- tests/system-test/2-query/sin.py | 2 +- tests/system-test/2-query/smaTest.py | 4 ++-- tests/system-test/2-query/sqrt.py | 2 +- tests/system-test/2-query/tan.py | 2 +- tests/system-test/6-cluster/5dnode1mnode.py | 2 +- tests/system-test/6-cluster/5dnode2mnode.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeDrop.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeDropInsert.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py | 2 +- .../6-cluster/5dnode3mnodeRestartDnodeInsertData.py | 2 +- .../6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py | 2 +- .../6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py | 2 +- .../6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py | 2 +- .../6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py | 2 +- .../6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py | 4 ++-- .../5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py | 6 +++--- .../6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py | 2 +- .../6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py | 2 +- .../6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py | 2 +- .../6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeStop.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeStopConnect.py | 2 +- .../6-cluster/5dnode3mnodeStopFollowerLeader.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeStopInsert.py | 2 +- tests/system-test/6-cluster/5dnode3mnodeStopLoop.py | 2 +- .../vnode/4dnode1mnode_basic_createDb_replica1.py | 2 +- .../vnode/4dnode1mnode_basic_replica1_insertdatas.py | 2 +- .../4dnode1mnode_basic_replica1_insertdatas_querys.py | 2 +- .../vnode/4dnode1mnode_basic_replica3_insertdatas.py | 2 +- ...de_basic_replica3_insertdatas_force_stop_all_dnodes.py | 2 +- .../4dnode1mnode_basic_replica3_insertdatas_querys.py | 2 +- ..._replica3_insertdatas_querys_loop_restart_all_vnode.py | 2 +- ...c_replica3_insertdatas_querys_loop_restart_follower.py | 2 +- ...sic_replica3_insertdatas_querys_loop_restart_leader.py | 2 +- ...de1mnode_basic_replica3_insertdatas_stop_all_dnodes.py | 2 +- ...mnode_basic_replica3_insertdatas_stop_follower_sync.py | 2 +- ...ode_basic_replica3_insertdatas_stop_follower_unsync.py | 2 +- ...eplica3_insertdatas_stop_follower_unsync_force_stop.py | 2 +- ...4dnode1mnode_basic_replica3_insertdatas_stop_leader.py | 2 +- ..._basic_replica3_insertdatas_stop_leader_forece_stop.py | 2 +- ...node1mnode_basic_replica3_mnode3_insertdatas_querys.py | 2 +- ...dnode1mnode_basic_replica3_querydatas_stop_follower.py | 2 +- ..._basic_replica3_querydatas_stop_follower_force_stop.py | 2 +- .../4dnode1mnode_basic_replica3_querydatas_stop_leader.py | 2 +- ...de_basic_replica3_querydatas_stop_leader_force_stop.py | 2 +- .../vnode/4dnode1mnode_basic_replica3_vgroups.py | 2 +- .../vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py | 2 +- tests/system-test/7-tmq/subscribeDb.py | 8 ++++---- 57 files changed, 64 insertions(+), 64 deletions(-) diff --git a/tests/system-test/0-others/udf_cluster.py b/tests/system-test/0-others/udf_cluster.py index 1ca1738332..a20bc128a2 100644 --- a/tests/system-test/0-others/udf_cluster.py +++ b/tests/system-test/0-others/udf_cluster.py @@ -19,7 +19,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None self.depoly_cluster(3) diff --git a/tests/system-test/2-query/arccos.py b/tests/system-test/2-query/arccos.py index 1787521517..69e42a3911 100644 --- a/tests/system-test/2-query/arccos.py +++ b/tests/system-test/2-query/arccos.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/arcsin.py b/tests/system-test/2-query/arcsin.py index 127419029b..57d08d0587 100644 --- a/tests/system-test/2-query/arcsin.py +++ b/tests/system-test/2-query/arcsin.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/arctan.py b/tests/system-test/2-query/arctan.py index e6ae16b8d9..64a29f7ccb 100644 --- a/tests/system-test/2-query/arctan.py +++ b/tests/system-test/2-query/arctan.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/cos.py b/tests/system-test/2-query/cos.py index ab6814727e..2675c34266 100644 --- a/tests/system-test/2-query/cos.py +++ b/tests/system-test/2-query/cos.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/pow.py b/tests/system-test/2-query/pow.py index 3a795ed25d..f803da6176 100644 --- a/tests/system-test/2-query/pow.py +++ b/tests/system-test/2-query/pow.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/queryQnode.py b/tests/system-test/2-query/queryQnode.py index 7bd573d7fc..e3f4732c08 100644 --- a/tests/system-test/2-query/queryQnode.py +++ b/tests/system-test/2-query/queryQnode.py @@ -64,7 +64,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql=True): + def init(self, conn, logSql=True, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/2-query/sin.py b/tests/system-test/2-query/sin.py index a1ba335487..46b1ac50ae 100644 --- a/tests/system-test/2-query/sin.py +++ b/tests/system-test/2-query/sin.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/smaTest.py b/tests/system-test/2-query/smaTest.py index 66a89d8701..20ed103f8e 100644 --- a/tests/system-test/2-query/smaTest.py +++ b/tests/system-test/2-query/smaTest.py @@ -78,7 +78,7 @@ class TDTestCase: def insert_data(self, tbname, ts_start, count): pre_insert = "insert into %s values"%tbname sql = pre_insert - tdLog.debug("doing insert table %s rows=%d ..."%(tbname, count)) + tdLog.debug("insert table %s rows=%d ..."%(tbname, count)) for i in range(count): sql += " (%d,%d)"%(ts_start + i*1000, i ) if i >0 and i%30000 == 0: @@ -94,7 +94,7 @@ class TDTestCase: def insert_data1(self, tbname, ts_start, count): pre_insert = "insert into %s values"%tbname sql = pre_insert - tdLog.debug("doing insert table %s rows=%d ..."%(tbname, count)) + tdLog.debug("insert table %s rows=%d ..."%(tbname, count)) for i in range(count): sql += " (%d,%d,%d)"%(ts_start + i*1000, i , i+1) if i >0 and i%30000 == 0: diff --git a/tests/system-test/2-query/sqrt.py b/tests/system-test/2-query/sqrt.py index 9597375885..4784b71fc6 100644 --- a/tests/system-test/2-query/sqrt.py +++ b/tests/system-test/2-query/sqrt.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/tan.py b/tests/system-test/2-query/tan.py index 683cee37ff..203f149712 100644 --- a/tests/system-test/2-query/tan.py +++ b/tests/system-test/2-query/tan.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode1mnode.py b/tests/system-test/6-cluster/5dnode1mnode.py index 367d0bfbd7..f2c0bf9902 100644 --- a/tests/system-test/6-cluster/5dnode1mnode.py +++ b/tests/system-test/6-cluster/5dnode1mnode.py @@ -21,7 +21,7 @@ class MyDnodes(TDDnodes): class TDTestCase: noConn = True - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None self.depoly_cluster(5) diff --git a/tests/system-test/6-cluster/5dnode2mnode.py b/tests/system-test/6-cluster/5dnode2mnode.py index 7cbadde8bf..6054ef69f8 100644 --- a/tests/system-test/6-cluster/5dnode2mnode.py +++ b/tests/system-test/6-cluster/5dnode2mnode.py @@ -20,7 +20,7 @@ from clusterCommonCreate import * from clusterCommonCheck import * class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py b/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py index 909decc195..e591114ef4 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py +++ b/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeDrop.py b/tests/system-test/6-cluster/5dnode3mnodeDrop.py index 33dc3ebaac..52f734b534 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeDrop.py +++ b/tests/system-test/6-cluster/5dnode3mnodeDrop.py @@ -22,7 +22,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None diff --git a/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py b/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py index 74a7c32206..2b013704f2 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py +++ b/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py @@ -26,7 +26,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None self.ts = 1500000000000 diff --git a/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py b/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py index 2e107561b5..1590a5948b 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py +++ b/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py index 3fe6a689cb..52c9773544 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py +++ b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py index 0d56729280..4d641b0e27 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py +++ b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py index a215a74559..eba456d1c2 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py index 9df1ffb3df..1949157191 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py index caaf1dd898..382144b69c 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py index 575e2ef712..9acb313203 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql,replicaVar=1): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) @@ -171,7 +171,7 @@ class TDTestCase: def run(self): # print(self.master_dnode.cfgDict) - self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=1,stopRole='mnode') + self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=1,stopRole='mnode') def stop(self): tdSql.close() diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py index d24c749515..e8e3b217a1 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py @@ -25,12 +25,12 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql, replicaVar=1): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) self.host = socket.gethostname() - + self.replicaVar = replicaVar def getBuildPath(self): selfPath = os.path.dirname(os.path.realpath(__file__)) @@ -88,7 +88,7 @@ class TDTestCase: vnodeNumbers = int(dnodeNumbers-mnodeNums) allDbNumbers=(paraDict['dbNumbers']*restartNumbers) allStbNumbers=(paraDict['stbNumbers']*restartNumbers) - + paraDict['replica'] = self.replicaVar tdLog.info("first check dnode and mnode") tdSql.query("select * from information_schema.ins_dnodes;") tdSql.checkData(0,1,'%s:6030'%self.host) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py index 9a94632a12..14ae1a8a48 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py index 6fbe262b8e..056e3225e8 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py index 56bafe8abc..5fd79e4296 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py b/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py index 539e5e38a7..a34895ff42 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") # tdSql.init(conn.cursor()) # self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStop.py b/tests/system-test/6-cluster/5dnode3mnodeStop.py index c43d41199b..531688710a 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStop.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStop.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py b/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py index 584dd645f6..76ff746b2e 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py b/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py index 5638b01070..142f88c0d9 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py @@ -25,7 +25,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py b/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py index 6daa4c260a..afa1c3dcc3 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py b/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py index dcd9e56a64..780255604d 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py @@ -26,7 +26,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py b/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py index 1644686568..97134ac2d1 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py index 8d07dc6b38..435701bd8f 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py @@ -18,7 +18,7 @@ import subprocess sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py index 470278cd8e..f0d5e8328a 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py @@ -18,7 +18,7 @@ import subprocess sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py index 0484ee9f33..8d0801500e 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py index 60e3167304..379615d358 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py @@ -18,7 +18,7 @@ import subprocess sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py index 0557836ab2..240169dbb6 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py index 8523ac72a4..25b5de5afa 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py index 8e7ac388fb..ab5359601a 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py index 37c00c4b8d..4eec3c348d 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py index f1ff805f08..0fe18ab705 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py index 07231555fe..75a7ca51b6 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py index 80d367db01..e9c63151f3 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py index 55a2318817..5dd57542b3 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py index 489e2acd43..fd00e89216 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py index ee0ab26f4c..f98e2c07b5 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py @@ -19,7 +19,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py index c7895abe04..5be2b67c31 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py @@ -19,7 +19,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py index aca188824d..e8fa3099e9 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py index fa69643079..21d0c2d2b8 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py index 0ef8db9c0f..ff6ce98c81 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py index f26df70c4e..e36f488c2b 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py index 2f57af39b0..050b98024d 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py index 221053d165..d086743306 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py @@ -17,7 +17,7 @@ import socket import subprocess class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py index 05ec8efcd2..b9d3afa765 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py @@ -19,7 +19,7 @@ import socket import subprocess class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/7-tmq/subscribeDb.py b/tests/system-test/7-tmq/subscribeDb.py index f738f816c7..3790bd1690 100644 --- a/tests/system-test/7-tmq/subscribeDb.py +++ b/tests/system-test/7-tmq/subscribeDb.py @@ -209,7 +209,7 @@ class TDTestCase: # wait for data ready prepareEnvThread.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("1-insert process end, and start to check consume result") expectRows = 1 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 @@ -310,7 +310,7 @@ class TDTestCase: # wait for data ready prepareEnvThread.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("2-insert process end, and start to check consume result") expectRows = 2 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 @@ -379,7 +379,7 @@ class TDTestCase: # wait for data ready prepareEnvThread.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("3-insert process end, and start to check consume result") expectRows = 2 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 @@ -459,7 +459,7 @@ class TDTestCase: prepareEnvThread.join() prepareEnvThread2.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("4-insert process end, and start to check consume result") expectRows = 1 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 From ece67e2e0cf071b5bc9a1c759e7960578fbfea8d Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Mon, 31 Oct 2022 19:09:08 +0800 Subject: [PATCH 70/81] test:add replica 3 for all testcases and frameworks --- .../taosbenchmark/auto_create_table_json.py | 2 +- .../5-taos-tools/taosbenchmark/commandline.py | 2 +- .../taosbenchmark/custom_col_tag.py | 2 +- .../taosbenchmark/default_json.py | 2 +- .../5-taos-tools/taosbenchmark/demo.py | 2 +- .../taosbenchmark/insert_alltypes_json.py | 2 +- .../taosbenchmark/invalid_commandline.py | 2 +- .../5-taos-tools/taosbenchmark/json_tag.py | 2 +- .../taosbenchmark/limit_offset_json.py | 2 +- .../5-taos-tools/taosbenchmark/query_json.py | 2 +- .../taosbenchmark/sample_csv_json.py | 2 +- .../taosbenchmark/sml_interlace.py | 2 +- .../taosbenchmark/sml_json_alltypes.py | 2 +- .../taosbenchmark/sml_telnet_alltypes.py | 2 +- .../taosbenchmark/taosadapter_json.py | 2 +- .../5-taos-tools/taosbenchmark/telnet_tcp.py | 2 +- .../taosdump/taosdumpTestInspect.py | 2 +- .../taosdump/taosdumpTestTypeBigInt.py | 2 +- .../taosdump/taosdumpTestTypeBinary.py | 2 +- .../taosdump/taosdumpTestTypeBool.py | 2 +- .../taosdump/taosdumpTestTypeDouble.py | 2 +- .../taosdump/taosdumpTestTypeFloat.py | 2 +- .../taosdump/taosdumpTestTypeInt.py | 2 +- .../taosdump/taosdumpTestTypeJson.py | 2 +- .../taosdump/taosdumpTestTypeSmallInt.py | 2 +- .../taosdump/taosdumpTestTypeTinyInt.py | 2 +- .../taosdumpTestTypeUnsignedBigInt.py | 2 +- .../taosdump/taosdumpTestTypeUnsignedInt.py | 2 +- .../taosdumpTestTypeUnsignedSmallInt.py | 2 +- .../taosdumpTestTypeUnsignedTinyInt.py | 2 +- tests/system-test/fulltest.sh | 61 ++++++++++--------- 31 files changed, 61 insertions(+), 60 deletions(-) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py index 8509136a34..23b6341e66 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py @@ -25,7 +25,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py b/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py index 1d21c517e6..4473ff2c2d 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py b/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py index 9104d63096..4f8e94a887 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py index c68375894c..95afdc413e 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py @@ -23,7 +23,7 @@ class TDTestCase: [TD-11510] taosBenchmark test cases """ - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/demo.py b/tests/develop-test/5-taos-tools/taosbenchmark/demo.py index a44ad4c1d0..90d0ffd8b1 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/demo.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/demo.py @@ -27,7 +27,7 @@ class TDTestCase: """ return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py index 38332f7b64..7437b46353 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py b/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py index ebddff5643..a706967bc1 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py b/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py index 5f25e0229b..3b9123974f 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py index 47a60e4757..dbddb840ca 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py index 84d9433967..7f0b082e33 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py @@ -29,7 +29,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py index 772bb11df4..5b59d84b79 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py b/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py index fec9376529..ee7bb8a925 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py b/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py index 557d2a4884..d7ccdc2716 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py b/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py index 8ff56b5339..7b0f5d1672 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py index 3f0a05b665..1588b4077c 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py @@ -25,7 +25,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py b/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py index 7aa0575f77..b8d4c35e58 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py @@ -25,7 +25,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py index 33ba4034ec..09976953e1 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py index 75885edf9f..7eaddd9e2d 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py index 41d4ba128d..c70748e9c2 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py index 043fb49af3..eb4b8a364a 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py index 1eaa2bbfff..70501965fe 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py @@ -28,7 +28,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py index 4373aa5669..5e551a373c 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py @@ -28,7 +28,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py index 45009a716a..f2d4c4f814 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py index d1c4313c40..5971902cb6 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py index 941de25683..f2dca23488 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py index e5392d38fe..6f2781d645 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py index dd8dd5d76d..b226204654 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py index eacd1bb7dd..766110d74e 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py index ea362ad2b4..242681b0fc 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py index a3ffc13d62..d512cba97c 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/system-test/fulltest.sh b/tests/system-test/fulltest.sh index 6c717f347c..8529f8d99b 100755 --- a/tests/system-test/fulltest.sh +++ b/tests/system-test/fulltest.sh @@ -2,35 +2,35 @@ set -e set -x -# python3 ./test.py -f 0-others/taosShell.py -# python3 ./test.py -f 0-others/taosShellError.py -# python3 ./test.py -f 0-others/taosShellNetChk.py -# python3 ./test.py -f 0-others/telemetry.py -# python3 ./test.py -f 0-others/taosdMonitor.py -# python3 ./test.py -f 0-others/udfTest.py -# python3 ./test.py -f 0-others/udf_create.py -# python3 ./test.py -f 0-others/udf_restart_taosd.py -# python3 ./test.py -f 0-others/cachemodel.py -# python3 ./test.py -f 0-others/udf_cfg1.py -# python3 ./test.py -f 0-others/udf_cfg2.py -# python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3 -# python3 ./test.py -f 0-others/sysinfo.py -# python3 ./test.py -f 0-others/user_control.py -# python3 ./test.py -f 0-others/fsync.py -# python3 ./test.py -f 0-others/compatibility.py -# python3 ./test.py -f 1-insert/alter_database.py -# python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py -# python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py -# python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py -# python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py -# python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py -# python3 ./test.py -f 1-insert/alter_stable.py -# python3 ./test.py -f 1-insert/alter_table.py -# python3 ./test.py -f 1-insert/insertWithMoreVgroup.py -# python3 ./test.py -f 1-insert/table_comment.py -# python3 ./test.py -f 1-insert/time_range_wise.py -# python3 ./test.py -f 1-insert/block_wise.py -# python3 ./test.py -f 1-insert/create_retentions.py +python3 ./test.py -f 0-others/taosShell.py +python3 ./test.py -f 0-others/taosShellError.py +python3 ./test.py -f 0-others/taosShellNetChk.py +python3 ./test.py -f 0-others/telemetry.py +python3 ./test.py -f 0-others/taosdMonitor.py +python3 ./test.py -f 0-others/udfTest.py +python3 ./test.py -f 0-others/udf_create.py +python3 ./test.py -f 0-others/udf_restart_taosd.py +python3 ./test.py -f 0-others/cachemodel.py +python3 ./test.py -f 0-others/udf_cfg1.py +python3 ./test.py -f 0-others/udf_cfg2.py +python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3 +python3 ./test.py -f 0-others/sysinfo.py +python3 ./test.py -f 0-others/user_control.py +python3 ./test.py -f 0-others/fsync.py +python3 ./test.py -f 0-others/compatibility.py +python3 ./test.py -f 1-insert/alter_database.py +python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py +python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py +python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py +python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py +python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py +python3 ./test.py -f 1-insert/alter_stable.py +python3 ./test.py -f 1-insert/alter_table.py +python3 ./test.py -f 1-insert/insertWithMoreVgroup.py +python3 ./test.py -f 1-insert/table_comment.py +python3 ./test.py -f 1-insert/time_range_wise.py +python3 ./test.py -f 1-insert/block_wise.py +python3 ./test.py -f 1-insert/create_retentions.py python3 ./test.py -f 1-insert/table_param_ttl.py python3 ./test.py -f 1-insert/mutil_stage.py python3 ./test.py -f 1-insert/table_param_ttl.py -R @@ -239,7 +239,8 @@ python3 ./test.py -f 6-cluster/5dnode3mnodeStopLoop.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 5 -M 3 -python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py -N 5 -M 3 +python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py -N 6 -M 3 +python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py -N 6 -M 3 -n 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py -N 5 -M 3 From 8ba93cf9519b04f986867f1d61dcc72e871ee6ca Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Mon, 31 Oct 2022 19:18:41 +0800 Subject: [PATCH 71/81] test:add replica 3 for all testcases and frameworks --- tests/develop-test/test.py | 81 +++++++++++++++++++++++++++++--------- 1 file changed, 63 insertions(+), 18 deletions(-) diff --git a/tests/develop-test/test.py b/tests/develop-test/test.py index 5dc6139410..b25bda4a3b 100644 --- a/tests/develop-test/test.py +++ b/tests/develop-test/test.py @@ -72,8 +72,9 @@ if __name__ == "__main__": queryPolicy = 1 createDnodeNums = 1 restful = False - opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:', [ - 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate']) + replicaVar = 1 + opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:n:', [ + 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate','replicaVar']) for key, value in opts: if key in ['-h', '--help']: tdLog.printNoPrefix( @@ -95,8 +96,7 @@ if __name__ == "__main__": tdLog.printNoPrefix('-C create Dnode Numbers in one cluster') tdLog.printNoPrefix('-R restful realization form') tdLog.printNoPrefix('-D taosadapter update cfg dict ') - - + tdLog.printNoPrefix('-n the number of replicas') sys.exit(0) if key in ['-r', '--restart']: @@ -168,6 +168,9 @@ if __name__ == "__main__": print('adapter cfg update convert fail.') sys.exit(0) + if key in ['-n', '--replicaVar']: + replicaVar = value + if not execCmd == "": if restful: tAdapter.init(deployPath) @@ -194,7 +197,7 @@ if __name__ == "__main__": processID = subprocess.check_output(psCmd, shell=True) for port in range(6030, 6041): - usePortPID = "lsof -i tcp:%d | grep LISTEn | awk '{print $2}'" % port + usePortPID = "lsof -i tcp:%d | grep LISTEN | awk '{print $2}'" % port processID = subprocess.check_output(usePortPID, shell=True) if processID: @@ -206,11 +209,13 @@ if __name__ == "__main__": time.sleep(2) if restful: - toBeKilled = "taosadapter" + toBeKilled = "taosadapt" - killCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -TERM > /dev/null 2>&1" % toBeKilled + # killCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -TERM > /dev/null 2>&1" % toBeKilled + killCmd = f"pkill {toBeKilled}" psCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}'" % toBeKilled + # psCmd = f"pgrep {toBeKilled}" processID = subprocess.check_output(psCmd, shell=True) while(processID): @@ -218,15 +223,15 @@ if __name__ == "__main__": time.sleep(1) processID = subprocess.check_output(psCmd, shell=True) - for port in range(6030, 6041): - usePortPID = "lsof -i tcp:%d | grep LISTEn | awk '{print $2}'" % port - processID = subprocess.check_output(usePortPID, shell=True) + port = 6041 + usePortPID = f"lsof -i tcp:{port} | grep LISTEN | awk '{{print $2}}'" + processID = subprocess.check_output(usePortPID, shell=True) - if processID: - killCmd = "kill -TERM %s" % processID - os.system(killCmd) - fuserCmd = "fuser -k -n tcp %d" % port - os.system(fuserCmd) + if processID: + killCmd = f"kill -TERM {processID}" + os.system(killCmd) + fuserCmd = f"fuser -k -n tcp {port}" + os.system(fuserCmd) tdLog.info('stop taosadapter') @@ -319,7 +324,7 @@ if __name__ == "__main__": for dnode in tdDnodes.dnodes: tdDnodes.starttaosd(dnode.index) tdCases.logSql(logSql) - + if restful: tAdapter.deploy(adapter_cfg_dict) tAdapter.start() @@ -339,6 +344,26 @@ if __name__ == "__main__": print("check dnode ready") except Exception as r: print(r) + if queryPolicy != 1: + queryPolicy=int(queryPolicy) + if restful: + conn = taosrest.connect(url=f"http://{host}:6041") + else: + conn = taos.connect(host,config=tdDnodes.getSimCfgPath()) + + cursor = conn.cursor() + cursor.execute("create qnode on dnode 1") + cursor.execute(f'alter local "queryPolicy" "{queryPolicy}"') + cursor.execute("show local variables") + res = cursor.fetchall() + for i in range(cursor.rowcount): + if res[i][0] == "queryPolicy" : + if int(res[i][1]) == int(queryPolicy): + tdLog.success(f'alter queryPolicy to {queryPolicy} successfully') + else: + tdLog.debug(res) + tdLog.exit(f"alter queryPolicy to {queryPolicy} failed") + if ucase is not None and hasattr(ucase, 'noConn') and ucase.noConn == True: conn = None else: @@ -453,6 +478,26 @@ if __name__ == "__main__": except Exception as r: print(r) + if queryPolicy != 1: + queryPolicy=int(queryPolicy) + if restful: + conn = taosrest.connect(url=f"http://{host}:6041") + else: + conn = taos.connect(host,config=tdDnodes.getSimCfgPath()) + + cursor = conn.cursor() + cursor.execute("create qnode on dnode 1") + cursor.execute(f'alter local "queryPolicy" "{queryPolicy}"') + cursor.execute("show local variables") + res = cursor.fetchall() + for i in range(cursor.rowcount): + if res[i][0] == "queryPolicy" : + if int(res[i][1]) == int(queryPolicy): + tdLog.success(f'alter queryPolicy to {queryPolicy} successfully') + else: + tdLog.debug(res) + tdLog.exit(f"alter queryPolicy to {queryPolicy} failed") + if testCluster: tdLog.info("Procedures for testing cluster") @@ -470,7 +515,7 @@ if __name__ == "__main__": if fileName == "all": tdCases.runAllLinux(conn) else: - tdCases.runOneLinux(conn, fileName) + tdCases.runOneLinux(conn, fileName, replicaVar) if restart: if fileName == "all": @@ -487,7 +532,7 @@ if __name__ == "__main__": conn = taosrest.connect(url=f"http://{host}:6041") tdLog.info("Procedures for tdengine deployed in %s" % (host)) tdLog.info("query test after taosd restart") - tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py") + tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py", replicaVar) else: tdLog.info("not need to query") From 1ad604a5f917b0861df043b49fb9504377a5b93e Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 31 Oct 2022 19:57:27 +0800 Subject: [PATCH 72/81] enh: force drop dnode --- source/dnode/mnode/impl/src/mndStb.c | 2 +- source/dnode/vnode/src/vnd/vnodeSvr.c | 2 +- source/libs/sync/src/syncMain.c | 7 +- tests/script/tsim/dnode/drop_dnode_force.sim | 114 +++++++++++++------ 4 files changed, 85 insertions(+), 40 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index 4b1906ba70..641a8af437 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -2029,7 +2029,7 @@ static int32_t mndSetDropStbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj * action.pCont = pReq; action.contLen = contLen; action.msgType = TDMT_VND_DROP_STB; - action.acceptableCode = TSDB_CODE_VND_TB_NOT_EXIST; + action.acceptableCode = TSDB_CODE_TDB_STB_NOT_EXIST; if (mndTransAppendRedoAction(pTrans, &action) != 0) { taosMemoryFree(pReq); sdbCancelFetch(pSdb, pIter); diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index 4579f0c7a4..c48b5626b3 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -284,7 +284,7 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRp break; } - vTrace("vgId:%d, process %s request success, index:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), version); + vTrace("vgId:%d, process %s request, code:0x%x index:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), pRsp->code, version); walApplyVer(pVnode->pWal, version); diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 02e5c643a4..9e060c27c8 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -47,6 +47,7 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId); static int32_t syncNodeEqNoop(SSyncNode* ths); static int32_t syncNodeAppendNoop(SSyncNode* ths); static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId); +static bool syncIsConfigChanged(const SSyncCfg* pOldCfg, const SSyncCfg* pNewCfg); // process message ---- int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg); @@ -1132,7 +1133,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo) { sError("vgId:%d, failed to open raft cfg file at %s", pSyncNode->vgId, pSyncNode->configPath); goto _error; } - if (pSyncInfo->syncCfg.replicaNum > 0 && pSyncInfo->syncCfg.replicaNum != pSyncNode->pRaftCfg->cfg.replicaNum) { + + if (syncIsConfigChanged(&pSyncNode->pRaftCfg->cfg, &pSyncInfo->syncCfg)) { sInfo("vgId:%d, use sync config from input options and write to cfg file", pSyncNode->vgId); pSyncNode->pRaftCfg->cfg = pSyncInfo->syncCfg; if (raftCfgPersist(pSyncNode->pRaftCfg) != 0) { @@ -2095,12 +2097,11 @@ static bool syncIsConfigChanged(const SSyncCfg* pOldCfg, const SSyncCfg* pNewCfg void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* pNewConfig, SyncIndex lastConfigChangeIndex) { SSyncCfg oldConfig = pSyncNode->pRaftCfg->cfg; -#if 1 if (!syncIsConfigChanged(&oldConfig, pNewConfig)) { sInfo("vgId:1, sync not reconfig since not changed"); return; } -#endif + pSyncNode->pRaftCfg->cfg = *pNewConfig; pSyncNode->pRaftCfg->lastConfigIndex = lastConfigChangeIndex; diff --git a/tests/script/tsim/dnode/drop_dnode_force.sim b/tests/script/tsim/dnode/drop_dnode_force.sim index 0263c07065..10edacf3aa 100644 --- a/tests/script/tsim/dnode/drop_dnode_force.sim +++ b/tests/script/tsim/dnode/drop_dnode_force.sim @@ -50,21 +50,26 @@ endi print =============== step2 create database sql create database d1 vgroups 1 replica 3 sql use d1 -sql create table d1.st (ts timestamp, i int) tags (j int) -sql create table d1.c0 using st tags(0) -sql create table d1.c1 using st tags(1) -sql create table d1.c2 using st tags(2) -sql create table d1.c3 using st tags(3) -sql create table d1.c4 using st tags(4) -sql create table d1.c5 using st tags(5) -sql create table d1.c6 using st tags(6) -sql create table d1.c7 using st tags(7) -sql create table d1.c8 using st tags(8) -sql create table d1.c9 using st tags(9) +sql create table d1.st0 (ts timestamp, i int) tags (j int) +sql create table d1.c0 using st0 tags(0) +sql create table d1.c1 using st0 tags(1) +sql create table d1.c2 using st0 tags(2) +sql create table d1.c3 using st0 tags(3) +sql create table d1.c4 using st0 tags(4) +sql create table d1.c5 using st0 tags(5) +sql create table d1.c6 using st0 tags(6) +sql create table d1.c7 using st0 tags(7) +sql create table d1.c8 using st0 tags(8) +sql create table d1.c9 using st0 tags(9) sql show d1.tables if $rows != 10 then return -1 endi +print d1.rows ===> $rows +sql select * from information_schema.ins_tables where stable_name = 'st0' and db_name = 'd1' +if $rows != 10 then + return -1 +endi sql create database d2 vgroups 3 replica 1 sql use d2 @@ -79,10 +84,18 @@ sql create table d2.c16 using st1 tags(6) sql create table d2.c17 using st1 tags(7) sql create table d2.c18 using st1 tags(8) sql create table d2.c19 using st1 tags(9) +sql create table d2.c190 using st1 tags(9) sql show d2.tables -if $rows != 10 then +if $rows != 11 then return -1 endi +sql reset query cache +sql select * from information_schema.ins_tables where stable_name = 'st1' and db_name = 'd2' +print d2.st1.tables ===> $rows +if $rows != 11 then + return -1 +endi + sql create table d2.st2 (ts timestamp, i int) tags (j int) sql create table d2.c20 using st2 tags(0) sql create table d2.c21 using st2 tags(1) @@ -94,8 +107,16 @@ sql create table d2.c26 using st2 tags(6) sql create table d2.c27 using st2 tags(7) sql create table d2.c28 using st2 tags(8) sql create table d2.c29 using st2 tags(9) +sql create table d2.c290 using st2 tags(9) +sql create table d2.c291 using st2 tags(9) sql show d2.tables -if $rows != 20 then +if $rows != 23 then + return -1 +endi +sql reset query cache +sql select * from information_schema.ins_tables where stable_name = 'st2' and db_name = 'd2' +print d2.st2.tables ===> $rows +if $rows != 12 then return -1 endi @@ -204,6 +225,7 @@ if $rows != 0 then endi print =============== step6: check d1 +sql reset query cache sql show d1.tables if $rows != 10 then return -1 @@ -211,31 +233,19 @@ endi print =============== step7: check d2 sql show d2.tables -print ===> rows: $rows remained -if $rows > 10 then +print ===> d2.tables: $rows remained +if $rows > 23 then return -1 endi -$remain = $rows - -return -print =============== step8: alter stable -sql alter table d2.s1 add column b smallint -sql create table d2.c30 using st tags(0) -sql create table d2.c31 using st tags(1) -sql create table d2.c32 using st tags(2) -sql create table d2.c33 using st tags(3) -sql create table d2.c34 using st tags(4) -sql create table d2.c35 using st tags(5) -sql create table d2.c36 using st tags(6) -sql create table d2.c37 using st tags(7) -sql create table d2.c38 using st tags(8) -sql create table d2.c39 using st tags(9) -sql show d2.tables -if $rows != 10 then +if $rows <= 0 then return -1 endi -print =============== step9: drop stable and recreate it +print =============== step8: drop stable and recreate it +sql select * from information_schema.ins_tables where stable_name = 'st2' and db_name = 'd2' +print d2.st2.tables ==> $rows + +sql drop table d2.st2; sql create table d2.st2 (ts timestamp, i int) tags (j int) sql create table d2.c20 using st2 tags(0) sql create table d2.c21 using st2 tags(1) @@ -247,11 +257,45 @@ sql create table d2.c26 using st2 tags(6) sql create table d2.c27 using st2 tags(7) sql create table d2.c28 using st2 tags(8) sql create table d2.c29 using st2 tags(9) -sql show d2.tables -if $rows != 20 then +sql create table d2.c30 using st2 tags(9) +sql create table d2.c31 using st2 tags(9) +sql create table d2.c32 using st2 tags(9) + +sql select * from information_schema.ins_tables where stable_name = 'st2' and db_name = 'd2' +print d2.st2.tables ==> $rows +if $rows != 13 then return -1 endi +print =============== step9: alter stable +return +print By modifying the stable, the missing stable information can be reconstructed in the vnode. +print However, currently, getting the stable meta from the vnode, and return the table not exist +print To handle this, we need to modify the way stable-meta is fetched + +sql select * from information_schema.ins_tables where stable_name = 'st1' and db_name = 'd2' +print d2.st1.tables ==> $rows +$remains = $rows + +sql alter table d2.st1 add column b smallint +return +sql create table d2.c30 using st tags(0) +sql create table d2.c31 using st tags(1) +sql create table d2.c32 using st tags(2) +sql create table d2.c33 using st tags(3) +sql create table d2.c34 using st tags(4) +sql create table d2.c35 using st tags(5) +sql create table d2.c36 using st tags(6) +sql create table d2.c37 using st tags(7) +sql create table d2.c38 using st tags(8) +sql create table d2.c39 using st tags(9) +sql show d2.tables +print d2.st1.tables ==> $rows + +$total = $remains + 10 +if $rows != $total then + return -1 +endi system sh/exec.sh -n dnode1 -s stop -x SIGINT system sh/exec.sh -n dnode2 -s stop -x SIGINT From c609493cbb40e9a561eba0b1db241d6e5bdd6679 Mon Sep 17 00:00:00 2001 From: plum-lihui Date: Mon, 31 Oct 2022 20:57:18 +0800 Subject: [PATCH 73/81] test:modify tmq test case for replica3 --- tests/system-test/7-tmq/tmqSubscribeStb-r3.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py index c5f98bc3a0..f49464f5be 100644 --- a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py +++ b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py @@ -100,7 +100,7 @@ class TDTestCase: # tmqCom.insert_data_with_autoCreateTbl(tsql=tdSql,dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix="ctbx", # ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"], # startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx']) - tmqCom.asyncInsertDataByInterlace(paraDict) + pThread = tmqCom.asyncInsertDataByInterlace(paraDict) tdLog.info("wait some data inserted") exitFlag = 1 @@ -128,6 +128,7 @@ class TDTestCase: cluster.dnodes[4].stoptaosd() cluster.dnodes[4].starttaosd() + pThread.join() # tdLog.info("restart taosd to ensure that the data falls into the disk") # tdSql.query("flush database %s"%(paraDict['dbName'])) return @@ -290,6 +291,7 @@ class TDTestCase: def run(self): self.prepareTestEnv() self.tmqCase1() + self.prepareTestEnv() self.tmqCase2() def stop(self): From 26f1e64f2abe48c05b6847357058a4f470ae0db9 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 31 Oct 2022 21:33:06 +0800 Subject: [PATCH 74/81] enh: force drop dnode --- source/dnode/mnode/impl/src/mndMnode.c | 5 +++-- source/dnode/mnode/impl/src/mndSnode.c | 6 +++--- source/dnode/mnode/impl/src/mndVgroup.c | 2 +- source/dnode/vnode/src/vnd/vnodeSvr.c | 3 ++- source/libs/sync/src/syncMain.c | 6 +++--- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndMnode.c b/source/dnode/mnode/impl/src/mndMnode.c index f9ee2a327e..563b3cd3cf 100644 --- a/source/dnode/mnode/impl/src/mndMnode.c +++ b/source/dnode/mnode/impl/src/mndMnode.c @@ -472,7 +472,8 @@ static int32_t mndSetDropMnodeCommitLogs(SMnode *pMnode, STrans *pTrans, SMnodeO return 0; } -static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj, bool force) { +static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj, + bool force) { SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; SDDropMnodeReq dropReq = {0}; @@ -752,7 +753,7 @@ static void mndReloadSyncConfig(SMnode *pMnode) { mInfo("vgId:1, mnode sync not reconfig since readyMnodes:%d updatingMnodes:%d", readyMnodes, updatingMnodes); return; } - // ASSERT(0); + // ASSERT(0); if (cfg.myIndex == -1) { #if 1 diff --git a/source/dnode/mnode/impl/src/mndSnode.c b/source/dnode/mnode/impl/src/mndSnode.c index e6c8192eec..7753e5b127 100644 --- a/source/dnode/mnode/impl/src/mndSnode.c +++ b/source/dnode/mnode/impl/src/mndSnode.c @@ -388,9 +388,9 @@ _OVER: } static int32_t mndProcessDropSnodeReq(SRpcMsg *pReq) { - SMnode *pMnode = pReq->info.node; - int32_t code = -1; - SSnodeObj *pObj = NULL; + SMnode *pMnode = pReq->info.node; + int32_t code = -1; + SSnodeObj *pObj = NULL; SMDropSnodeReq dropReq = {0}; if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) { diff --git a/source/dnode/mnode/impl/src/mndVgroup.c b/source/dnode/mnode/impl/src/mndVgroup.c index ac13679343..72a4621eae 100644 --- a/source/dnode/mnode/impl/src/mndVgroup.c +++ b/source/dnode/mnode/impl/src/mndVgroup.c @@ -1116,7 +1116,7 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; if (newVg.replica == 1) { - mInfo("vgId:%d, all data is dropped since replica=1 and dnode force dropped, stable should be recreated in this vgroup, but we not support it yet", pVgroup->vgId); + mInfo("vgId:%d, all data is dropped since replica=1", pVgroup->vgId); } } diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index c48b5626b3..4885dc85b1 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -284,7 +284,8 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRp break; } - vTrace("vgId:%d, process %s request, code:0x%x index:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), pRsp->code, version); + vTrace("vgId:%d, process %s request, code:0x%x index:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), pRsp->code, + version); walApplyVer(pVnode->pWal, version); diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 9e060c27c8..f6bca68dc9 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -1133,8 +1133,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo) { sError("vgId:%d, failed to open raft cfg file at %s", pSyncNode->vgId, pSyncNode->configPath); goto _error; } - - if (syncIsConfigChanged(&pSyncNode->pRaftCfg->cfg, &pSyncInfo->syncCfg)) { + + if (pSyncInfo->syncCfg.replicaNum > 0 && syncIsConfigChanged(&pSyncNode->pRaftCfg->cfg, &pSyncInfo->syncCfg)) { sInfo("vgId:%d, use sync config from input options and write to cfg file", pSyncNode->vgId); pSyncNode->pRaftCfg->cfg = pSyncInfo->syncCfg; if (raftCfgPersist(pSyncNode->pRaftCfg) != 0) { @@ -3380,7 +3380,7 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde // ASSERT(code == 0); // ASSERT(pEntry != NULL); if (code != 0 || pEntry == NULL) { - syncNodeErrorLog(ths, "get log entry error"); + syncNodeErrorLog(ths, "get log entry error"); continue; } } From 392564cc7dd44b3ccce1d806ca84acec0a4e4ba9 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 31 Oct 2022 23:40:43 +0800 Subject: [PATCH 75/81] enh: refact syncEnv code --- include/libs/sync/sync.h | 6 +- include/libs/sync/syncTools.h | 4 - include/util/tref.h | 3 +- source/dnode/mnode/impl/src/mndMain.c | 9 +- source/dnode/vnode/src/vnd/vnodeSync.c | 4 +- source/libs/sync/inc/syncEnv.h | 16 +- source/libs/sync/inc/syncInt.h | 8 +- source/libs/sync/src/syncEnv.c | 184 +++++----- source/libs/sync/src/syncMain.c | 320 ++++++------------ source/libs/sync/test/syncElectTest.cpp | 2 +- source/libs/sync/test/syncEncodeTest.cpp | 2 +- source/libs/sync/test/syncEnqTest.cpp | 2 +- source/libs/sync/test/syncEnvTest.cpp | 6 +- source/libs/sync/test/syncIOSendMsgTest.cpp | 2 +- source/libs/sync/test/syncInitTest.cpp | 4 +- source/libs/sync/test/syncPingSelfTest.cpp | 2 +- source/libs/sync/test/syncPingTimerTest.cpp | 2 +- source/libs/sync/test/syncPingTimerTest2.cpp | 2 +- source/libs/sync/test/syncSnapshotTest.cpp | 2 +- .../libs/sync/test/syncVotesGrantedTest.cpp | 2 +- .../libs/sync/test/syncVotesRespondTest.cpp | 2 +- source/libs/sync/test/syncWriteTest.cpp | 2 +- source/util/src/tref.c | 2 +- 23 files changed, 224 insertions(+), 364 deletions(-) diff --git a/include/libs/sync/sync.h b/include/libs/sync/sync.h index 95ee2ca2bc..1a94dcf426 100644 --- a/include/libs/sync/sync.h +++ b/include/libs/sync/sync.h @@ -200,10 +200,10 @@ typedef struct SSyncInfo { int32_t syncInit(); void syncCleanUp(); +bool syncIsInit(); int64_t syncOpen(SSyncInfo* pSyncInfo); void syncStart(int64_t rid); void syncStop(int64_t rid); -int32_t syncSetStandby(int64_t rid); ESyncState syncGetMyRole(int64_t rid); bool syncIsReady(int64_t rid); const char* syncGetMyRoleStr(int64_t rid); @@ -216,7 +216,6 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet); void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet); int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak); // int32_t syncProposeBatch(int64_t rid, SRpcMsg** pMsgPArr, bool* pIsWeakArr, int32_t arrSize); -bool syncEnvIsStart(); const char* syncStr(ESyncState state); bool syncIsRestoreFinish(int64_t rid); int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapshot); @@ -234,6 +233,9 @@ int32_t syncEndSnapshot(int64_t rid); int32_t syncStepDown(int64_t rid, SyncTerm newTerm); +SSyncNode* syncNodeAcquire(int64_t rid); +void syncNodeRelease(SSyncNode* pNode); + #ifdef __cplusplus } #endif diff --git a/include/libs/sync/syncTools.h b/include/libs/sync/syncTools.h index a1cff2b738..9cb8a9d564 100644 --- a/include/libs/sync/syncTools.h +++ b/include/libs/sync/syncTools.h @@ -28,10 +28,6 @@ typedef struct SRaftId { SyncGroupId vgId; } SRaftId; -// ------------------ control ------------------- -SSyncNode* syncNodeAcquire(int64_t rid); -void syncNodeRelease(SSyncNode* pNode); - int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg); int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo); void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb); diff --git a/include/util/tref.h b/include/util/tref.h index c2cc54cb07..c4b2ec8fa7 100644 --- a/include/util/tref.h +++ b/include/util/tref.h @@ -25,7 +25,8 @@ extern "C" { // open a reference set, max is the mod used by hash, fp is the pointer to free resource function // return rsetId which will be used by other APIs. On error, -1 is returned, and terrno is set appropriately -int32_t taosOpenRef(int32_t max, void (*fp)(void *)); +typedef void (*RefFp)(void *); +int32_t taosOpenRef(int32_t max, RefFp fp); // close the reference set, refId is the return value by taosOpenRef // return 0 if success. On error, -1 is returned, and terrno is set appropriately diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index 98a24286f6..53e7b1cd26 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -481,7 +481,7 @@ int32_t mndProcessSyncCtrlMsg(SRpcMsg *pMsg) { mInfo("vgId:%d, process sync ctrl msg", 1); - if (!syncEnvIsStart()) { + if (!syncIsInit()) { mError("failed to process sync msg:%p type:%s since syncEnv stop", pMsg, TMSG_INFO(pMsg->msgType)); terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -518,7 +518,7 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { SSyncMgmt *pMgmt = &pMnode->syncMgmt; int32_t code = 0; - if (!syncEnvIsStart()) { + if (!syncIsInit()) { mError("failed to process sync msg:%p type:%s since syncEnv stop", pMsg, TMSG_INFO(pMsg->msgType)); terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -581,11 +581,6 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { code = syncNodeOnSnapshotReply(pSyncNode, pSyncMsg); syncSnapshotRspDestroy(pSyncMsg); - } else if (pMsg->msgType == TDMT_SYNC_SET_MNODE_STANDBY) { - code = syncSetStandby(pMgmt->sync); - SRpcMsg rsp = {.code = code, .info = pMsg->info}; - tmsgSendRsp(&rsp); - } else if (pMsg->msgType == TDMT_SYNC_LOCAL_CMD) { SyncLocalCmd *pSyncMsg = syncLocalCmdFromRpcMsg2(pMsg); code = syncNodeOnLocalCmd(pSyncNode, pSyncMsg); diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index bf665fd6db..339be16c91 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -234,7 +234,7 @@ int32_t vnodeProcessSyncCtrlMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { int32_t code = 0; const STraceId *trace = &pMsg->info.traceId; - if (!syncEnvIsStart()) { + if (!syncIsInit()) { vGError("vgId:%d, msg:%p failed to process since sync env not start", pVnode->config.vgId, pMsg); terrno = TSDB_CODE_APP_ERROR; return -1; @@ -277,7 +277,7 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { int32_t code = 0; const STraceId *trace = &pMsg->info.traceId; - if (!syncEnvIsStart()) { + if (!syncIsInit()) { vGError("vgId:%d, msg:%p failed to process since sync env not start", pVnode->config.vgId, pMsg); terrno = TSDB_CODE_APP_ERROR; return -1; diff --git a/source/libs/sync/inc/syncEnv.h b/source/libs/sync/inc/syncEnv.h index 06da0eb3df..068ccaf029 100644 --- a/source/libs/sync/inc/syncEnv.h +++ b/source/libs/sync/inc/syncEnv.h @@ -20,13 +20,7 @@ extern "C" { #endif -#include -#include -#include #include "syncInt.h" -#include "taosdef.h" -#include "trpc.h" -#include "ttimer.h" #define TIMER_MAX_MS 0x7FFFFFFF #define ENV_TICK_TIMER_MS 1000 @@ -57,12 +51,12 @@ typedef struct SSyncEnv { } SSyncEnv; -extern SSyncEnv* gSyncEnv; +SSyncEnv* syncEnv(); -int32_t syncEnvStart(); -int32_t syncEnvStop(); -int32_t syncEnvStartTimer(); -int32_t syncEnvStopTimer(); +int64_t syncNodeAdd(SSyncNode* pNode); +void syncNodeRemove(SSyncNode* pNode); +SSyncNode* syncNodeAcquire(int64_t rid); +void syncNodeRelease(SSyncNode* pNode); #ifdef __cplusplus } diff --git a/source/libs/sync/inc/syncInt.h b/source/libs/sync/inc/syncInt.h index f4949e1016..843dee1342 100644 --- a/source/libs/sync/inc/syncInt.h +++ b/source/libs/sync/inc/syncInt.h @@ -24,6 +24,8 @@ extern "C" { #include "syncTools.h" #include "tlog.h" #include "ttimer.h" +#include "taosdef.h" +#include "ttimer.h" // clang-format off #define sFatal(...) do { if (sDebugFlag & DEBUG_FATAL) { taosPrintLog("SYN FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }} while(0) @@ -255,9 +257,6 @@ void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* newConfig, Sync SyncIndex syncMinMatchIndex(SSyncNode* pSyncNode); char* syncNodePeerState2Str(const SSyncNode* pSyncNode); -SSyncNode* syncNodeAcquire(int64_t rid); -void syncNodeRelease(SSyncNode* pNode); - // raft state change -------------- void syncNodeUpdateTerm(SSyncNode* pSyncNode, SyncTerm term); void syncNodeUpdateTermWithoutStepDown(SSyncNode* pSyncNode, SyncTerm term); @@ -302,9 +301,6 @@ bool syncNodeNeedSendAppendEntries(SSyncNode* ths, const SRaftId* pDestId, const int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta); int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct SSnapshotMeta* sMeta); -void syncStartNormal(int64_t rid); -void syncStartStandBy(int64_t rid); - bool syncNodeCanChange(SSyncNode* pSyncNode); bool syncNodeCheckNewConfig(SSyncNode* pSyncNode, const SSyncCfg* pNewCfg); diff --git a/source/libs/sync/src/syncEnv.c b/source/libs/sync/src/syncEnv.c index fb0bfb8bef..4d4cb8ab69 100644 --- a/source/libs/sync/src/syncEnv.c +++ b/source/libs/sync/src/syncEnv.c @@ -13,118 +13,114 @@ * along with this program. If not, see . */ +#define _DEFAULT_SOURCE #include "syncEnv.h" -// #include +#include "tref.h" -SSyncEnv *gSyncEnv = NULL; +static SSyncEnv gSyncEnv = {0}; +static int32_t gNodeRefId = -1; +bool gRaftDetailLog = false; +static void syncEnvTick(void *param, void *tmrId); -// local function ----------------- -static SSyncEnv *doSyncEnvStart(); -static int32_t doSyncEnvStop(SSyncEnv *pSyncEnv); -static int32_t doSyncEnvStartTimer(SSyncEnv *pSyncEnv); -static int32_t doSyncEnvStopTimer(SSyncEnv *pSyncEnv); -static void syncEnvTick(void *param, void *tmrId); -// -------------------------------- +SSyncEnv *syncEnv() { return &gSyncEnv; } -bool syncEnvIsStart() { - if (gSyncEnv == NULL) { - return false; - } +bool syncIsInit() { return atomic_load_8(&gSyncEnv.isStart); } - return atomic_load_8(&(gSyncEnv->isStart)); -} +int32_t syncInit() { + if (syncIsInit()) return 0; -int32_t syncEnvStart() { - int32_t ret = 0; uint32_t seed = (uint32_t)(taosGetTimestampNs() & 0x00000000FFFFFFFF); taosSeedRand(seed); - // gSyncEnv = doSyncEnvStart(gSyncEnv); - gSyncEnv = doSyncEnvStart(); - ASSERT(gSyncEnv != NULL); - sTrace("sync env start ok"); - return ret; -} -int32_t syncEnvStop() { - int32_t ret = doSyncEnvStop(gSyncEnv); - return ret; -} - -int32_t syncEnvStartTimer() { - int32_t ret = doSyncEnvStartTimer(gSyncEnv); - return ret; -} - -int32_t syncEnvStopTimer() { - int32_t ret = doSyncEnvStopTimer(gSyncEnv); - return ret; -} - -// local function ----------------- -static void syncEnvTick(void *param, void *tmrId) { - SSyncEnv *pSyncEnv = (SSyncEnv *)param; - if (atomic_load_64(&pSyncEnv->envTickTimerLogicClockUser) <= atomic_load_64(&pSyncEnv->envTickTimerLogicClock)) { - ++(pSyncEnv->envTickTimerCounter); - sTrace("syncEnvTick do ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 - ", envTickTimerCounter:%" PRIu64 - ", " - "envTickTimerMS:%d, tmrId:%p", - pSyncEnv->envTickTimerLogicClockUser, pSyncEnv->envTickTimerLogicClock, pSyncEnv->envTickTimerCounter, - pSyncEnv->envTickTimerMS, tmrId); - - // do something, tick ... - taosTmrReset(syncEnvTick, pSyncEnv->envTickTimerMS, pSyncEnv, pSyncEnv->pTimerManager, &pSyncEnv->pEnvTickTimer); - } else { - sTrace("syncEnvTick pass ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 - ", envTickTimerCounter:%" PRIu64 - ", " - "envTickTimerMS:%d, tmrId:%p", - pSyncEnv->envTickTimerLogicClockUser, pSyncEnv->envTickTimerLogicClock, pSyncEnv->envTickTimerCounter, - pSyncEnv->envTickTimerMS, tmrId); - } -} - -static SSyncEnv *doSyncEnvStart() { - SSyncEnv *pSyncEnv = (SSyncEnv *)taosMemoryMalloc(sizeof(SSyncEnv)); - ASSERT(pSyncEnv != NULL); - memset(pSyncEnv, 0, sizeof(SSyncEnv)); - - pSyncEnv->envTickTimerCounter = 0; - pSyncEnv->envTickTimerMS = ENV_TICK_TIMER_MS; - pSyncEnv->FpEnvTickTimer = syncEnvTick; - atomic_store_64(&pSyncEnv->envTickTimerLogicClock, 0); - atomic_store_64(&pSyncEnv->envTickTimerLogicClockUser, 0); + memset(&gSyncEnv, 0, sizeof(SSyncEnv)); + gSyncEnv.envTickTimerCounter = 0; + gSyncEnv.envTickTimerMS = ENV_TICK_TIMER_MS; + gSyncEnv.FpEnvTickTimer = syncEnvTick; + atomic_store_64(&gSyncEnv.envTickTimerLogicClock, 0); + atomic_store_64(&gSyncEnv.envTickTimerLogicClockUser, 0); // start tmr thread - pSyncEnv->pTimerManager = taosTmrInit(1000, 50, 10000, "SYNC-ENV"); + gSyncEnv.pTimerManager = taosTmrInit(1000, 50, 10000, "SYNC-ENV"); + atomic_store_8(&gSyncEnv.isStart, 1); - atomic_store_8(&(pSyncEnv->isStart), 1); - return pSyncEnv; -} - -static int32_t doSyncEnvStop(SSyncEnv *pSyncEnv) { - ASSERT(pSyncEnv == gSyncEnv); - if (pSyncEnv != NULL) { - atomic_store_8(&(pSyncEnv->isStart), 0); - taosTmrCleanUp(pSyncEnv->pTimerManager); - taosMemoryFree(pSyncEnv); + gNodeRefId = taosOpenRef(200, (RefFp)syncNodeClose); + if (gNodeRefId < 0) { + sError("failed to init node ref"); + syncCleanUp(); + return -1; } - gSyncEnv = NULL; + + sDebug("sync rsetId:%d is open", gNodeRefId); return 0; } -static int32_t doSyncEnvStartTimer(SSyncEnv *pSyncEnv) { - int32_t ret = 0; - taosTmrReset(pSyncEnv->FpEnvTickTimer, pSyncEnv->envTickTimerMS, pSyncEnv, pSyncEnv->pTimerManager, - &pSyncEnv->pEnvTickTimer); - atomic_store_64(&pSyncEnv->envTickTimerLogicClock, pSyncEnv->envTickTimerLogicClockUser); - return ret; +void syncCleanUp() { + atomic_store_8(&gSyncEnv.isStart, 0); + taosTmrCleanUp(gSyncEnv.pTimerManager); + memset(&gSyncEnv, 0, sizeof(SSyncEnv)); + + if (gNodeRefId != -1) { + sDebug("sync rsetId:%d is closed", gNodeRefId); + taosCloseRef(gNodeRefId); + gNodeRefId = -1; + } } -static int32_t doSyncEnvStopTimer(SSyncEnv *pSyncEnv) { +int64_t syncNodeAdd(SSyncNode *pNode) { + pNode->rid = taosAddRef(gNodeRefId, pNode); + if (pNode->rid < 0) return -1; + + sDebug("vgId:%d, sync rid:%" PRId64 " is added to rsetId:%d", pNode->vgId, pNode->rid, gNodeRefId); + return 0; +} + +void syncNodeRemove(SSyncNode *pNode) { + taosRemoveRef(gNodeRefId, pNode->rid); + sDebug("vgId:%d, sync rid:%" PRId64 " is removed from rsetId:%d", pNode->vgId, pNode->rid, gNodeRefId); +} + +SSyncNode *syncNodeAcquire(int64_t rid) { + SSyncNode *pNode = taosAcquireRef(gNodeRefId, rid); + if (pNode == NULL) { + sTrace("failed to acquire node from refId:%" PRId64, rid); + } + + return pNode; +} + +void syncNodeRelease(SSyncNode *pNode) { taosReleaseRef(gNodeRefId, pNode->rid); } + +#if 0 +void syncEnvStartTimer() { + taosTmrReset(gSyncEnv.FpEnvTickTimer, gSyncEnv.envTickTimerMS, &gSyncEnv, gSyncEnv.pTimerManager, + &gSyncEnv.pEnvTickTimer); + atomic_store_64(&gSyncEnv.envTickTimerLogicClock, gSyncEnv.envTickTimerLogicClockUser); +} + +void syncEnvStopTimer() { int32_t ret = 0; - atomic_add_fetch_64(&pSyncEnv->envTickTimerLogicClockUser, 1); - taosTmrStop(pSyncEnv->pEnvTickTimer); - pSyncEnv->pEnvTickTimer = NULL; + atomic_add_fetch_64(&gSyncEnv.envTickTimerLogicClockUser, 1); + taosTmrStop(gSyncEnv.pEnvTickTimer); + gSyncEnv.pEnvTickTimer = NULL; return ret; } +#endif + +static void syncEnvTick(void *param, void *tmrId) { + SSyncEnv *pSyncEnv = param; + if (atomic_load_64(&gSyncEnv.envTickTimerLogicClockUser) <= atomic_load_64(&gSyncEnv.envTickTimerLogicClock)) { + gSyncEnv.envTickTimerCounter++; + sTrace("syncEnvTick do ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 + ", envTickTimerCounter:%" PRIu64 ", envTickTimerMS:%d, tmrId:%p", + gSyncEnv.envTickTimerLogicClockUser, gSyncEnv.envTickTimerLogicClock, gSyncEnv.envTickTimerCounter, + gSyncEnv.envTickTimerMS, tmrId); + + // do something, tick ... + taosTmrReset(syncEnvTick, gSyncEnv.envTickTimerMS, pSyncEnv, gSyncEnv.pTimerManager, &gSyncEnv.pEnvTickTimer); + } else { + sTrace("syncEnvTick pass ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 + ", envTickTimerCounter:%" PRIu64 ", envTickTimerMS:%d, tmrId:%p", + gSyncEnv.envTickTimerLogicClockUser, gSyncEnv.envTickTimerLogicClock, gSyncEnv.envTickTimerCounter, + gSyncEnv.envTickTimerMS, tmrId); + } +} diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 7142e8fb22..9ff8917b0f 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -33,11 +33,6 @@ #include "syncTimeout.h" #include "syncUtil.h" #include "syncVoteMgr.h" -#include "tref.h" - -bool gRaftDetailLog = false; - -static int32_t tsNodeRefId = -1; // ------ local funciton --------- // enqueue message ---- @@ -52,138 +47,36 @@ static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId); int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg); int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg); -// --------------------------------- -static void syncNodeFreeCb(void* param) { - syncNodeClose(param); - param = NULL; -} - -int32_t syncInit() { - int32_t ret = 0; - - if (!syncEnvIsStart()) { - tsNodeRefId = taosOpenRef(200, syncNodeFreeCb); - if (tsNodeRefId < 0) { - sError("failed to init node ref"); - syncCleanUp(); - ret = -1; - } else { - sDebug("sync rsetId:%d is open", tsNodeRefId); - ret = syncEnvStart(); - } - } - - return ret; -} - -void syncCleanUp() { - int32_t ret = syncEnvStop(); - ASSERT(ret == 0); - - if (tsNodeRefId != -1) { - sDebug("sync rsetId:%d is closed", tsNodeRefId); - taosCloseRef(tsNodeRefId); - tsNodeRefId = -1; - } -} - int64_t syncOpen(SSyncInfo* pSyncInfo) { - SSyncNode* pSyncNode = syncNodeOpen(pSyncInfo); - if (pSyncNode == NULL) { + SSyncNode* pNode = syncNodeOpen(pSyncInfo); + if (pNode == NULL) { sError("vgId:%d, failed to open sync node", pSyncInfo->vgId); return -1; } - pSyncNode->rid = taosAddRef(tsNodeRefId, pSyncNode); - if (pSyncNode->rid < 0) { - syncNodeClose(pSyncNode); - pSyncNode = NULL; + pNode->rid = syncNodeAdd(pNode); + if (pNode->rid < 0) { + syncNodeClose(pNode); return -1; } - sDebug("vgId:%d, sync rid:%" PRId64 " is added to rsetId:%d", pSyncInfo->vgId, pSyncNode->rid, tsNodeRefId); - return pSyncNode->rid; + return pNode->rid; } void syncStart(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - return; + SSyncNode* pNode = syncNodeAcquire(rid); + if (pNode != NULL) { + syncNodeStart(pNode); + syncNodeRelease(pNode); } - - if (pSyncNode->pRaftCfg->isStandBy) { - syncNodeStartStandBy(pSyncNode); - } else { - syncNodeStart(pSyncNode); - } - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); -} - -void syncStartNormal(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - return; - } - syncNodeStart(pSyncNode); - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); -} - -void syncStartStandBy(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - return; - } - syncNodeStartStandBy(pSyncNode); - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); } void syncStop(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) return; - int32_t vgId = pSyncNode->vgId; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); - - taosRemoveRef(tsNodeRefId, rid); - sDebug("vgId:%d, sync rid:%" PRId64 " is removed from rsetId:%d", vgId, rid, tsNodeRefId); -} - -int32_t syncSetStandby(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - terrno = TSDB_CODE_SYN_INTERNAL_ERROR; - sError("failed to set standby since accquire ref error, rid:%" PRId64, rid); - return -1; + SSyncNode* pNode = syncNodeAcquire(rid); + if (pNode != NULL) { + syncNodeRelease(pNode); + syncNodeRemove(pNode); } - - if (pSyncNode->state != TAOS_SYNC_STATE_FOLLOWER) { - if (pSyncNode->state == TAOS_SYNC_STATE_LEADER) { - terrno = TSDB_CODE_SYN_IS_LEADER; - } else { - terrno = TSDB_CODE_SYN_STANDBY_NOT_READY; - } - sError("failed to set standby since it is not follower, state:%s rid:%" PRId64, syncStr(pSyncNode->state), rid); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); - return -1; - } - - // state change - pSyncNode->state = TAOS_SYNC_STATE_FOLLOWER; - syncNodeStopHeartbeatTimer(pSyncNode); - - // reset elect timer, long enough - int32_t electMS = TIMER_MAX_MS; - int32_t ret = syncNodeRestartElectTimer(pSyncNode, electMS); - ASSERT(ret == 0); - - pSyncNode->pRaftCfg->isStandBy = 1; - raftCfgPersist(pSyncNode->pRaftCfg); - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); - sInfo("vgId:%d, set to standby", pSyncNode->vgId); - return 0; } bool syncNodeCheckNewConfig(SSyncNode* pSyncNode, const SSyncCfg* pNewCfg) { @@ -204,7 +97,7 @@ bool syncNodeCheckNewConfig(SSyncNode* pSyncNode, const SSyncCfg* pNewCfg) { } int32_t syncReconfigBuild(int64_t rid, const SSyncCfg* pNewCfg, SRpcMsg* pRpcMsg) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -213,7 +106,7 @@ int32_t syncReconfigBuild(int64_t rid, const SSyncCfg* pNewCfg, SRpcMsg* pRpcMsg int32_t ret = 0; if (!syncNodeCheckNewConfig(pSyncNode, pNewCfg)) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); terrno = TSDB_CODE_SYN_NEW_CONFIG_ERROR; sError("invalid new config. vgId:%d", pSyncNode->vgId); return -1; @@ -227,12 +120,12 @@ int32_t syncReconfigBuild(int64_t rid, const SSyncCfg* pNewCfg, SRpcMsg* pRpcMsg snprintf(pRpcMsg->pCont, pRpcMsg->contLen, "%s", newconfig); taosMemoryFree(newconfig); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -240,7 +133,7 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { ASSERT(rid == pSyncNode->rid); if (!syncNodeCheckNewConfig(pSyncNode, pNewCfg)) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); terrno = TSDB_CODE_SYN_NEW_CONFIG_ERROR; sError("invalid new config. vgId:%d", pSyncNode->vgId); return -1; @@ -259,7 +152,7 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { taosMemoryFree(newconfig); ret = syncNodePropose(pSyncNode, &rpcMsg, false); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; #else syncNodeUpdateNewConfigIndex(pSyncNode, pNewCfg); @@ -275,13 +168,13 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { syncNodeReplicate(pSyncNode); } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; #endif } int32_t syncLeaderTransfer(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -289,12 +182,12 @@ int32_t syncLeaderTransfer(int64_t rid) { ASSERT(rid == pSyncNode->rid); int32_t ret = syncNodeLeaderTransfer(pSyncNode); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } int32_t syncLeaderTransferTo(int64_t rid, SNodeInfo newLeader) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -302,7 +195,7 @@ int32_t syncLeaderTransferTo(int64_t rid, SNodeInfo newLeader) { ASSERT(rid == pSyncNode->rid); int32_t ret = syncNodeLeaderTransferTo(pSyncNode, newLeader); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } @@ -358,7 +251,7 @@ char* syncNodePeerState2Str(const SSyncNode* pSyncNode) { } int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -382,7 +275,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { logNum, isEmpty); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -411,7 +304,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { syncNodeEventLog(pSyncNode, logBuf); } while (0); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } } @@ -424,7 +317,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { lastApplyIndex, pSyncNode->minMatchIndex); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -433,7 +326,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { snprintf(logBuf, sizeof(logBuf), "new-snapshot-index:%" PRId64 " candidate, do not delete wal", lastApplyIndex); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } else { @@ -442,7 +335,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { lastApplyIndex); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -491,12 +384,12 @@ _DEL_WAL: } } while (0); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return code; } int32_t syncEndSnapshot(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -510,7 +403,7 @@ int32_t syncEndSnapshot(int64_t rid) { if (code != 0) { sError("vgId:%d, wal snapshot end error since:%s", pSyncNode->vgId, terrstr(terrno)); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return -1; } else { do { @@ -524,12 +417,12 @@ int32_t syncEndSnapshot(int64_t rid) { } } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return code; } int32_t syncStepDown(int64_t rid, SyncTerm newTerm) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -538,7 +431,7 @@ int32_t syncStepDown(int64_t rid, SyncTerm newTerm) { syncNodeStepDown(pSyncNode, newTerm); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -583,19 +476,19 @@ int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader) { } bool syncCanLeaderTransfer(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); if (pSyncNode->replicaNum == 1) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return false; } if (pSyncNode->state == TAOS_SYNC_STATE_FOLLOWER) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return true; } @@ -610,7 +503,7 @@ bool syncCanLeaderTransfer(int64_t rid) { } } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return matchOK; } @@ -620,25 +513,25 @@ int32_t syncForwardToPeer(int64_t rid, SRpcMsg* pMsg, bool isWeak) { } ESyncState syncGetMyRole(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } ASSERT(rid == pSyncNode->rid); ESyncState state = pSyncNode->state; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return state; } bool syncIsReady(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); bool b = (pSyncNode->state == TAOS_SYNC_STATE_LEADER) && pSyncNode->restoreFinish; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); // if false, set error code if (false == b) { @@ -652,14 +545,14 @@ bool syncIsReady(int64_t rid) { } bool syncIsRestoreFinish(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); bool b = pSyncNode->restoreFinish; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return b; } @@ -668,7 +561,7 @@ int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapsho return -1; } - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return -1; } @@ -680,7 +573,7 @@ int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapsho if (pEntry != NULL) { syncEntryDestory(pEntry); } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return -1; } ASSERT(pEntry != NULL); @@ -691,12 +584,12 @@ int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapsho pSnapshot->lastConfigIndex = syncNodeGetSnapshotConfigIndex(pSyncNode, index); syncEntryDestory(pEntry); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return -1; } @@ -705,12 +598,12 @@ int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta) { sTrace("vgId:%d, get snapshot meta, lastConfigIndex:%" PRId64, pSyncNode->vgId, pSyncNode->pRaftCfg->lastConfigIndex); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct SSnapshotMeta* sMeta) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return -1; } @@ -729,7 +622,7 @@ int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct sTrace("vgId:%d, get snapshot meta by index:%" PRId64 " lcindex:%" PRId64, pSyncNode->vgId, snapshotIndex, sMeta->lastConfigIndex); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -755,67 +648,67 @@ const char* syncGetMyRoleStr(int64_t rid) { } bool syncRestoreFinish(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); bool restoreFinish = pSyncNode->restoreFinish; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return restoreFinish; } SyncTerm syncGetMyTerm(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } ASSERT(rid == pSyncNode->rid); SyncTerm term = pSyncNode->pRaftStore->currentTerm; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return term; } SyncIndex syncGetLastIndex(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return SYNC_INDEX_INVALID; } ASSERT(rid == pSyncNode->rid); SyncIndex lastIndex = syncNodeGetLastIndex(pSyncNode); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return lastIndex; } SyncIndex syncGetCommitIndex(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return SYNC_INDEX_INVALID; } ASSERT(rid == pSyncNode->rid); SyncIndex cmtIndex = pSyncNode->commitIndex; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return cmtIndex; } SyncGroupId syncGetVgId(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } ASSERT(rid == pSyncNode->rid); SyncGroupId vgId = pSyncNode->vgId; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return vgId; } void syncGetEpSet(int64_t rid, SEpSet* pEpSet) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { memset(pEpSet, 0, sizeof(*pEpSet)); return; @@ -831,11 +724,11 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet) { pEpSet->inUse = pSyncNode->pRaftCfg->cfg.myIndex; sInfo("vgId:%d, sync get epset in-use:%d", pSyncNode->vgId, pEpSet->inUse); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { memset(pEpSet, 0, sizeof(*pEpSet)); return; @@ -854,11 +747,11 @@ void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet) { } sInfo("vgId:%d, sync get retry epset in-use:%d", pSyncNode->vgId, pEpSet->inUse); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } @@ -870,12 +763,12 @@ int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg) { memcpy(msg, &(stub.rpcMsg), sizeof(SRpcMsg)); } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } @@ -888,12 +781,12 @@ int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo) } sTrace("vgId:%d, get seq:%" PRIu64 " rpc handle:%p", pSyncNode->vgId, index, pInfo->handle); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { sTrace("syncSetQ get pSyncNode is NULL, rid:%" PRId64, rid); return; @@ -901,24 +794,24 @@ void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb) { ASSERT(rid == pSyncNode->rid); pSyncNode->msgcb = msgcb; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } char* sync2SimpleStr(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { sTrace("syncSetRpc get pSyncNode is NULL, rid:%" PRId64, rid); return NULL; } ASSERT(rid == pSyncNode->rid); char* s = syncNode2SimpleStr(pSyncNode); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return s; } void setPingTimerMS(int64_t rid, int32_t pingTimerMS) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return; } @@ -926,22 +819,22 @@ void setPingTimerMS(int64_t rid, int32_t pingTimerMS) { pSyncNode->pingBaseLine = pingTimerMS; pSyncNode->pingTimerMS = pingTimerMS; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } void setElectTimerMS(int64_t rid, int32_t electTimerMS) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return; } ASSERT(rid == pSyncNode->rid); pSyncNode->electBaseLine = electTimerMS; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } void setHeartbeatTimerMS(int64_t rid, int32_t hbTimerMS) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return; } @@ -949,20 +842,20 @@ void setHeartbeatTimerMS(int64_t rid, int32_t hbTimerMS) { pSyncNode->hbBaseLine = hbTimerMS; pSyncNode->heartbeatTimerMS = hbTimerMS; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { - taosReleaseRef(tsNodeRefId, rid); + syncNodeRelease(pSyncNode); terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; } ASSERT(rid == pSyncNode->rid); int32_t ret = syncNodePropose(pSyncNode, pMsg, isWeak); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } @@ -1084,7 +977,7 @@ int32_t syncHbTimerInit(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer, SRaftId de int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { int32_t ret = 0; - if (syncEnvIsStart()) { + if (syncIsInit()) { SSyncHbTimerData* pData = taosMemoryMalloc(sizeof(SSyncHbTimerData)); pData->pSyncNode = pSyncNode; pData->pTimer = pSyncTimer; @@ -1092,7 +985,7 @@ int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { pData->logicClock = pSyncTimer->logicClock; pSyncTimer->pData = pData; - taosTmrReset(pSyncTimer->timerCb, pSyncTimer->timerMS, pData, gSyncEnv->pTimerManager, &pSyncTimer->pTimer); + taosTmrReset(pSyncTimer->timerCb, pSyncTimer->timerMS, pData, syncEnv()->pTimerManager, &pSyncTimer->pTimer); } else { sError("vgId:%d, start ctrl hb timer error, sync env is stop", pSyncNode->vgId); } @@ -1556,8 +1449,8 @@ int32_t syncNodePingAll(SSyncNode* pSyncNode) { // timer control -------------- int32_t syncNodeStartPingTimer(SSyncNode* pSyncNode) { int32_t ret = 0; - if (syncEnvIsStart()) { - taosTmrReset(pSyncNode->FpPingTimerCB, pSyncNode->pingTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(pSyncNode->FpPingTimerCB, pSyncNode->pingTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pPingTimer); atomic_store_64(&pSyncNode->pingTimerLogicClock, pSyncNode->pingTimerLogicClockUser); } else { @@ -1576,7 +1469,7 @@ int32_t syncNodeStopPingTimer(SSyncNode* pSyncNode) { int32_t syncNodeStartElectTimer(SSyncNode* pSyncNode, int32_t ms) { int32_t ret = 0; - if (syncEnvIsStart()) { + if (syncIsInit()) { pSyncNode->electTimerMS = ms; SElectTimer* pElectTimer = taosMemoryMalloc(sizeof(SElectTimer)); @@ -1584,7 +1477,7 @@ int32_t syncNodeStartElectTimer(SSyncNode* pSyncNode, int32_t ms) { pElectTimer->pSyncNode = pSyncNode; pElectTimer->pData = NULL; - taosTmrReset(pSyncNode->FpElectTimerCB, pSyncNode->electTimerMS, pElectTimer, gSyncEnv->pTimerManager, + taosTmrReset(pSyncNode->FpElectTimerCB, pSyncNode->electTimerMS, pElectTimer, syncEnv()->pTimerManager, &pSyncNode->pElectTimer); } else { @@ -1632,8 +1525,8 @@ int32_t syncNodeResetElectTimer(SSyncNode* pSyncNode) { static int32_t syncNodeDoStartHeartbeatTimer(SSyncNode* pSyncNode) { int32_t ret = 0; - if (syncEnvIsStart()) { - taosTmrReset(pSyncNode->FpHeartbeatTimerCB, pSyncNode->heartbeatTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(pSyncNode->FpHeartbeatTimerCB, pSyncNode->heartbeatTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pHeartbeatTimer); atomic_store_64(&pSyncNode->heartbeatTimerLogicClock, pSyncNode->heartbeatTimerLogicClockUser); } else { @@ -2325,17 +2218,6 @@ _END: return; } -SSyncNode* syncNodeAcquire(int64_t rid) { - SSyncNode* pNode = taosAcquireRef(tsNodeRefId, rid); - if (pNode == NULL) { - sTrace("failed to acquire node from refId:%" PRId64, rid); - } - - return pNode; -} - -void syncNodeRelease(SSyncNode* pNode) { taosReleaseRef(tsNodeRefId, pNode->rid); } - // raft state change -------------- void syncNodeUpdateTerm(SSyncNode* pSyncNode, SyncTerm term) { if (term > pSyncNode->pRaftStore->currentTerm) { @@ -2786,8 +2668,8 @@ static void syncNodeEqPingTimer(void* param, void* tmrId) { } syncTimeoutDestroy(pSyncMsg); - if (syncEnvIsStart()) { - taosTmrReset(syncNodeEqPingTimer, pSyncNode->pingTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(syncNodeEqPingTimer, pSyncNode->pingTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pPingTimer); } else { sError("sync env is stop, syncNodeEqPingTimer"); @@ -2832,9 +2714,9 @@ static void syncNodeEqElectTimer(void* param, void* tmrId) { #if 0 // reset timer ms - if (syncEnvIsStart() && pSyncNode->electBaseLine > 0) { + if (syncIsInit() && pSyncNode->electBaseLine > 0) { pSyncNode->electTimerMS = syncUtilElectRandomMS(pSyncNode->electBaseLine, 2 * pSyncNode->electBaseLine); - taosTmrReset(syncNodeEqElectTimer, pSyncNode->electTimerMS, pSyncNode, gSyncEnv->pTimerManager, + taosTmrReset(syncNodeEqElectTimer, pSyncNode->electTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pElectTimer); } else { sError("sync env is stop, syncNodeEqElectTimer"); @@ -2869,8 +2751,8 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) { } syncTimeoutDestroy(pSyncMsg); - if (syncEnvIsStart()) { - taosTmrReset(syncNodeEqHeartbeatTimer, pSyncNode->heartbeatTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(syncNodeEqHeartbeatTimer, pSyncNode->heartbeatTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pHeartbeatTimer); } else { sError("sync env is stop, syncNodeEqHeartbeatTimer"); @@ -2930,8 +2812,8 @@ static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId) { syncHeartbeatDestroy(pSyncMsg); - if (syncEnvIsStart()) { - taosTmrReset(syncNodeEqPeerHeartbeatTimer, pSyncTimer->timerMS, pData, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(syncNodeEqPeerHeartbeatTimer, pSyncTimer->timerMS, pData, syncEnv()->pTimerManager, &pSyncTimer->pTimer); } else { sError("sync env is stop, syncNodeEqHeartbeatTimer"); diff --git a/source/libs/sync/test/syncElectTest.cpp b/source/libs/sync/test/syncElectTest.cpp index 862f7bd0ba..d09879a699 100644 --- a/source/libs/sync/test/syncElectTest.cpp +++ b/source/libs/sync/test/syncElectTest.cpp @@ -98,7 +98,7 @@ int main(int argc, char** argv) { init(); int32_t ret = syncIOStart((char*)"127.0.0.1", gPorts[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); char walPath[128]; diff --git a/source/libs/sync/test/syncEncodeTest.cpp b/source/libs/sync/test/syncEncodeTest.cpp index 9f1a81e7ed..fdb5cf7ac8 100644 --- a/source/libs/sync/test/syncEncodeTest.cpp +++ b/source/libs/sync/test/syncEncodeTest.cpp @@ -152,7 +152,7 @@ int main(int argc, char **argv) { int32_t ret = syncIOStart((char *)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); taosRemoveDir("./wal_test"); diff --git a/source/libs/sync/test/syncEnqTest.cpp b/source/libs/sync/test/syncEnqTest.cpp index 8461bfe9b7..191e245b1e 100644 --- a/source/libs/sync/test/syncEnqTest.cpp +++ b/source/libs/sync/test/syncEnqTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncEnvTest.cpp b/source/libs/sync/test/syncEnvTest.cpp index a7a819e046..404ab32d58 100644 --- a/source/libs/sync/test/syncEnvTest.cpp +++ b/source/libs/sync/test/syncEnvTest.cpp @@ -22,7 +22,7 @@ int main() { logTest(); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); for (int i = 0; i < 5; ++i) { @@ -37,8 +37,6 @@ int main() { taosMsleep(5000); } - ret = syncEnvStop(); - assert(ret == 0); - + syncCleanUp(); return 0; } diff --git a/source/libs/sync/test/syncIOSendMsgTest.cpp b/source/libs/sync/test/syncIOSendMsgTest.cpp index 630d96054b..4a457136c2 100644 --- a/source/libs/sync/test/syncIOSendMsgTest.cpp +++ b/source/libs/sync/test/syncIOSendMsgTest.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncInitTest.cpp b/source/libs/sync/test/syncInitTest.cpp index d0843151f4..d654ad06fe 100644 --- a/source/libs/sync/test/syncInitTest.cpp +++ b/source/libs/sync/test/syncInitTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); @@ -91,7 +91,7 @@ int main(int argc, char** argv) { initRaftId(pSyncNode); syncNodeClose(pSyncNode); - syncEnvStop(); + syncCleanUp(); // syncIOStop(); // taosCloseLog(); diff --git a/source/libs/sync/test/syncPingSelfTest.cpp b/source/libs/sync/test/syncPingSelfTest.cpp index 99287bf7b0..f44cbb04d5 100644 --- a/source/libs/sync/test/syncPingSelfTest.cpp +++ b/source/libs/sync/test/syncPingSelfTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncPingTimerTest.cpp b/source/libs/sync/test/syncPingTimerTest.cpp index cd9440e3e2..fd6342aa84 100644 --- a/source/libs/sync/test/syncPingTimerTest.cpp +++ b/source/libs/sync/test/syncPingTimerTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncPingTimerTest2.cpp b/source/libs/sync/test/syncPingTimerTest2.cpp index fa09d04368..295003dff3 100644 --- a/source/libs/sync/test/syncPingTimerTest2.cpp +++ b/source/libs/sync/test/syncPingTimerTest2.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncSnapshotTest.cpp b/source/libs/sync/test/syncSnapshotTest.cpp index 3dc8518072..50771ac476 100644 --- a/source/libs/sync/test/syncSnapshotTest.cpp +++ b/source/libs/sync/test/syncSnapshotTest.cpp @@ -179,7 +179,7 @@ int main(int argc, char **argv) { int32_t ret = syncIOStart((char *)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); // taosRemoveDir(pWalDir); diff --git a/source/libs/sync/test/syncVotesGrantedTest.cpp b/source/libs/sync/test/syncVotesGrantedTest.cpp index d4885d0316..e2e8748697 100644 --- a/source/libs/sync/test/syncVotesGrantedTest.cpp +++ b/source/libs/sync/test/syncVotesGrantedTest.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncVotesRespondTest.cpp b/source/libs/sync/test/syncVotesRespondTest.cpp index 77262dfc65..881a5331b1 100644 --- a/source/libs/sync/test/syncVotesRespondTest.cpp +++ b/source/libs/sync/test/syncVotesRespondTest.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncWriteTest.cpp b/source/libs/sync/test/syncWriteTest.cpp index b185f52f75..fee98ddd52 100644 --- a/source/libs/sync/test/syncWriteTest.cpp +++ b/source/libs/sync/test/syncWriteTest.cpp @@ -154,7 +154,7 @@ int main(int argc, char **argv) { int32_t ret = syncIOStart((char *)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); taosRemoveDir("./wal_test"); diff --git a/source/util/src/tref.c b/source/util/src/tref.c index c984ef3f34..aa741b909a 100644 --- a/source/util/src/tref.c +++ b/source/util/src/tref.c @@ -57,7 +57,7 @@ static void taosIncRsetCount(SRefSet *pSet); static void taosDecRsetCount(SRefSet *pSet); static int32_t taosDecRefCount(int32_t rsetId, int64_t rid, int32_t remove); -int32_t taosOpenRef(int32_t max, void (*fp)(void *)) { +int32_t taosOpenRef(int32_t max, RefFp fp) { SRefNode **nodeList; SRefSet *pSet; int64_t *lockedBy; From 91abd170e3911236108b9e31f2dafdc6ed1de416 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 31 Oct 2022 23:45:17 +0800 Subject: [PATCH 76/81] enh: refact syncEnv code --- source/libs/sync/src/syncEnv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/sync/src/syncEnv.c b/source/libs/sync/src/syncEnv.c index 4d4cb8ab69..5b8acfa5ef 100644 --- a/source/libs/sync/src/syncEnv.c +++ b/source/libs/sync/src/syncEnv.c @@ -71,7 +71,7 @@ int64_t syncNodeAdd(SSyncNode *pNode) { if (pNode->rid < 0) return -1; sDebug("vgId:%d, sync rid:%" PRId64 " is added to rsetId:%d", pNode->vgId, pNode->rid, gNodeRefId); - return 0; + return pNode->rid; } void syncNodeRemove(SSyncNode *pNode) { From 4356fbc3c5888b126f69a4890c728265d00db31e Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 1 Nov 2022 08:58:52 +0800 Subject: [PATCH 77/81] fix: error of setting ld_library_path --- source/libs/function/src/tudf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c index eff3c6cc7b..459ee583a4 100644 --- a/source/libs/function/src/tudf.c +++ b/source/libs/function/src/tudf.c @@ -137,7 +137,7 @@ static int32_t udfSpawnUdfd(SUdfdData *pData) { fnError("can not set correct udfd LD_LIBRARY_PATH"); } char ldLibPathEnvItem[1024 + 32] = {0}; - snprintf(ldLibPathEnvItem, 1024 + 32, "%s=%s", "LD_LIBRARY_PATH", ldLibPathEnvItem); + snprintf(ldLibPathEnvItem, 1024 + 32, "%s=%s", "LD_LIBRARY_PATH", udfdPathLdLib); char *envUdfd[] = {dnodeIdEnvItem, thrdPoolSizeEnvItem, ldLibPathEnvItem, NULL}; options.env = envUdfd; From fbb1fa53030c536c7a61228f8d4b4ec2bd65f7ac Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 1 Nov 2022 09:02:48 +0800 Subject: [PATCH 78/81] enh: refact syncEnv code --- source/libs/sync/inc/syncEnv.h | 2 +- source/libs/sync/src/syncEnv.c | 5 +---- source/libs/sync/src/syncMain.c | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/source/libs/sync/inc/syncEnv.h b/source/libs/sync/inc/syncEnv.h index 068ccaf029..55ce1470ce 100644 --- a/source/libs/sync/inc/syncEnv.h +++ b/source/libs/sync/inc/syncEnv.h @@ -54,7 +54,7 @@ typedef struct SSyncEnv { SSyncEnv* syncEnv(); int64_t syncNodeAdd(SSyncNode* pNode); -void syncNodeRemove(SSyncNode* pNode); +void syncNodeRemove(int64_t rid); SSyncNode* syncNodeAcquire(int64_t rid); void syncNodeRelease(SSyncNode* pNode); diff --git a/source/libs/sync/src/syncEnv.c b/source/libs/sync/src/syncEnv.c index 5b8acfa5ef..c55cd4fdac 100644 --- a/source/libs/sync/src/syncEnv.c +++ b/source/libs/sync/src/syncEnv.c @@ -74,10 +74,7 @@ int64_t syncNodeAdd(SSyncNode *pNode) { return pNode->rid; } -void syncNodeRemove(SSyncNode *pNode) { - taosRemoveRef(gNodeRefId, pNode->rid); - sDebug("vgId:%d, sync rid:%" PRId64 " is removed from rsetId:%d", pNode->vgId, pNode->rid, gNodeRefId); -} +void syncNodeRemove(int64_t rid) { taosRemoveRef(gNodeRefId, rid); } SSyncNode *syncNodeAcquire(int64_t rid) { SSyncNode *pNode = taosAcquireRef(gNodeRefId, rid); diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 42018ed750..89499a7c7d 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -76,7 +76,7 @@ void syncStop(int64_t rid) { SSyncNode* pNode = syncNodeAcquire(rid); if (pNode != NULL) { syncNodeRelease(pNode); - syncNodeRemove(pNode); + syncNodeRemove(rid); } } From bba66861484d6822fcf88aa8182f6e784e42693e Mon Sep 17 00:00:00 2001 From: plum-lihui Date: Tue, 1 Nov 2022 11:48:07 +0800 Subject: [PATCH 79/81] test:modify case --- tests/system-test/7-tmq/tmqError.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/7-tmq/tmqError.py b/tests/system-test/7-tmq/tmqError.py index 7ee9e5d169..5c858d0dce 100644 --- a/tests/system-test/7-tmq/tmqError.py +++ b/tests/system-test/7-tmq/tmqError.py @@ -244,7 +244,7 @@ class TDTestCase: tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit) tdLog.info("start consume processor") - pollDelay = 9000000 # Forever loop + paraDict['pollDelay'] = 9000000 # Forever loop showMsg = 1 showRow = 1 #self.startTmqSimProcess(buildPath,cfgPath,pollDelay,parameterDict["dbName"],showMsg, showRow) From 12db9c46242f4b6ced7e5b754e457c102947192a Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Tue, 1 Nov 2022 11:52:09 +0800 Subject: [PATCH 80/81] fix: taosbenchmark query concurrent segfault (#17795) update taos-tools 719fc88 --- cmake/taostools_CMakeLists.txt.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/taostools_CMakeLists.txt.in b/cmake/taostools_CMakeLists.txt.in index 2b5994e95c..e3e12fa0b5 100644 --- a/cmake/taostools_CMakeLists.txt.in +++ b/cmake/taostools_CMakeLists.txt.in @@ -2,7 +2,7 @@ # taos-tools ExternalProject_Add(taos-tools GIT_REPOSITORY https://github.com/taosdata/taos-tools.git - GIT_TAG 7321fbb + GIT_TAG 719fc88 SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools" BINARY_DIR "" #BUILD_IN_SOURCE TRUE From 5d853b11ab046e3c0b099698107f71c30f861cfa Mon Sep 17 00:00:00 2001 From: plum-lihui Date: Tue, 1 Nov 2022 12:40:12 +0800 Subject: [PATCH 81/81] test:modify case --- tests/system-test/7-tmq/tmqShow.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/system-test/7-tmq/tmqShow.py b/tests/system-test/7-tmq/tmqShow.py index d0b46bf572..0a21680e78 100644 --- a/tests/system-test/7-tmq/tmqShow.py +++ b/tests/system-test/7-tmq/tmqShow.py @@ -138,8 +138,9 @@ class TDTestCase: tdSql.query("show subscriptions") # tdLog.debug(tdSql.queryResult) rows = tdSql.getRows() - tdLog.info("show subscriptions rows: %d"%rows) - if rows != paraDict['vgroups'] * len(topicNameList): + expectSubscriptions = paraDict['vgroups'] * len(topicNameList) + tdLog.info("show subscriptions rows: %d, expect Subscriptions: %d"%(rows,expectSubscriptions)) + if rows != expectSubscriptions: tdLog.exit("show subscriptions rows error") pThread.join()