From 3a17619046d2d02ecd3868cebc7a3e8d3fc60de9 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 6 Jul 2022 10:13:17 +0800 Subject: [PATCH 01/27] enh: msg type and task status validate --- source/libs/scheduler/src/schRemote.c | 35 +++++++-------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c index ab457847b9..03a247f828 100644 --- a/source/libs/scheduler/src/schRemote.c +++ b/source/libs/scheduler/src/schRemote.c @@ -22,43 +22,28 @@ #include "trpc.h" -int32_t schValidateReceivedMsgType(SSchJob *pJob, SSchTask *pTask, int32_t msgType) { +int32_t schValidateRspMsgType(SSchJob *pJob, SSchTask *pTask, int32_t msgType) { int32_t lastMsgType = pTask->lastMsgType; int32_t taskStatus = SCH_GET_TASK_STATUS(pTask); - int32_t reqMsgType = msgType - 1; + int32_t reqMsgType = (msgType & 1U) ? msgType : (msgType - 1); switch (msgType) { case TDMT_SCH_LINK_BROKEN: case TDMT_SCH_EXPLAIN_RSP: return TSDB_CODE_SUCCESS; - case TDMT_SCH_MERGE_QUERY_RSP: - case TDMT_SCH_QUERY_RSP: // query_rsp may be processed later than ready_rsp - if (lastMsgType != reqMsgType && -1 != lastMsgType) { - SCH_TASK_DLOG("rsp msg type mis-match, last sent msgType:%s, rspType:%s", TMSG_INFO(lastMsgType), - TMSG_INFO(msgType)); - } - - if (taskStatus != JOB_TASK_STATUS_EXEC && taskStatus != JOB_TASK_STATUS_PART_SUCC) { - SCH_TASK_DLOG("rsp msg conflicted with task status, status:%s, rspType:%s", jobTaskStatusStr(taskStatus), - TMSG_INFO(msgType)); - } - - //SCH_SET_TASK_LASTMSG_TYPE(pTask, -1); - return TSDB_CODE_SUCCESS; case TDMT_SCH_FETCH_RSP: - if (lastMsgType != reqMsgType && -1 != lastMsgType) { + if (lastMsgType != reqMsgType) { SCH_TASK_ELOG("rsp msg type mis-match, last sent msgType:%s, rspType:%s", TMSG_INFO(lastMsgType), TMSG_INFO(msgType)); SCH_ERR_RET(TSDB_CODE_SCH_STATUS_ERROR); - } - - if (taskStatus != JOB_TASK_STATUS_EXEC && taskStatus != JOB_TASK_STATUS_PART_SUCC) { + } + if (taskStatus != JOB_TASK_STATUS_PART_SUCC) { SCH_TASK_ELOG("rsp msg conflicted with task status, status:%s, rspType:%s", jobTaskStatusStr(taskStatus), TMSG_INFO(msgType)); SCH_ERR_RET(TSDB_CODE_SCH_STATUS_ERROR); } - - //SCH_SET_TASK_LASTMSG_TYPE(pTask, -1); return TSDB_CODE_SUCCESS; + case TDMT_SCH_MERGE_QUERY_RSP: + case TDMT_SCH_QUERY_RSP: case TDMT_VND_CREATE_TABLE_RSP: case TDMT_VND_DROP_TABLE_RSP: case TDMT_VND_ALTER_TABLE_RSP: @@ -76,14 +61,12 @@ int32_t schValidateReceivedMsgType(SSchJob *pJob, SSchTask *pTask, int32_t msgTy SCH_ERR_RET(TSDB_CODE_SCH_STATUS_ERROR); } - if (taskStatus != JOB_TASK_STATUS_EXEC && taskStatus != JOB_TASK_STATUS_PART_SUCC) { + if (taskStatus != JOB_TASK_STATUS_EXEC) { SCH_TASK_ELOG("rsp msg conflicted with task status, status:%s, rspType:%s", jobTaskStatusStr(taskStatus), TMSG_INFO(msgType)); SCH_ERR_RET(TSDB_CODE_SCH_STATUS_ERROR); } - //SCH_SET_TASK_LASTMSG_TYPE(pTask, -1); - return TSDB_CODE_SUCCESS; } @@ -97,7 +80,7 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t execId, SDa bool dropExecNode = (msgType == TDMT_SCH_LINK_BROKEN || SCH_NETWORK_ERR(rspCode)); SCH_ERR_JRET(schUpdateTaskHandle(pJob, pTask, dropExecNode, pMsg->handle, execId)); - SCH_ERR_JRET(schValidateReceivedMsgType(pJob, pTask, msgType)); + SCH_ERR_JRET(schValidateRspMsgType(pJob, pTask, msgType)); int32_t reqType = IsReq(pMsg) ? pMsg->msgType : (pMsg->msgType - 1); if (SCH_NEED_REDIRECT(reqType, rspCode, pMsg->len)) { From 0d4fb5bb80b8286ebf84ed62c14896675361510d Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 6 Jul 2022 16:29:51 +0800 Subject: [PATCH 02/27] feat: support insert from query --- include/common/tdatablock.h | 2 + include/common/tmsg.h | 1 + include/libs/executor/dataSinkMgt.h | 4 + include/libs/executor/executor.h | 2 +- include/libs/qworker/qworker.h | 2 +- source/common/src/tdatablock.c | 73 +++++ source/dnode/mgmt/node_mgmt/src/dmTransport.c | 3 +- source/dnode/vnode/inc/vnode.h | 1 + source/dnode/vnode/src/tsdb/tsdbRead.c | 36 +++ source/libs/executor/inc/executorimpl.h | 2 +- source/libs/executor/src/dataInserter.c | 304 ++++++++---------- source/libs/executor/src/dataSinkMgt.c | 2 + source/libs/executor/src/executorMain.c | 2 +- source/libs/executor/src/executorimpl.c | 14 +- source/libs/parser/src/parTranslater.c | 2 +- source/libs/qworker/inc/qwInt.h | 22 +- source/libs/qworker/inc/qwMsg.h | 2 +- source/libs/qworker/src/qwMsg.c | 12 +- source/libs/qworker/src/qworker.c | 47 ++- source/libs/scheduler/inc/schInt.h | 6 +- source/libs/scheduler/src/schJob.c | 2 +- source/libs/scheduler/src/schRemote.c | 1 + source/libs/scheduler/src/schTask.c | 12 +- 23 files changed, 330 insertions(+), 224 deletions(-) diff --git a/include/common/tdatablock.h b/include/common/tdatablock.h index 8b64287033..1c822c6c05 100644 --- a/include/common/tdatablock.h +++ b/include/common/tdatablock.h @@ -246,6 +246,8 @@ int32_t buildSubmitReqFromDataBlock(SSubmitReq** pReq, const SArray* pDataBlocks char* buildCtbNameByGroupId(const char* stbName, uint64_t groupId); +SSubmitReq* dataBlockToSubmit(const SArray* pBlocks, const STSchema* pTSchema, int64_t uid, int64_t suid, int32_t vgId); + static FORCE_INLINE int32_t blockGetEncodeSize(const SSDataBlock* pBlock) { return blockDataGetSerialMetaSize(taosArrayGetSize(pBlock->pDataBlock)) + blockDataGetSize(pBlock); } diff --git a/include/common/tmsg.h b/include/common/tmsg.h index dedc06a2b9..aedf0680ee 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -1510,6 +1510,7 @@ typedef struct SSubQueryMsg { int32_t execId; int8_t taskType; int8_t explain; + int8_t needFetch; uint32_t sqlLen; // the query sql, uint32_t phyLen; char msg[]; diff --git a/include/libs/executor/dataSinkMgt.h b/include/libs/executor/dataSinkMgt.h index 957c40f21e..ca2c49bfb5 100644 --- a/include/libs/executor/dataSinkMgt.h +++ b/include/libs/executor/dataSinkMgt.h @@ -45,6 +45,10 @@ typedef struct SDeleterParam { SArray* pUidList; } SDeleterParam; +typedef struct SInserterParam { + SReadHandle* readHandle; +} SInserterParam; + typedef struct SDataSinkStat { uint64_t cachedSize; } SDataSinkStat; diff --git a/include/libs/executor/executor.h b/include/libs/executor/executor.h index 45fa94b3bf..d9add5275f 100644 --- a/include/libs/executor/executor.h +++ b/include/libs/executor/executor.h @@ -155,7 +155,7 @@ int64_t qGetQueriedTableUid(qTaskInfo_t tinfo); */ int32_t qGetQualifiedTableIdList(void* pTableList, const char* tagCond, int32_t tagCondLen, SArray* pTableIdList); -void qProcessFetchRsp(void* parent, struct SRpcMsg* pMsg, struct SEpSet* pEpSet); +void qProcessRspMsg(void* parent, struct SRpcMsg* pMsg, struct SEpSet* pEpSet); int32_t qGetExplainExecInfo(qTaskInfo_t tinfo, int32_t* resNum, SExplainExecInfo** pRes); diff --git a/include/libs/qworker/qworker.h b/include/libs/qworker/qworker.h index 36e9b3309c..8149b659de 100644 --- a/include/libs/qworker/qworker.h +++ b/include/libs/qworker/qworker.h @@ -74,7 +74,7 @@ int32_t qWorkerProcessCQueryMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, in int32_t qWorkerProcessFetchMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int64_t ts); -int32_t qWorkerProcessFetchRsp(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int64_t ts); +int32_t qWorkerProcessRspMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int64_t ts); int32_t qWorkerProcessCancelMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int64_t ts); diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index bca740e9ce..757235e5aa 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -2105,3 +2105,76 @@ const char* blockDecode(SSDataBlock* pBlock, int32_t numOfCols, int32_t numOfRow ASSERT(pStart - pData == dataLen); return pStart; } + + +SSubmitReq* dataBlockToSubmit(const SArray* pBlocks, const STSchema* pTSchema, int64_t uid, int64_t suid, int32_t vgId) { + SSubmitReq* ret = NULL; + int32_t sz = taosArrayGetSize(pBlocks); + + // cal size + int32_t cap = sizeof(SSubmitReq); + for (int32_t i = 0; i < sz; i++) { + SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); + int32_t rows = pDataBlock->info.rows; + // TODO min + int32_t rowSize = pDataBlock->info.rowSize; + int32_t maxLen = TD_ROW_MAX_BYTES_FROM_SCHEMA(pTSchema); + + cap += sizeof(SSubmitBlk) + rows * maxLen; + } + + // assign data + // TODO + ret = rpcMallocCont(cap); + ret->header.vgId = vgId; + ret->version = htonl(1); + ret->length = sizeof(SSubmitReq); + ret->numOfBlocks = htonl(sz); + + SSubmitBlk* blkHead = POINTER_SHIFT(ret, sizeof(SSubmitReq)); + for (int32_t i = 0; i < sz; i++) { + SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); + + blkHead->numOfRows = htons(pDataBlock->info.rows); + blkHead->sversion = htonl(pTSchema->version); + // TODO + blkHead->suid = htobe64(suid); + blkHead->uid = htobe64(uid); + blkHead->schemaLen = htonl(0); + + int32_t rows = pDataBlock->info.rows; + int32_t dataLen = 0; + STSRow* rowData = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk)); + for (int32_t j = 0; j < rows; j++) { + SRowBuilder rb = {0}; + tdSRowInit(&rb, pTSchema->version); + tdSRowSetTpInfo(&rb, pTSchema->numOfCols, pTSchema->flen); + tdSRowResetBuf(&rb, rowData); + + for (int32_t k = 0; k < pTSchema->numOfCols; k++) { + const STColumn* pColumn = &pTSchema->columns[k]; + SColumnInfoData* pColData = taosArrayGet(pDataBlock->pDataBlock, k); + if (colDataIsNull_s(pColData, j)) { + tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NONE, NULL, false, pColumn->offset, k); + } else { + void* data = colDataGetData(pColData, j); + tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NORM, data, true, pColumn->offset, k); + } + } + int32_t rowLen = TD_ROW_LEN(rowData); + rowData = POINTER_SHIFT(rowData, rowLen); + dataLen += rowLen; + } + + blkHead->dataLen = htonl(dataLen); + + ret->length += sizeof(SSubmitBlk) + dataLen; + blkHead = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk) + dataLen); + } + + ret->length = htonl(ret->length); + + return ret; +} + + diff --git a/source/dnode/mgmt/node_mgmt/src/dmTransport.c b/source/dnode/mgmt/node_mgmt/src/dmTransport.c index 7043991525..28df060494 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmTransport.c +++ b/source/dnode/mgmt/node_mgmt/src/dmTransport.c @@ -88,7 +88,8 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { case TDMT_MND_SYSTABLE_RETRIEVE_RSP: case TDMT_DND_SYSTABLE_RETRIEVE_RSP: case TDMT_SCH_FETCH_RSP: - qWorkerProcessFetchRsp(NULL, NULL, pRpc, 0); + case TDMT_VND_SUBMIT_RSP: + qWorkerProcessRspMsg(NULL, NULL, pRpc, 0); return; case TDMT_MND_STATUS_RSP: if (pEpSet != NULL) { diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 38cb3b70a6..9feb9ee649 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -137,6 +137,7 @@ int32_t tsdbRetrieveDataBlockStatisInfo(tsdbReaderT *pTsdbReadHandle, SColumnDat SArray *tsdbRetrieveDataBlock(tsdbReaderT *pTsdbReadHandle, SArray *pColumnIdList); void tsdbResetReadHandle(tsdbReaderT queryHandle, SQueryTableDataCond *pCond, int32_t tWinIdx); void tsdbCleanupReadHandle(tsdbReaderT queryHandle); +int32_t tsdbGetTableSchema(SVnode* pVnode, int64_t uid, STSchema** pSchema, int64_t* suid); // tq diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 4604e3699f..01c1a47ab8 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -3777,3 +3777,39 @@ void tsdbCleanupReadHandle(tsdbReaderT queryHandle) { taosMemoryFree(pTsdbReadHandle->pSchema); taosMemoryFreeClear(pTsdbReadHandle); } + +int32_t tsdbGetTableSchema(SVnode* pVnode, int64_t uid, STSchema** pSchema, int64_t *suid) { + int32_t sversion = 1; + + SMetaReader mr = {0}; + metaReaderInit(&mr, pVnode->pMeta, 0); + int32_t code = metaGetTableEntryByUid(&mr, uid); + if (code != TSDB_CODE_SUCCESS) { + terrno = TSDB_CODE_TDB_INVALID_TABLE_ID; + metaReaderClear(&mr); + return terrno; + } + + *suid = 0; + + if (mr.me.type == TSDB_CHILD_TABLE) { + *suid = mr.me.ctbEntry.suid; + code = metaGetTableEntryByUid(&mr, *suid); + if (code != TSDB_CODE_SUCCESS) { + terrno = TSDB_CODE_TDB_INVALID_TABLE_ID; + metaReaderClear(&mr); + return terrno; + } + sversion = mr.me.stbEntry.schemaRow.version; + } else { + ASSERT(mr.me.type == TSDB_NORMAL_TABLE); + sversion = mr.me.ntbEntry.schemaRow.version; + } + + metaReaderClear(&mr); + *pSchema = metaGetTbTSchema(pVnode->pMeta, uid, sversion); + + return TSDB_CODE_SUCCESS; +} + + diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 00f2e09e0c..51e4c4411d 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -855,7 +855,7 @@ int32_t decodeOperator(SOperatorInfo* ops, const char* data, int32_t length); void setTaskStatus(SExecTaskInfo* pTaskInfo, int8_t status); int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SReadHandle* pHandle, uint64_t taskId, const char* sql, EOPTR_EXEC_MODEL model); -int32_t createDataSinkParam(SDataSinkNode *pNode, void **pParam, qTaskInfo_t* pTaskInfo); +int32_t createDataSinkParam(SDataSinkNode *pNode, void **pParam, qTaskInfo_t* pTaskInfo, SReadHandle* readHandle); int32_t getOperatorExplainExecInfo(SOperatorInfo* operatorInfo, SExplainExecInfo** pRes, int32_t* capacity, int32_t* resNum); diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index c424cb33fa..26c8d9ede6 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -24,195 +24,153 @@ extern SDataSinkStat gDataSinkStat; -typedef struct SDataInserterBuf { - int32_t useSize; - int32_t allocSize; - char* pData; -} SDataInserterBuf; - -typedef struct SDataCacheEntry { - int32_t dataLen; - int32_t numOfRows; - int32_t numOfCols; - int8_t compressed; - char data[]; -} SDataCacheEntry; +typedef struct SSubmitRes { + int64_t affectedRows; + int32_t code; + SSubmitRsp *pRsp; +} SSubmitRes; typedef struct SDataInserterHandle { SDataSinkHandle sink; SDataSinkManager* pManager; - SDataBlockDescNode* pSchema; - SDataDeleterNode* pDeleter; - SDeleterParam* pParam; - STaosQueue* pDataBlocks; - SDataInserterBuf nextOutput; + STSchema* pSchema; + SQueryInserterNode* pNode; + SSubmitRes submitRes; + SInserterParam* pParam; + SArray* pDataBlocks; int32_t status; bool queryEnd; uint64_t useconds; uint64_t cachedSize; TdThreadMutex mutex; + tsem_t ready; } SDataInserterHandle; -static bool needCompress(const SSDataBlock* pData, int32_t numOfCols) { - if (tsCompressColData < 0 || 0 == pData->info.rows) { - return false; - } +typedef struct SSubmitRspParam { + SDataInserterHandle* pInserter; +} SSubmitRspParam; - for (int32_t col = 0; col < numOfCols; ++col) { - SColumnInfoData* pColRes = taosArrayGet(pData->pDataBlock, col); - int32_t colSize = pColRes->info.bytes * pData->info.rows; - if (NEEDTO_COMPRESS_QUERY(colSize)) { - return true; - } - } - - return false; -} - -static void toDataCacheEntry(SDataInserterHandle* pHandle, const SInputData* pInput, SDataInserterBuf* pBuf) { - int32_t numOfCols = LIST_LENGTH(pHandle->pSchema->pSlots); - - SDataCacheEntry* pEntry = (SDataCacheEntry*)pBuf->pData; - pEntry->compressed = 0; - pEntry->numOfRows = pInput->pData->info.rows; - pEntry->numOfCols = taosArrayGetSize(pInput->pData->pDataBlock); - pEntry->dataLen = sizeof(SDeleterRes); - - ASSERT(1 == pEntry->numOfRows); - ASSERT(1 == pEntry->numOfCols); - - pBuf->useSize = sizeof(SDataCacheEntry); - - SColumnInfoData* pColRes = (SColumnInfoData*)taosArrayGet(pInput->pData->pDataBlock, 0); - - SDeleterRes* pRes = (SDeleterRes*)pEntry->data; - pRes->suid = pHandle->pParam->suid; - pRes->uidList = pHandle->pParam->pUidList; - pRes->skey = pHandle->pDeleter->deleteTimeRange.skey; - pRes->ekey = pHandle->pDeleter->deleteTimeRange.ekey; - pRes->affectedRows = *(int64_t*)pColRes->pData; - - pBuf->useSize += pEntry->dataLen; - - atomic_add_fetch_64(&pHandle->cachedSize, pEntry->dataLen); - atomic_add_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); -} - -static bool allocBuf(SDataInserterHandle* pDeleter, const SInputData* pInput, SDataInserterBuf* pBuf) { - uint32_t capacity = pDeleter->pManager->cfg.maxDataBlockNumPerQuery; - if (taosQueueItemSize(pDeleter->pDataBlocks) > capacity) { - qError("SinkNode queue is full, no capacity, max:%d, current:%d, no capacity", capacity, - taosQueueItemSize(pDeleter->pDataBlocks)); - return false; - } - - pBuf->allocSize = sizeof(SDataCacheEntry) + sizeof(SDeleterRes); - - pBuf->pData = taosMemoryMalloc(pBuf->allocSize); - if (pBuf->pData == NULL) { - qError("SinkNode failed to malloc memory, size:%d, code:%d", pBuf->allocSize, TAOS_SYSTEM_ERROR(errno)); - } - - return NULL != pBuf->pData; -} - -static int32_t updateStatus(SDataInserterHandle* pDeleter) { - taosThreadMutexLock(&pDeleter->mutex); - int32_t blockNums = taosQueueItemSize(pDeleter->pDataBlocks); +static int32_t updateStatus(SDataInserterHandle* pInserter) { + taosThreadMutexLock(&pInserter->mutex); + int32_t blockNums = taosQueueItemSize(pInserter->pDataBlocks); int32_t status = (0 == blockNums ? DS_BUF_EMPTY - : (blockNums < pDeleter->pManager->cfg.maxDataBlockNumPerQuery ? DS_BUF_LOW : DS_BUF_FULL)); - pDeleter->status = status; - taosThreadMutexUnlock(&pDeleter->mutex); + : (blockNums < pInserter->pManager->cfg.maxDataBlockNumPerQuery ? DS_BUF_LOW : DS_BUF_FULL)); + pInserter->status = status; + taosThreadMutexUnlock(&pInserter->mutex); return status; } -static int32_t getStatus(SDataInserterHandle* pDeleter) { - taosThreadMutexLock(&pDeleter->mutex); - int32_t status = pDeleter->status; - taosThreadMutexUnlock(&pDeleter->mutex); +static int32_t getStatus(SDataInserterHandle* pInserter) { + taosThreadMutexLock(&pInserter->mutex); + int32_t status = pInserter->status; + taosThreadMutexUnlock(&pInserter->mutex); return status; } +int32_t inserterCallback(void* param, SDataBuf* pMsg, int32_t code) { + SSubmitRspParam* pParam = (SSubmitRspParam*)param; + SDataInserterHandle* pInserter = pParam->pInserter; + + pInserter->submitRes.code = code; + + if (code == TSDB_CODE_SUCCESS) { + pInserter->submitRes.pRsp = taosMemoryCalloc(1, sizeof(SSubmitRsp)); + SDecoder coder = {0}; + tDecoderInit(&coder, pMsg->pData, pMsg->len); + code = tDecodeSSubmitRsp(&coder, pInserter->submitRes.pRsp); + if (code) { + tFreeSSubmitRsp(pInserter->submitRes.pRsp); + pInserter->submitRes.code = code; + goto _return; + } + + if (pInserter->submitRes.pRsp->nBlocks > 0) { + for (int32_t i = 0; i < pInserter->submitRes.pRsp->nBlocks; ++i) { + SSubmitBlkRsp *blk = pInserter->submitRes.pRsp->pBlocks + i; + if (TSDB_CODE_SUCCESS != blk->code) { + code = blk->code; + tFreeSSubmitRsp(pInserter->submitRes.pRsp); + pInserter->submitRes.code = code; + goto _return; + } + } + } + + pInserter->submitRes.affectedRows += pInserter->submitRes.pRsp->affectedRows; + qDebug("submit rsp received, affectedRows:%d, total:%d", pInserter->submitRes.pRsp->affectedRows, pInserter->submitRes.affectedRows); + + tFreeSSubmitRsp(pInserter->submitRes.pRsp); + } + +_return: + + tsem_post(&pInserter->ready); + + taosMemoryFree(param); + + return TSDB_CODE_SUCCESS; +} + + +static int32_t sendSubmitRequest(SDataInserterHandle* pInserter, SSubmitReq* pMsg, void* pTransporter, SEpSet* pEpset) { + // send the fetch remote task result reques + SMsgSendInfo* pMsgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo)); + if (NULL == pMsgSendInfo) { + taosMemoryFreeClear(pMsg); + terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; + return terrno; + } + + SSubmitRspParam* pParam = taosMemoryCalloc(1, sizeof(SSubmitRspParam)); + pParam->pInserter = pInserter; + + pMsgSendInfo->param = pParam; + pMsgSendInfo->msgInfo.pData = pMsg; + pMsgSendInfo->msgInfo.len = sizeof(SSubmitReq); + pMsgSendInfo->msgType = TDMT_VND_SUBMIT; + pMsgSendInfo->fp = inserterCallback; + + int64_t transporterId = 0; + return asyncSendMsgToServer(pTransporter, pEpset, &transporterId, pMsgSendInfo); +} + + static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue) { - SDataInserterHandle* pDeleter = (SDataInserterHandle*)pHandle; - SDataInserterBuf* pBuf = taosAllocateQitem(sizeof(SDataInserterBuf), DEF_QITEM); - if (NULL == pBuf || !allocBuf(pDeleter, pInput, pBuf)) { - return TSDB_CODE_QRY_OUT_OF_MEMORY; + SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; + taosArrayPush(pInserter->pDataBlocks, pInput->pData); + SSubmitReq* pMsg = dataBlockToSubmit(pInserter->pDataBlocks, pInserter->pSchema, pInserter->pNode->tableId, pInserter->pNode->suid, pInserter->pNode->vgId); + + int32_t code = sendSubmitRequest(pInserter, pMsg, pInserter->pParam->readHandle->pMsgCb->clientRpc, &pInserter->pNode->epSet); + if (code) { + return code; } - toDataCacheEntry(pDeleter, pInput, pBuf); - taosWriteQitem(pDeleter->pDataBlocks, pBuf); - *pContinue = (DS_BUF_LOW == updateStatus(pDeleter) ? true : false); + + tsem_wait(&pInserter->ready); + + if (pInserter->submitRes.code) { + return pInserter->submitRes.code; + } + + *pContinue = true; + return TSDB_CODE_SUCCESS; } static void endPut(struct SDataSinkHandle* pHandle, uint64_t useconds) { - SDataInserterHandle* pDeleter = (SDataInserterHandle*)pHandle; - taosThreadMutexLock(&pDeleter->mutex); - pDeleter->queryEnd = true; - pDeleter->useconds = useconds; - taosThreadMutexUnlock(&pDeleter->mutex); -} - -static void getDataLength(SDataSinkHandle* pHandle, int32_t* pLen, bool* pQueryEnd) { - SDataInserterHandle* pDeleter = (SDataInserterHandle*)pHandle; - if (taosQueueEmpty(pDeleter->pDataBlocks)) { - *pQueryEnd = pDeleter->queryEnd; - *pLen = 0; - return; - } - - SDataInserterBuf* pBuf = NULL; - taosReadQitem(pDeleter->pDataBlocks, (void**)&pBuf); - memcpy(&pDeleter->nextOutput, pBuf, sizeof(SDataInserterBuf)); - taosFreeQitem(pBuf); - *pLen = ((SDataCacheEntry*)(pDeleter->nextOutput.pData))->dataLen; - *pQueryEnd = pDeleter->queryEnd; - qDebug("got data len %d, row num %d in sink", *pLen, ((SDataCacheEntry*)(pDeleter->nextOutput.pData))->numOfRows); -} - -static int32_t getDataBlock(SDataSinkHandle* pHandle, SOutputData* pOutput) { - SDataInserterHandle* pDeleter = (SDataInserterHandle*)pHandle; - if (NULL == pDeleter->nextOutput.pData) { - assert(pDeleter->queryEnd); - pOutput->useconds = pDeleter->useconds; - pOutput->precision = pDeleter->pSchema->precision; - pOutput->bufStatus = DS_BUF_EMPTY; - pOutput->queryEnd = pDeleter->queryEnd; - return TSDB_CODE_SUCCESS; - } - SDataCacheEntry* pEntry = (SDataCacheEntry*)(pDeleter->nextOutput.pData); - memcpy(pOutput->pData, pEntry->data, pEntry->dataLen); - pOutput->numOfRows = pEntry->numOfRows; - pOutput->numOfCols = pEntry->numOfCols; - pOutput->compressed = pEntry->compressed; - - atomic_sub_fetch_64(&pDeleter->cachedSize, pEntry->dataLen); - atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); - - taosMemoryFreeClear(pDeleter->nextOutput.pData); // todo persistent - pOutput->bufStatus = updateStatus(pDeleter); - taosThreadMutexLock(&pDeleter->mutex); - pOutput->queryEnd = pDeleter->queryEnd; - pOutput->useconds = pDeleter->useconds; - pOutput->precision = pDeleter->pSchema->precision; - taosThreadMutexUnlock(&pDeleter->mutex); - - return TSDB_CODE_SUCCESS; + SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; + taosThreadMutexLock(&pInserter->mutex); + pInserter->queryEnd = true; + pInserter->useconds = useconds; + taosThreadMutexUnlock(&pInserter->mutex); } static int32_t destroyDataSinker(SDataSinkHandle* pHandle) { - SDataInserterHandle* pDeleter = (SDataInserterHandle*)pHandle; - atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pDeleter->cachedSize); - taosMemoryFreeClear(pDeleter->nextOutput.pData); - while (!taosQueueEmpty(pDeleter->pDataBlocks)) { - SDataInserterBuf* pBuf = NULL; - taosReadQitem(pDeleter->pDataBlocks, (void**)&pBuf); - taosMemoryFreeClear(pBuf->pData); - taosFreeQitem(pBuf); - } - taosCloseQueue(pDeleter->pDataBlocks); - taosThreadMutexDestroy(&pDeleter->mutex); + SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; + atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pInserter->cachedSize); + taosArrayDestroy(pInserter->pDataBlocks); + taosMemoryFree(pInserter->pSchema); + taosThreadMutexDestroy(&pInserter->mutex); return TSDB_CODE_SUCCESS; } @@ -230,25 +188,39 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat return TSDB_CODE_QRY_OUT_OF_MEMORY; } - SDataDeleterNode* pDeleterNode = (SDataDeleterNode *)pDataSink; + SDataDeleterNode* pInserterNode = (SQueryInserterNode *)pDataSink; inserter->sink.fPut = putDataBlock; inserter->sink.fEndPut = endPut; - inserter->sink.fGetLen = getDataLength; - inserter->sink.fGetData = getDataBlock; + inserter->sink.fGetLen = NULL; + inserter->sink.fGetData = NULL; inserter->sink.fDestroy = destroyDataSinker; inserter->sink.fGetCacheSize = getCacheSize; inserter->pManager = pManager; - inserter->pDeleter = pDeleterNode; - inserter->pSchema = pDataSink->pInputDataBlockDesc; + inserter->pNode = pInserterNode; inserter->pParam = pParam; inserter->status = DS_BUF_EMPTY; inserter->queryEnd = false; - inserter->pDataBlocks = taosOpenQueue(); + + int64_t suid = 0; + int32_t code = tsdbGetTableSchema(inserter->pParam->readHandle->vnode, pInserterNode->tableId, &inserter->pSchema, &suid); + if (code) { + return code; + } + + if (pInserterNode->suid != suid) { + terrno = TSDB_CODE_TDB_INVALID_TABLE_ID; + return terrno; + } + + inserter->pDataBlocks = taosArrayInit(1, POINTER_BYTES); taosThreadMutexInit(&inserter->mutex, NULL); if (NULL == inserter->pDataBlocks) { terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; return TSDB_CODE_QRY_OUT_OF_MEMORY; } + + tsem_init(&inserter->ready, 0, 0); + *pHandle = inserter; return TSDB_CODE_SUCCESS; } diff --git a/source/libs/executor/src/dataSinkMgt.c b/source/libs/executor/src/dataSinkMgt.c index 498171e88c..21f4ca24f1 100644 --- a/source/libs/executor/src/dataSinkMgt.c +++ b/source/libs/executor/src/dataSinkMgt.c @@ -40,6 +40,8 @@ int32_t dsCreateDataSinker(const SDataSinkNode *pDataSink, DataSinkHandle* pHand return createDataDispatcher(&gDataSinkManager, pDataSink, pHandle); case QUERY_NODE_PHYSICAL_PLAN_DELETE: return createDataDeleter(&gDataSinkManager, pDataSink, pHandle, pParam); + case QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT: + return createDataInserter(&gDataSinkManager, pDataSink, pHandle, pParam); } return TSDB_CODE_FAILED; } diff --git a/source/libs/executor/src/executorMain.c b/source/libs/executor/src/executorMain.c index ed78e4173a..f651069a3a 100644 --- a/source/libs/executor/src/executorMain.c +++ b/source/libs/executor/src/executorMain.c @@ -52,7 +52,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId, if (handle) { void* pSinkParam = NULL; - code = createDataSinkParam(pSubplan->pDataSink, &pSinkParam, pTaskInfo); + code = createDataSinkParam(pSubplan->pDataSink, &pSinkParam, pTaskInfo, readHandle); if (code != TSDB_CODE_SUCCESS) { goto _error; } diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 25b61e15c3..0833cdd578 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -1992,7 +1992,7 @@ static void destroySendMsgInfo(SMsgSendInfo* pMsgBody) { taosMemoryFreeClear(pMsgBody); } -void qProcessFetchRsp(void* parent, SRpcMsg* pMsg, SEpSet* pEpSet) { +void qProcessRspMsg(void* parent, SRpcMsg* pMsg, SEpSet* pEpSet) { SMsgSendInfo* pSendInfo = (SMsgSendInfo*)pMsg->info.ahandle; assert(pMsg->info.ahandle != NULL); @@ -4687,10 +4687,20 @@ int32_t decodeOperator(SOperatorInfo* ops, const char* result, int32_t length) { return TDB_CODE_SUCCESS; } -int32_t createDataSinkParam(SDataSinkNode* pNode, void** pParam, qTaskInfo_t* pTaskInfo) { +int32_t createDataSinkParam(SDataSinkNode* pNode, void** pParam, qTaskInfo_t* pTaskInfo, SReadHandle* readHandle) { SExecTaskInfo* pTask = *(SExecTaskInfo**)pTaskInfo; switch (pNode->type) { + case QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT: { + SInserterParam* pInserterParam = taosMemoryCalloc(1, sizeof(SInserterParam)); + if (NULL == pInserterParam) { + return TSDB_CODE_OUT_OF_MEMORY; + } + pInserterParam->readHandle = readHandle; + + *pParam = pInserterParam; + break; + } case QUERY_NODE_PHYSICAL_PLAN_DELETE: { SDeleterParam* pDeleterParam = taosMemoryCalloc(1, sizeof(SDeleterParam)); if (NULL == pDeleterParam) { diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index c2beb8a743..8d99f145b3 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -6241,7 +6241,7 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) { break; case QUERY_NODE_INSERT_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; - pQuery->msgType = TDMT_VND_SUBMIT; + pQuery->msgType = TDMT_SCH_QUERY; break; case QUERY_NODE_VNODE_MODIF_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; diff --git a/source/libs/qworker/inc/qwInt.h b/source/libs/qworker/inc/qwInt.h index eb10a2fdd6..4c92611a54 100644 --- a/source/libs/qworker/inc/qwInt.h +++ b/source/libs/qworker/inc/qwInt.h @@ -80,12 +80,19 @@ typedef struct SQWDebug { extern SQWDebug gQWDebug; +typedef struct SQWMsgInfo { + int8_t taskType; + int8_t explain; + int8_t needFetch; +} SQWMsgInfo; + typedef struct SQWMsg { void *node; int32_t code; int32_t msgType; char *msg; int32_t msgLen; + SQWMsgInfo msgInfo; SRpcHandleInfo connInfo; } SQWMsg; @@ -122,9 +129,11 @@ typedef struct SQWTaskCtx { int8_t phase; int8_t taskType; int8_t explain; + int8_t needFetch; int32_t queryType; int32_t execId; + bool queryRsped; bool queryFetched; bool queryEnd; bool queryContinue; @@ -161,7 +170,7 @@ typedef struct SQWMsgStat { uint64_t queryProcessed; uint64_t cqueryProcessed; uint64_t fetchProcessed; - uint64_t fetchRspProcessed; + uint64_t rspProcessed; uint64_t cancelProcessed; uint64_t dropProcessed; uint64_t hbProcessed; @@ -211,8 +220,8 @@ typedef struct SQWorkerMgmt { #define QW_STAT_GET(_item) atomic_load_64(&(_item)) #define QW_GET_EVENT(ctx, event) atomic_load_8(&(ctx)->events[event]) -#define QW_IS_EVENT_RECEIVED(ctx, event) (QW_GET_EVENT(ctx, event) == QW_EVENT_RECEIVED) -#define QW_IS_EVENT_PROCESSED(ctx, event) (QW_GET_EVENT(ctx, event) == QW_EVENT_PROCESSED) +#define QW_EVENT_RECEIVED(ctx, event) (QW_GET_EVENT(ctx, event) == QW_EVENT_RECEIVED) +#define QW_EVENT_PROCESSED(ctx, event) (QW_GET_EVENT(ctx, event) == QW_EVENT_PROCESSED) #define QW_SET_EVENT_RECEIVED(ctx, event) atomic_store_8(&(ctx)->events[event], QW_EVENT_RECEIVED) #define QW_SET_EVENT_PROCESSED(ctx, event) atomic_store_8(&(ctx)->events[event], QW_EVENT_PROCESSED) @@ -221,13 +230,8 @@ typedef struct SQWorkerMgmt { #define QW_SET_RSP_CODE(ctx, code) atomic_store_32(&(ctx)->rspCode, code) #define QW_UPDATE_RSP_CODE(ctx, code) atomic_val_compare_exchange_32(&(ctx)->rspCode, 0, code) -#define QW_IS_QUERY_RUNNING(ctx) (QW_GET_PHASE(ctx) == QW_PHASE_PRE_QUERY || QW_GET_PHASE(ctx) == QW_PHASE_PRE_CQUERY) +#define QW_QUERY_RUNNING(ctx) (QW_GET_PHASE(ctx) == QW_PHASE_PRE_QUERY || QW_GET_PHASE(ctx) == QW_PHASE_PRE_CQUERY) -#define QW_TASK_NOT_EXIST(code) (TSDB_CODE_QRY_SCH_NOT_EXIST == (code) || TSDB_CODE_QRY_TASK_NOT_EXIST == (code)) -#define QW_TASK_ALREADY_EXIST(code) (TSDB_CODE_QRY_TASK_ALREADY_EXIST == (code)) -#define QW_TASK_READY(status) \ - (status == JOB_TASK_STATUS_SUCC || status == JOB_TASK_STATUS_FAIL || status == JOB_TASK_STATUS_CANCELLED || \ - status == JOB_TASK_STATUS_PART_SUCC) #define QW_SET_QTID(id, qId, tId, eId) \ do { \ *(uint64_t *)(id) = (qId); \ diff --git a/source/libs/qworker/inc/qwMsg.h b/source/libs/qworker/inc/qwMsg.h index 9e9d1f44cb..b2205a46f1 100644 --- a/source/libs/qworker/inc/qwMsg.h +++ b/source/libs/qworker/inc/qwMsg.h @@ -25,7 +25,7 @@ extern "C" { int32_t qwAbortPrerocessQuery(QW_FPARAMS_DEF); int32_t qwPrerocessQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg); -int32_t qwProcessQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg, int8_t taskType, int8_t explain, const char* sql); +int32_t qwProcessQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg, const char* sql); int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg); int32_t qwProcessReady(QW_FPARAMS_DEF, SQWMsg *qwMsg); int32_t qwProcessFetch(QW_FPARAMS_DEF, SQWMsg *qwMsg); diff --git a/source/libs/qworker/src/qwMsg.c b/source/libs/qworker/src/qwMsg.c index cc4228f7c7..94b6ddd6a2 100644 --- a/source/libs/qworker/src/qwMsg.c +++ b/source/libs/qworker/src/qwMsg.c @@ -366,10 +366,14 @@ int32_t qWorkerProcessQueryMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int int32_t eId = msg->execId; SQWMsg qwMsg = {.node = node, .msg = msg->msg + msg->sqlLen, .msgLen = msg->phyLen, .connInfo = pMsg->info, .msgType = pMsg->msgType}; + qwMsg.msgInfo.explain = msg->explain; + qwMsg.msgInfo.taskType = msg->taskType; + qwMsg.msgInfo.needFetch = msg->needFetch; + char * sql = strndup(msg->msg, msg->sqlLen); QW_SCH_TASK_DLOG("processQuery start, node:%p, type:%s, handle:%p, sql:%s", node, TMSG_INFO(pMsg->msgType), pMsg->info.handle, sql); - QW_ERR_RET(qwProcessQuery(QW_FPARAMS(), &qwMsg, msg->taskType, msg->explain, sql)); + QW_ERR_RET(qwProcessQuery(QW_FPARAMS(), &qwMsg, sql)); QW_SCH_TASK_DLOG("processQuery end, node:%p", node); return TSDB_CODE_SUCCESS; @@ -447,14 +451,14 @@ int32_t qWorkerProcessFetchMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int return TSDB_CODE_SUCCESS; } -int32_t qWorkerProcessFetchRsp(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int64_t ts) { +int32_t qWorkerProcessRspMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int64_t ts) { SQWorker * mgmt = (SQWorker *)qWorkerMgmt; if (mgmt) { qwUpdateTimeInQueue(mgmt, ts, FETCH_QUEUE); - QW_STAT_INC(mgmt->stat.msgStat.fetchRspProcessed, 1); + QW_STAT_INC(mgmt->stat.msgStat.rspProcessed, 1); } - qProcessFetchRsp(NULL, pMsg, NULL); + qProcessRspMsg(NULL, pMsg, NULL); pMsg->pCont = NULL; return TSDB_CODE_SUCCESS; } diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c index b8a2f911bc..ea12ca55d4 100644 --- a/source/libs/qworker/src/qworker.c +++ b/source/libs/qworker/src/qworker.c @@ -123,11 +123,11 @@ int32_t qwExecTask(QW_FPARAMS_DEF, SQWTaskCtx *ctx, bool *queryEnd) { break; } - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_READY) && execNum >= QW_DEFAULT_SHORT_RUN_TIMES) { + if (ctx->needFetch && (!ctx->queryRsped) && execNum >= QW_DEFAULT_SHORT_RUN_TIMES) { break; } - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { + if (QW_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { break; } @@ -293,7 +293,6 @@ int32_t qwGetDeleteResFromSink(QW_FPARAMS_DEF, SQWTaskCtx *ctx, int32_t *dataLen int32_t qwHandlePrePhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *input, SQWPhaseOutput *output) { int32_t code = 0; SQWTaskCtx *ctx = NULL; - SRpcHandleInfo *cancelConnection = NULL; QW_TASK_DLOG("start to handle event at phase %s", qwPhaseStr(phase)); @@ -314,13 +313,13 @@ int32_t qwHandlePrePhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *inpu switch (phase) { case QW_PHASE_PRE_QUERY: { - if (QW_IS_EVENT_PROCESSED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_PROCESSED(ctx, QW_EVENT_DROP)) { QW_TASK_ELOG("task already dropped at wrong phase %s", qwPhaseStr(phase)); QW_ERR_JRET(TSDB_CODE_QRY_TASK_STATUS_ERROR); break; } - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { QW_ERR_JRET(qwDropTask(QW_FPARAMS())); //qwBuildAndSendDropRsp(&ctx->ctrlConnInfo, code); @@ -334,29 +333,29 @@ int32_t qwHandlePrePhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *inpu break; } case QW_PHASE_PRE_FETCH: { - if (QW_IS_EVENT_PROCESSED(ctx, QW_EVENT_DROP) || QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_PROCESSED(ctx, QW_EVENT_DROP) || QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { QW_TASK_WLOG("task dropping or already dropped, phase:%s", qwPhaseStr(phase)); QW_ERR_JRET(TSDB_CODE_QRY_TASK_DROPPED); } - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { + if (QW_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { QW_TASK_WLOG("last fetch still not processed, phase:%s", qwPhaseStr(phase)); QW_ERR_JRET(TSDB_CODE_QRY_DUPLICATTED_OPERATION); } - if (!QW_IS_EVENT_PROCESSED(ctx, QW_EVENT_READY)) { + if (!ctx->queryRsped) { QW_TASK_ELOG("ready msg has not been processed, phase:%s", qwPhaseStr(phase)); QW_ERR_JRET(TSDB_CODE_QRY_TASK_MSG_ERROR); } break; } case QW_PHASE_PRE_CQUERY: { - if (QW_IS_EVENT_PROCESSED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_PROCESSED(ctx, QW_EVENT_DROP)) { QW_TASK_WLOG("task already dropped, phase:%s", qwPhaseStr(phase)); QW_ERR_JRET(TSDB_CODE_QRY_TASK_DROPPED); } - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { QW_ERR_JRET(qwDropTask(QW_FPARAMS())); //qwBuildAndSendDropRsp(&ctx->ctrlConnInfo, code); @@ -385,11 +384,6 @@ _return: qwReleaseTaskCtx(mgmt, ctx); } - if (cancelConnection) { - qwBuildAndSendCancelRsp(cancelConnection, code); - QW_TASK_DLOG("cancel rsp send, handle:%p, code:%x - %s", cancelConnection->handle, code, tstrerror(code)); - } - if (code != TSDB_CODE_SUCCESS) { QW_TASK_ELOG("end to handle event at phase %s, code:%s", qwPhaseStr(phase), tstrerror(code)); } else { @@ -411,7 +405,7 @@ int32_t qwHandlePostPhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *inp QW_LOCK(QW_WRITE, &ctx->lock); - if (QW_IS_EVENT_PROCESSED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_PROCESSED(ctx, QW_EVENT_DROP)) { QW_TASK_WLOG("task already dropped, phase:%s", qwPhaseStr(phase)); QW_ERR_JRET(TSDB_CODE_QRY_TASK_DROPPED); } @@ -420,10 +414,10 @@ int32_t qwHandlePostPhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *inp connInfo = ctx->ctrlConnInfo; rspConnection = &connInfo; - QW_SET_EVENT_PROCESSED(ctx, QW_EVENT_READY); + ctx->queryRsped = true; } - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { if (QW_PHASE_POST_FETCH == phase) { QW_TASK_WLOG("drop received at wrong phase %s", qwPhaseStr(phase)); QW_ERR_JRET(TSDB_CODE_QRY_APP_ERROR); @@ -512,7 +506,7 @@ _return: } -int32_t qwProcessQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg, int8_t taskType, int8_t explain, const char* sql) { +int32_t qwProcessQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg, const char* sql) { int32_t code = 0; bool queryRsped = false; SSubplan *plan = NULL; @@ -525,8 +519,9 @@ int32_t qwProcessQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg, int8_t taskType, int8_t ex QW_ERR_JRET(qwGetTaskCtx(QW_FPARAMS(), &ctx)); - ctx->taskType = taskType; - ctx->explain = explain; + ctx->taskType = qwMsg->msgInfo.taskType; + ctx->explain = qwMsg->msgInfo.explain; + ctx->needFetch = qwMsg->msgInfo.needFetch; ctx->queryType = qwMsg->msgType; QW_TASK_DLOGL("subplan json string, len:%d, %s", qwMsg->msgLen, qwMsg->msg); @@ -596,7 +591,7 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) { QW_ERR_JRET(qwExecTask(QW_FPARAMS(), ctx, &queryEnd)); - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { + if (QW_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { SOutputData sOutput = {0}; QW_ERR_JRET(qwGetQueryResFromSink(QW_FPARAMS(), ctx, &dataLen, &rsp, &sOutput)); @@ -633,7 +628,7 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) { break; } - if (code && QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { + if (code && QW_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) { QW_SET_EVENT_PROCESSED(ctx, QW_EVENT_FETCH); qwFreeFetchRsp(rsp); rsp = NULL; @@ -695,7 +690,7 @@ int32_t qwProcessFetch(QW_FPARAMS_DEF, SQWMsg *qwMsg) { locked = true; // RC WARNING - if (QW_IS_QUERY_RUNNING(ctx)) { + if (QW_QUERY_RUNNING(ctx)) { atomic_store_8((int8_t *)&ctx->queryContinue, 1); } else if (0 == atomic_load_8((int8_t *)&ctx->queryInQueue)) { qwUpdateTaskStatus(QW_FPARAMS(), JOB_TASK_STATUS_EXEC); @@ -742,12 +737,12 @@ int32_t qwProcessDrop(QW_FPARAMS_DEF, SQWMsg *qwMsg) { locked = true; - if (QW_IS_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { + if (QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) { QW_TASK_WLOG_E("task already dropping"); QW_ERR_JRET(TSDB_CODE_QRY_DUPLICATTED_OPERATION); } - if (QW_IS_QUERY_RUNNING(ctx)) { + if (QW_QUERY_RUNNING(ctx)) { QW_ERR_JRET(qwKillTaskHandle(QW_FPARAMS(), ctx)); qwUpdateTaskStatus(QW_FPARAMS(), JOB_TASK_STATUS_DROP); } else if (ctx->phase > 0) { diff --git a/source/libs/scheduler/inc/schInt.h b/source/libs/scheduler/inc/schInt.h index 8e8652aab5..ff5ce037e7 100644 --- a/source/libs/scheduler/inc/schInt.h +++ b/source/libs/scheduler/inc/schInt.h @@ -296,8 +296,8 @@ extern SSchedulerMgmt schMgmt; #define SCH_TASK_ID(_task) ((_task) ? (_task)->taskId : -1) #define SCH_TASK_EID(_task) ((_task) ? (_task)->execId : -1) -#define SCH_IS_DATA_SRC_QRY_TASK(task) ((task)->plan->subplanType == SUBPLAN_TYPE_SCAN) -#define SCH_IS_DATA_SRC_TASK(task) (((task)->plan->subplanType == SUBPLAN_TYPE_SCAN) || ((task)->plan->subplanType == SUBPLAN_TYPE_MODIFY)) +#define SCH_IS_DATA_BIND_QRY_TASK(task) ((task)->plan->subplanType == SUBPLAN_TYPE_SCAN) +#define SCH_IS_DATA_BIND_TASK(task) (((task)->plan->subplanType == SUBPLAN_TYPE_SCAN) || ((task)->plan->subplanType == SUBPLAN_TYPE_MODIFY)) #define SCH_IS_LEAF_TASK(_job, _task) (((_task)->level->level + 1) == (_job)->levelNum) #define SCH_SET_TASK_STATUS(task, st) atomic_store_8(&(task)->status, st) @@ -317,7 +317,7 @@ extern SSchedulerMgmt schMgmt; #define SCH_SET_JOB_NEED_FLOW_CTRL(_job) (_job)->attr.needFlowCtrl = true #define SCH_JOB_NEED_FLOW_CTRL(_job) ((_job)->attr.needFlowCtrl) -#define SCH_TASK_NEED_FLOW_CTRL(_job, _task) (SCH_IS_DATA_SRC_QRY_TASK(_task) && SCH_JOB_NEED_FLOW_CTRL(_job) && SCH_IS_LEVEL_UNFINISHED((_task)->level)) +#define SCH_TASK_NEED_FLOW_CTRL(_job, _task) (SCH_IS_DATA_BIND_QRY_TASK(_task) && SCH_JOB_NEED_FLOW_CTRL(_job) && SCH_IS_LEVEL_UNFINISHED((_task)->level)) #define SCH_SET_JOB_TYPE(_job, type) do { if ((type) != SUBPLAN_TYPE_MODIFY) { (_job)->attr.queryJob = true; } } while (0) #define SCH_IS_QUERY_JOB(_job) ((_job)->attr.queryJob) diff --git a/source/libs/scheduler/src/schJob.c b/source/libs/scheduler/src/schJob.c index 858f68e7ae..a305a127e0 100644 --- a/source/libs/scheduler/src/schJob.c +++ b/source/libs/scheduler/src/schJob.c @@ -247,7 +247,7 @@ int32_t schBuildTaskRalation(SSchJob *pJob, SHashObj *planToTask) { int32_t schAppendJobDataSrc(SSchJob *pJob, SSchTask *pTask) { - if (!SCH_IS_DATA_SRC_QRY_TASK(pTask)) { + if (!SCH_IS_DATA_BIND_QRY_TASK(pTask)) { return TSDB_CODE_SUCCESS; } diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c index 03a247f828..263401d20e 100644 --- a/source/libs/scheduler/src/schRemote.c +++ b/source/libs/scheduler/src/schRemote.c @@ -981,6 +981,7 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr, pMsg->execId = htonl(pTask->execId); pMsg->taskType = TASK_TYPE_TEMP; pMsg->explain = SCH_IS_EXPLAIN_JOB(pJob); + pMsg->needFetch = SCH_JOB_NEED_FETCH(pJob); pMsg->phyLen = htonl(pTask->msgLen); pMsg->sqlLen = htonl(len); diff --git a/source/libs/scheduler/src/schTask.c b/source/libs/scheduler/src/schTask.c index e60006d75c..3d0889d258 100644 --- a/source/libs/scheduler/src/schTask.c +++ b/source/libs/scheduler/src/schTask.c @@ -274,7 +274,7 @@ int32_t schProcessOnTaskSuccess(SSchJob *pJob, SSchTask *pTask) { } int32_t schRescheduleTask(SSchJob *pJob, SSchTask *pTask) { - if (SCH_IS_DATA_SRC_QRY_TASK(pTask)) { + if (SCH_IS_DATA_BIND_TASK(pTask)) { return TSDB_CODE_SUCCESS; } @@ -311,7 +311,7 @@ int32_t schDoTaskRedirect(SSchJob *pJob, SSchTask *pTask, SDataBuf* pData, int32 pTask->lastMsgType = 0; memset(&pTask->succeedAddr, 0, sizeof(pTask->succeedAddr)); - if (SCH_IS_DATA_SRC_QRY_TASK(pTask)) { + if (SCH_IS_DATA_BIND_TASK(pTask)) { if (pData) { SCH_ERR_JRET(schUpdateTaskCandidateAddr(pJob, pTask, pData->pEpSet)); } @@ -356,7 +356,7 @@ _return: int32_t schHandleRedirect(SSchJob *pJob, SSchTask *pTask, SDataBuf* pData, int32_t rspCode) { int32_t code = 0; - if (SCH_IS_DATA_SRC_QRY_TASK(pTask)) { + if (SCH_IS_DATA_BIND_TASK(pTask)) { if (NULL == pData->pEpSet) { SCH_TASK_ELOG("no epset updated while got error %s", tstrerror(rspCode)); SCH_ERR_JRET(rspCode); @@ -490,7 +490,7 @@ int32_t schTaskCheckSetRetry(SSchJob *pJob, SSchTask *pTask, int32_t errCode, bo return TSDB_CODE_SUCCESS; } - if (SCH_IS_DATA_SRC_TASK(pTask)) { + if (SCH_IS_DATA_BIND_TASK(pTask)) { if ((pTask->execId + 1) >= SCH_TASK_NUM_OF_EPS(&pTask->plan->execNode)) { *needRetry = false; SCH_TASK_DLOG("task no more retry since all ep tried, execId:%d, epNum:%d", pTask->execId, @@ -526,7 +526,7 @@ int32_t schHandleTaskRetry(SSchJob *pJob, SSchTask *pTask) { schDeregisterTaskHb(pJob, pTask); - if (SCH_IS_DATA_SRC_TASK(pTask)) { + if (SCH_IS_DATA_BIND_TASK(pTask)) { SCH_SWITCH_EPSET(&pTask->plan->execNode); } else { int32_t candidateNum = taosArrayGetSize(pTask->candidateAddrs); @@ -594,7 +594,7 @@ int32_t schSetTaskCandidateAddrs(SSchJob *pJob, SSchTask *pTask) { return TSDB_CODE_SUCCESS; } - if (SCH_IS_DATA_SRC_QRY_TASK(pTask)) { + if (SCH_IS_DATA_BIND_TASK(pTask)) { SCH_TASK_ELOG("no execNode specifed for data src task, numOfEps:%d", pTask->plan->execNode.epSet.numOfEps); SCH_ERR_RET(TSDB_CODE_QRY_APP_ERROR); } From 025b7782e1683363588709989376a8cd928199c5 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Wed, 6 Jul 2022 18:47:33 +0800 Subject: [PATCH 03/27] feat: add db option 'cachelastsize' --- include/common/ttokendef.h | 379 +- include/libs/nodes/cmdnodes.h | 3 +- source/libs/nodes/src/nodesCodeFuncs.c | 4 +- source/libs/parser/inc/parAst.h | 1 + source/libs/parser/inc/sql.y | 2 + source/libs/parser/src/parAstCreater.c | 11 +- source/libs/parser/src/parTokenizer.c | 1 + source/libs/parser/src/parTranslater.c | 12 +- source/libs/parser/src/sql.c | 5871 ++++++++++--------- source/libs/parser/test/parInitialCTest.cpp | 7 +- 10 files changed, 3171 insertions(+), 3120 deletions(-) diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index 77a26fdf36..aab4ca4489 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -78,195 +78,196 @@ #define TK_EXISTS 60 #define TK_BUFFER 61 #define TK_CACHELAST 62 -#define TK_COMP 63 -#define TK_DURATION 64 -#define TK_NK_VARIABLE 65 -#define TK_FSYNC 66 -#define TK_MAXROWS 67 -#define TK_MINROWS 68 -#define TK_KEEP 69 -#define TK_PAGES 70 -#define TK_PAGESIZE 71 -#define TK_PRECISION 72 -#define TK_REPLICA 73 -#define TK_STRICT 74 -#define TK_WAL 75 -#define TK_VGROUPS 76 -#define TK_SINGLE_STABLE 77 -#define TK_RETENTIONS 78 -#define TK_SCHEMALESS 79 -#define TK_NK_COLON 80 -#define TK_TABLE 81 -#define TK_NK_LP 82 -#define TK_NK_RP 83 -#define TK_STABLE 84 -#define TK_ADD 85 -#define TK_COLUMN 86 -#define TK_MODIFY 87 -#define TK_RENAME 88 -#define TK_TAG 89 -#define TK_SET 90 -#define TK_NK_EQ 91 -#define TK_USING 92 -#define TK_TAGS 93 -#define TK_COMMENT 94 -#define TK_BOOL 95 -#define TK_TINYINT 96 -#define TK_SMALLINT 97 -#define TK_INT 98 -#define TK_INTEGER 99 -#define TK_BIGINT 100 -#define TK_FLOAT 101 -#define TK_DOUBLE 102 -#define TK_BINARY 103 -#define TK_TIMESTAMP 104 -#define TK_NCHAR 105 -#define TK_UNSIGNED 106 -#define TK_JSON 107 -#define TK_VARCHAR 108 -#define TK_MEDIUMBLOB 109 -#define TK_BLOB 110 -#define TK_VARBINARY 111 -#define TK_DECIMAL 112 -#define TK_MAX_DELAY 113 -#define TK_WATERMARK 114 -#define TK_ROLLUP 115 -#define TK_TTL 116 -#define TK_SMA 117 -#define TK_FIRST 118 -#define TK_LAST 119 -#define TK_SHOW 120 -#define TK_DATABASES 121 -#define TK_TABLES 122 -#define TK_STABLES 123 -#define TK_MNODES 124 -#define TK_MODULES 125 -#define TK_QNODES 126 -#define TK_FUNCTIONS 127 -#define TK_INDEXES 128 -#define TK_ACCOUNTS 129 -#define TK_APPS 130 -#define TK_CONNECTIONS 131 -#define TK_LICENCE 132 -#define TK_GRANTS 133 -#define TK_QUERIES 134 -#define TK_SCORES 135 -#define TK_TOPICS 136 -#define TK_VARIABLES 137 -#define TK_BNODES 138 -#define TK_SNODES 139 -#define TK_CLUSTER 140 -#define TK_TRANSACTIONS 141 -#define TK_DISTRIBUTED 142 -#define TK_CONSUMERS 143 -#define TK_SUBSCRIPTIONS 144 -#define TK_LIKE 145 -#define TK_INDEX 146 -#define TK_FUNCTION 147 -#define TK_INTERVAL 148 -#define TK_TOPIC 149 -#define TK_AS 150 -#define TK_WITH 151 -#define TK_META 152 -#define TK_CONSUMER 153 -#define TK_GROUP 154 -#define TK_DESC 155 -#define TK_DESCRIBE 156 -#define TK_RESET 157 -#define TK_QUERY 158 -#define TK_CACHE 159 -#define TK_EXPLAIN 160 -#define TK_ANALYZE 161 -#define TK_VERBOSE 162 -#define TK_NK_BOOL 163 -#define TK_RATIO 164 -#define TK_NK_FLOAT 165 -#define TK_COMPACT 166 -#define TK_VNODES 167 -#define TK_IN 168 -#define TK_OUTPUTTYPE 169 -#define TK_AGGREGATE 170 -#define TK_BUFSIZE 171 -#define TK_STREAM 172 -#define TK_INTO 173 -#define TK_TRIGGER 174 -#define TK_AT_ONCE 175 -#define TK_WINDOW_CLOSE 176 -#define TK_IGNORE 177 -#define TK_EXPIRED 178 -#define TK_KILL 179 -#define TK_CONNECTION 180 -#define TK_TRANSACTION 181 -#define TK_BALANCE 182 -#define TK_VGROUP 183 -#define TK_MERGE 184 -#define TK_REDISTRIBUTE 185 -#define TK_SPLIT 186 -#define TK_SYNCDB 187 -#define TK_DELETE 188 -#define TK_INSERT 189 -#define TK_NULL 190 -#define TK_NK_QUESTION 191 -#define TK_NK_ARROW 192 -#define TK_ROWTS 193 -#define TK_TBNAME 194 -#define TK_QSTARTTS 195 -#define TK_QENDTS 196 -#define TK_WSTARTTS 197 -#define TK_WENDTS 198 -#define TK_WDURATION 199 -#define TK_CAST 200 -#define TK_NOW 201 -#define TK_TODAY 202 -#define TK_TIMEZONE 203 -#define TK_CLIENT_VERSION 204 -#define TK_SERVER_VERSION 205 -#define TK_SERVER_STATUS 206 -#define TK_CURRENT_USER 207 -#define TK_COUNT 208 -#define TK_LAST_ROW 209 -#define TK_BETWEEN 210 -#define TK_IS 211 -#define TK_NK_LT 212 -#define TK_NK_GT 213 -#define TK_NK_LE 214 -#define TK_NK_GE 215 -#define TK_NK_NE 216 -#define TK_MATCH 217 -#define TK_NMATCH 218 -#define TK_CONTAINS 219 -#define TK_JOIN 220 -#define TK_INNER 221 -#define TK_SELECT 222 -#define TK_DISTINCT 223 -#define TK_WHERE 224 -#define TK_PARTITION 225 -#define TK_BY 226 -#define TK_SESSION 227 -#define TK_STATE_WINDOW 228 -#define TK_SLIDING 229 -#define TK_FILL 230 -#define TK_VALUE 231 -#define TK_NONE 232 -#define TK_PREV 233 -#define TK_LINEAR 234 -#define TK_NEXT 235 -#define TK_HAVING 236 -#define TK_RANGE 237 -#define TK_EVERY 238 -#define TK_ORDER 239 -#define TK_SLIMIT 240 -#define TK_SOFFSET 241 -#define TK_LIMIT 242 -#define TK_OFFSET 243 -#define TK_ASC 244 -#define TK_NULLS 245 -#define TK_ID 246 -#define TK_NK_BITNOT 247 -#define TK_VALUES 248 -#define TK_IMPORT 249 -#define TK_NK_SEMI 250 -#define TK_FILE 251 +#define TK_CACHELASTSIZE 63 +#define TK_COMP 64 +#define TK_DURATION 65 +#define TK_NK_VARIABLE 66 +#define TK_FSYNC 67 +#define TK_MAXROWS 68 +#define TK_MINROWS 69 +#define TK_KEEP 70 +#define TK_PAGES 71 +#define TK_PAGESIZE 72 +#define TK_PRECISION 73 +#define TK_REPLICA 74 +#define TK_STRICT 75 +#define TK_WAL 76 +#define TK_VGROUPS 77 +#define TK_SINGLE_STABLE 78 +#define TK_RETENTIONS 79 +#define TK_SCHEMALESS 80 +#define TK_NK_COLON 81 +#define TK_TABLE 82 +#define TK_NK_LP 83 +#define TK_NK_RP 84 +#define TK_STABLE 85 +#define TK_ADD 86 +#define TK_COLUMN 87 +#define TK_MODIFY 88 +#define TK_RENAME 89 +#define TK_TAG 90 +#define TK_SET 91 +#define TK_NK_EQ 92 +#define TK_USING 93 +#define TK_TAGS 94 +#define TK_COMMENT 95 +#define TK_BOOL 96 +#define TK_TINYINT 97 +#define TK_SMALLINT 98 +#define TK_INT 99 +#define TK_INTEGER 100 +#define TK_BIGINT 101 +#define TK_FLOAT 102 +#define TK_DOUBLE 103 +#define TK_BINARY 104 +#define TK_TIMESTAMP 105 +#define TK_NCHAR 106 +#define TK_UNSIGNED 107 +#define TK_JSON 108 +#define TK_VARCHAR 109 +#define TK_MEDIUMBLOB 110 +#define TK_BLOB 111 +#define TK_VARBINARY 112 +#define TK_DECIMAL 113 +#define TK_MAX_DELAY 114 +#define TK_WATERMARK 115 +#define TK_ROLLUP 116 +#define TK_TTL 117 +#define TK_SMA 118 +#define TK_FIRST 119 +#define TK_LAST 120 +#define TK_SHOW 121 +#define TK_DATABASES 122 +#define TK_TABLES 123 +#define TK_STABLES 124 +#define TK_MNODES 125 +#define TK_MODULES 126 +#define TK_QNODES 127 +#define TK_FUNCTIONS 128 +#define TK_INDEXES 129 +#define TK_ACCOUNTS 130 +#define TK_APPS 131 +#define TK_CONNECTIONS 132 +#define TK_LICENCE 133 +#define TK_GRANTS 134 +#define TK_QUERIES 135 +#define TK_SCORES 136 +#define TK_TOPICS 137 +#define TK_VARIABLES 138 +#define TK_BNODES 139 +#define TK_SNODES 140 +#define TK_CLUSTER 141 +#define TK_TRANSACTIONS 142 +#define TK_DISTRIBUTED 143 +#define TK_CONSUMERS 144 +#define TK_SUBSCRIPTIONS 145 +#define TK_LIKE 146 +#define TK_INDEX 147 +#define TK_FUNCTION 148 +#define TK_INTERVAL 149 +#define TK_TOPIC 150 +#define TK_AS 151 +#define TK_WITH 152 +#define TK_META 153 +#define TK_CONSUMER 154 +#define TK_GROUP 155 +#define TK_DESC 156 +#define TK_DESCRIBE 157 +#define TK_RESET 158 +#define TK_QUERY 159 +#define TK_CACHE 160 +#define TK_EXPLAIN 161 +#define TK_ANALYZE 162 +#define TK_VERBOSE 163 +#define TK_NK_BOOL 164 +#define TK_RATIO 165 +#define TK_NK_FLOAT 166 +#define TK_COMPACT 167 +#define TK_VNODES 168 +#define TK_IN 169 +#define TK_OUTPUTTYPE 170 +#define TK_AGGREGATE 171 +#define TK_BUFSIZE 172 +#define TK_STREAM 173 +#define TK_INTO 174 +#define TK_TRIGGER 175 +#define TK_AT_ONCE 176 +#define TK_WINDOW_CLOSE 177 +#define TK_IGNORE 178 +#define TK_EXPIRED 179 +#define TK_KILL 180 +#define TK_CONNECTION 181 +#define TK_TRANSACTION 182 +#define TK_BALANCE 183 +#define TK_VGROUP 184 +#define TK_MERGE 185 +#define TK_REDISTRIBUTE 186 +#define TK_SPLIT 187 +#define TK_SYNCDB 188 +#define TK_DELETE 189 +#define TK_INSERT 190 +#define TK_NULL 191 +#define TK_NK_QUESTION 192 +#define TK_NK_ARROW 193 +#define TK_ROWTS 194 +#define TK_TBNAME 195 +#define TK_QSTARTTS 196 +#define TK_QENDTS 197 +#define TK_WSTARTTS 198 +#define TK_WENDTS 199 +#define TK_WDURATION 200 +#define TK_CAST 201 +#define TK_NOW 202 +#define TK_TODAY 203 +#define TK_TIMEZONE 204 +#define TK_CLIENT_VERSION 205 +#define TK_SERVER_VERSION 206 +#define TK_SERVER_STATUS 207 +#define TK_CURRENT_USER 208 +#define TK_COUNT 209 +#define TK_LAST_ROW 210 +#define TK_BETWEEN 211 +#define TK_IS 212 +#define TK_NK_LT 213 +#define TK_NK_GT 214 +#define TK_NK_LE 215 +#define TK_NK_GE 216 +#define TK_NK_NE 217 +#define TK_MATCH 218 +#define TK_NMATCH 219 +#define TK_CONTAINS 220 +#define TK_JOIN 221 +#define TK_INNER 222 +#define TK_SELECT 223 +#define TK_DISTINCT 224 +#define TK_WHERE 225 +#define TK_PARTITION 226 +#define TK_BY 227 +#define TK_SESSION 228 +#define TK_STATE_WINDOW 229 +#define TK_SLIDING 230 +#define TK_FILL 231 +#define TK_VALUE 232 +#define TK_NONE 233 +#define TK_PREV 234 +#define TK_LINEAR 235 +#define TK_NEXT 236 +#define TK_HAVING 237 +#define TK_RANGE 238 +#define TK_EVERY 239 +#define TK_ORDER 240 +#define TK_SLIMIT 241 +#define TK_SOFFSET 242 +#define TK_LIMIT 243 +#define TK_OFFSET 244 +#define TK_ASC 245 +#define TK_NULLS 246 +#define TK_ID 247 +#define TK_NK_BITNOT 248 +#define TK_VALUES 249 +#define TK_IMPORT 250 +#define TK_NK_SEMI 251 +#define TK_FILE 252 #define TK_NK_SPACE 300 #define TK_NK_COMMENT 301 diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index 134cd80487..04f4ee5ae7 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -51,7 +51,8 @@ extern "C" { typedef struct SDatabaseOptions { ENodeType type; int32_t buffer; - int8_t cachelast; + int8_t cacheLast; + int32_t cacheLastSize; int8_t compressionLevel; int32_t daysPerFile; SValueNode* pDaysPerFile; diff --git a/source/libs/nodes/src/nodesCodeFuncs.c b/source/libs/nodes/src/nodesCodeFuncs.c index 0bff063ea1..8045534f4f 100644 --- a/source/libs/nodes/src/nodesCodeFuncs.c +++ b/source/libs/nodes/src/nodesCodeFuncs.c @@ -3598,7 +3598,7 @@ static int32_t databaseOptionsToJson(const void* pObj, SJson* pJson) { int32_t code = tjsonAddIntegerToObject(pJson, jkDatabaseOptionsBuffer, pNode->buffer); if (TSDB_CODE_SUCCESS == code) { - code = tjsonAddIntegerToObject(pJson, jkDatabaseOptionsCachelast, pNode->cachelast); + code = tjsonAddIntegerToObject(pJson, jkDatabaseOptionsCachelast, pNode->cacheLast); } if (TSDB_CODE_SUCCESS == code) { code = tjsonAddIntegerToObject(pJson, jkDatabaseOptionsCompressionLevel, pNode->compressionLevel); @@ -3660,7 +3660,7 @@ static int32_t jsonToDatabaseOptions(const SJson* pJson, void* pObj) { int32_t code = tjsonGetIntValue(pJson, jkDatabaseOptionsBuffer, &pNode->buffer); if (TSDB_CODE_SUCCESS == code) { - code = tjsonGetTinyIntValue(pJson, jkDatabaseOptionsCachelast, &pNode->cachelast); + code = tjsonGetTinyIntValue(pJson, jkDatabaseOptionsCachelast, &pNode->cacheLast); } if (TSDB_CODE_SUCCESS == code) { code = tjsonGetTinyIntValue(pJson, jkDatabaseOptionsCompressionLevel, &pNode->compressionLevel); diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index 5c2dcadd4a..ce07a2f7db 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -39,6 +39,7 @@ typedef struct SAstCreateContext { typedef enum EDatabaseOptionType { DB_OPTION_BUFFER = 1, DB_OPTION_CACHELAST, + DB_OPTION_CACHELASTSIZE, DB_OPTION_COMP, DB_OPTION_DAYS, DB_OPTION_FSYNC, diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 7d919874d5..ba198ab8f1 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -171,6 +171,7 @@ exists_opt(A) ::= . db_options(A) ::= . { A = createDefaultDatabaseOptions(pCxt); } db_options(A) ::= db_options(B) BUFFER NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_BUFFER, &C); } db_options(A) ::= db_options(B) CACHELAST NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHELAST, &C); } +db_options(A) ::= db_options(B) CACHELASTSIZE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHELASTSIZE, &C); } db_options(A) ::= db_options(B) COMP NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_COMP, &C); } db_options(A) ::= db_options(B) DURATION NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); } db_options(A) ::= db_options(B) DURATION NK_VARIABLE(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); } @@ -197,6 +198,7 @@ alter_db_options(A) ::= alter_db_options(B) alter_db_option(C). %destructor alter_db_option { } alter_db_option(A) ::= BUFFER NK_INTEGER(B). { A.type = DB_OPTION_BUFFER; A.val = B; } alter_db_option(A) ::= CACHELAST NK_INTEGER(B). { A.type = DB_OPTION_CACHELAST; A.val = B; } +alter_db_option(A) ::= CACHELASTSIZE NK_INTEGER(B). { A.type = DB_OPTION_CACHELASTSIZE; A.val = B; } alter_db_option(A) ::= FSYNC NK_INTEGER(B). { A.type = DB_OPTION_FSYNC; A.val = B; } alter_db_option(A) ::= KEEP integer_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; } alter_db_option(A) ::= KEEP variable_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index e61c25b980..8fb00b3cdb 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -746,7 +746,8 @@ SNode* createDefaultDatabaseOptions(SAstCreateContext* pCxt) { SDatabaseOptions* pOptions = (SDatabaseOptions*)nodesMakeNode(QUERY_NODE_DATABASE_OPTIONS); CHECK_OUT_OF_MEM(pOptions); pOptions->buffer = TSDB_DEFAULT_BUFFER_PER_VNODE; - pOptions->cachelast = TSDB_DEFAULT_CACHE_LAST_ROW; + pOptions->cacheLast = TSDB_DEFAULT_CACHE_LAST_ROW; + pOptions->cacheLastSize = TSDB_DEFAULT_LAST_ROW_MEM; pOptions->compressionLevel = TSDB_DEFAULT_COMP_LEVEL; pOptions->daysPerFile = TSDB_DEFAULT_DAYS_PER_FILE; pOptions->fsyncPeriod = TSDB_DEFAULT_FSYNC_PERIOD; @@ -772,7 +773,8 @@ SNode* createAlterDatabaseOptions(SAstCreateContext* pCxt) { SDatabaseOptions* pOptions = (SDatabaseOptions*)nodesMakeNode(QUERY_NODE_DATABASE_OPTIONS); CHECK_OUT_OF_MEM(pOptions); pOptions->buffer = -1; - pOptions->cachelast = -1; + pOptions->cacheLast = -1; + pOptions->cacheLastSize = -1; pOptions->compressionLevel = -1; pOptions->daysPerFile = -1; pOptions->fsyncPeriod = -1; @@ -800,7 +802,10 @@ SNode* setDatabaseOption(SAstCreateContext* pCxt, SNode* pOptions, EDatabaseOpti ((SDatabaseOptions*)pOptions)->buffer = taosStr2Int32(((SToken*)pVal)->z, NULL, 10); break; case DB_OPTION_CACHELAST: - ((SDatabaseOptions*)pOptions)->cachelast = taosStr2Int8(((SToken*)pVal)->z, NULL, 10); + ((SDatabaseOptions*)pOptions)->cacheLast = taosStr2Int8(((SToken*)pVal)->z, NULL, 10); + break; + case DB_OPTION_CACHELASTSIZE: + ((SDatabaseOptions*)pOptions)->cacheLastSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10); break; case DB_OPTION_COMP: ((SDatabaseOptions*)pOptions)->compressionLevel = taosStr2Int8(((SToken*)pVal)->z, NULL, 10); diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c index 6736fea635..157adbc22c 100644 --- a/source/libs/parser/src/parTokenizer.c +++ b/source/libs/parser/src/parTokenizer.c @@ -53,6 +53,7 @@ static SKeyword keywordTable[] = { {"BY", TK_BY}, {"CACHE", TK_CACHE}, {"CACHELAST", TK_CACHELAST}, + {"CACHELASTSIZE", TK_CACHELASTSIZE}, {"CAST", TK_CAST}, {"CLIENT_VERSION", TK_CLIENT_VERSION}, {"CLUSTER", TK_CLUSTER}, diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 4d72772730..85dd8891c2 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -2988,7 +2988,8 @@ static int32_t buildCreateDbReq(STranslateContext* pCxt, SCreateDatabaseStmt* pS pReq->compression = pStmt->pOptions->compressionLevel; pReq->replications = pStmt->pOptions->replica; pReq->strict = pStmt->pOptions->strict; - pReq->cacheLastRow = pStmt->pOptions->cachelast; + pReq->cacheLastRow = pStmt->pOptions->cacheLast; + pReq->lastRowMem = pStmt->pOptions->cacheLastSize; pReq->schemaless = pStmt->pOptions->schemaless; pReq->ignoreExist = pStmt->ignoreExists; return buildCreateDbRetentions(pStmt->pOptions->pRetentions, pReq); @@ -3149,9 +3150,13 @@ static int32_t checkDatabaseOptions(STranslateContext* pCxt, const char* pDbName int32_t code = checkRangeOption(pCxt, "buffer", pOptions->buffer, TSDB_MIN_BUFFER_PER_VNODE, TSDB_MAX_BUFFER_PER_VNODE); if (TSDB_CODE_SUCCESS == code) { - code = checkRangeOption(pCxt, "cacheLast", pOptions->cachelast, TSDB_MIN_DB_CACHE_LAST_ROW, + code = checkRangeOption(pCxt, "cacheLast", pOptions->cacheLast, TSDB_MIN_DB_CACHE_LAST_ROW, TSDB_MAX_DB_CACHE_LAST_ROW); } + if (TSDB_CODE_SUCCESS == code) { + code = checkRangeOption(pCxt, "cacheLastSize", pOptions->cacheLastSize, TSDB_MIN_DB_LAST_ROW_MEM, + TSDB_MAX_DB_LAST_ROW_MEM); + } if (TSDB_CODE_SUCCESS == code) { code = checkRangeOption(pCxt, "compression", pOptions->compressionLevel, TSDB_MIN_COMP_LEVEL, TSDB_MAX_COMP_LEVEL); } @@ -3271,7 +3276,8 @@ static void buildAlterDbReq(STranslateContext* pCxt, SAlterDatabaseStmt* pStmt, pReq->fsyncPeriod = pStmt->pOptions->fsyncPeriod; pReq->walLevel = pStmt->pOptions->walLevel; pReq->strict = pStmt->pOptions->strict; - pReq->cacheLastRow = pStmt->pOptions->cachelast; + pReq->cacheLastRow = pStmt->pOptions->cacheLast; + pReq->lastRowMem = pStmt->pOptions->cacheLastSize; pReq->replications = pStmt->pOptions->replica; return; } diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index 84ce6acf6d..42b5a64989 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 375 +#define YYNOCODE 376 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SToken typedef union { int yyinit; ParseTOKENTYPE yy0; - SDataType yy34; - EJoinType yy162; - EOrder yy188; - SNode* yy212; - SAlterOption yy245; - EOperatorType yy290; - EFillMode yy294; - SToken yy329; - SNodeList* yy424; - ENullOrder yy607; - int64_t yy609; - int32_t yy610; - int8_t yy653; - bool yy737; + EJoinType yy52; + bool yy89; + SDataType yy224; + int32_t yy228; + SNode* yy248; + SAlterOption yy301; + ENullOrder yy345; + SToken yy401; + EOrder yy482; + int64_t yy525; + SNodeList* yy552; + EFillMode yy582; + int8_t yy695; + EOperatorType yy716; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -139,17 +139,17 @@ typedef union { #define ParseCTX_FETCH #define ParseCTX_STORE #define YYFALLBACK 1 -#define YYNSTATE 658 -#define YYNRULE 484 -#define YYNTOKEN 252 -#define YY_MAX_SHIFT 657 -#define YY_MIN_SHIFTREDUCE 959 -#define YY_MAX_SHIFTREDUCE 1442 -#define YY_ERROR_ACTION 1443 -#define YY_ACCEPT_ACTION 1444 -#define YY_NO_ACTION 1445 -#define YY_MIN_REDUCE 1446 -#define YY_MAX_REDUCE 1929 +#define YYNSTATE 660 +#define YYNRULE 486 +#define YYNTOKEN 253 +#define YY_MAX_SHIFT 659 +#define YY_MIN_SHIFTREDUCE 963 +#define YY_MAX_SHIFTREDUCE 1448 +#define YY_ERROR_ACTION 1449 +#define YY_ACCEPT_ACTION 1450 +#define YY_NO_ACTION 1451 +#define YY_MIN_REDUCE 1452 +#define YY_MAX_REDUCE 1937 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -216,654 +216,670 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2354) +#define YY_ACTTAB_COUNT (2440) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 378, 1907, 427, 509, 428, 1481, 435, 341, 428, 1481, - /* 10 */ 1625, 1627, 40, 38, 1906, 140, 1444, 71, 1904, 79, - /* 20 */ 336, 1447, 1244, 1511, 1583, 41, 39, 37, 36, 35, - /* 30 */ 117, 992, 522, 1319, 1764, 1242, 62, 31, 258, 1575, - /* 40 */ 1573, 1907, 103, 164, 1907, 102, 101, 100, 99, 98, - /* 50 */ 97, 96, 95, 94, 159, 546, 1314, 159, 1904, 14, - /* 60 */ 1580, 1904, 1782, 549, 549, 1250, 1782, 142, 1269, 1458, - /* 70 */ 574, 996, 997, 323, 539, 1734, 348, 573, 40, 38, - /* 80 */ 1382, 140, 1, 122, 479, 478, 336, 1632, 1244, 477, - /* 90 */ 1582, 551, 118, 474, 324, 444, 473, 472, 471, 1319, - /* 100 */ 1764, 1242, 1795, 1630, 654, 1469, 89, 1765, 576, 1767, - /* 110 */ 1768, 572, 538, 567, 61, 61, 1841, 1907, 1321, 1322, - /* 120 */ 303, 1837, 1314, 120, 624, 14, 44, 339, 1782, 143, - /* 130 */ 159, 1250, 1907, 1537, 1904, 140, 574, 548, 155, 1849, - /* 140 */ 1850, 1734, 1854, 573, 1582, 161, 1734, 103, 2, 1904, - /* 150 */ 102, 101, 100, 99, 98, 97, 96, 95, 94, 426, - /* 160 */ 219, 220, 430, 1245, 372, 1243, 1141, 1142, 1795, 346, - /* 170 */ 654, 1508, 91, 1765, 576, 1767, 1768, 572, 1269, 567, - /* 180 */ 434, 510, 1841, 430, 1321, 1322, 1840, 1837, 1446, 322, - /* 190 */ 1248, 1249, 1677, 1297, 1298, 1300, 1301, 1302, 1303, 1304, - /* 200 */ 569, 565, 1312, 1313, 1315, 1316, 1317, 1318, 1320, 1323, - /* 210 */ 1907, 535, 112, 111, 110, 109, 108, 107, 106, 105, - /* 220 */ 104, 302, 162, 159, 512, 213, 1676, 1904, 297, 1245, - /* 230 */ 71, 1243, 631, 630, 629, 344, 549, 628, 627, 626, - /* 240 */ 123, 621, 620, 619, 618, 617, 616, 615, 614, 133, - /* 250 */ 610, 61, 1576, 75, 162, 162, 1248, 1249, 61, 1297, - /* 260 */ 1298, 1300, 1301, 1302, 1303, 1304, 569, 565, 1312, 1313, - /* 270 */ 1315, 1316, 1317, 1318, 1320, 1323, 40, 38, 555, 342, - /* 280 */ 479, 478, 384, 1403, 336, 477, 1244, 140, 118, 474, - /* 290 */ 541, 536, 473, 472, 471, 495, 1582, 1319, 43, 1242, - /* 300 */ 1099, 598, 597, 596, 1103, 595, 1105, 1106, 594, 1108, - /* 310 */ 591, 1268, 1114, 588, 1116, 1117, 585, 582, 1907, 300, - /* 320 */ 1314, 1751, 484, 14, 532, 1401, 1402, 1404, 1405, 1250, - /* 330 */ 1468, 160, 1748, 40, 38, 1904, 1907, 494, 377, 522, - /* 340 */ 376, 336, 86, 1244, 1764, 1632, 2, 206, 1061, 159, - /* 350 */ 113, 205, 340, 1904, 1319, 119, 1242, 465, 1744, 1750, - /* 360 */ 325, 1630, 540, 1572, 1467, 487, 1244, 1580, 654, 481, - /* 370 */ 567, 1734, 1782, 522, 204, 1907, 1558, 1314, 1063, 1242, - /* 380 */ 550, 1267, 1321, 1322, 165, 1734, 1250, 573, 1905, 34, - /* 390 */ 33, 162, 1904, 41, 39, 37, 36, 35, 162, 56, - /* 400 */ 522, 1580, 55, 8, 1571, 1734, 73, 302, 432, 1250, - /* 410 */ 512, 382, 1795, 369, 1266, 1748, 90, 1765, 576, 1767, - /* 420 */ 1768, 572, 522, 567, 153, 654, 1841, 1245, 1580, 1243, - /* 430 */ 329, 1837, 154, 383, 444, 371, 367, 1619, 162, 1321, - /* 440 */ 1322, 1744, 1750, 218, 158, 1626, 1627, 1009, 654, 1008, - /* 450 */ 1580, 609, 1867, 567, 1248, 1249, 1680, 1297, 1298, 1300, - /* 460 */ 1301, 1302, 1303, 1304, 569, 565, 1312, 1313, 1315, 1316, - /* 470 */ 1317, 1318, 1320, 1323, 34, 33, 556, 1010, 41, 39, - /* 480 */ 37, 36, 35, 1009, 1245, 1008, 1243, 34, 33, 1556, - /* 490 */ 27, 41, 39, 37, 36, 35, 34, 33, 463, 1670, - /* 500 */ 41, 39, 37, 36, 35, 1224, 1225, 1245, 563, 1243, - /* 510 */ 172, 1248, 1249, 1010, 1297, 1298, 1300, 1301, 1302, 1303, - /* 520 */ 1304, 569, 565, 1312, 1313, 1315, 1316, 1317, 1318, 1320, - /* 530 */ 1323, 40, 38, 1324, 1248, 1249, 1439, 476, 475, 336, - /* 540 */ 417, 1244, 1764, 162, 1569, 522, 192, 609, 522, 1413, - /* 550 */ 1856, 1386, 1319, 522, 1242, 313, 387, 1268, 1270, 402, - /* 560 */ 146, 510, 1393, 546, 113, 461, 457, 453, 449, 191, - /* 570 */ 1782, 470, 1678, 1580, 1853, 1314, 1580, 1343, 574, 522, - /* 580 */ 1675, 1580, 297, 1734, 1250, 573, 174, 173, 40, 38, - /* 590 */ 403, 122, 625, 623, 72, 42, 336, 189, 1244, 551, - /* 600 */ 1348, 9, 522, 314, 469, 312, 311, 1580, 467, 1319, - /* 610 */ 1795, 1242, 469, 443, 89, 1765, 576, 1767, 1768, 572, - /* 620 */ 613, 567, 1552, 654, 1841, 1438, 468, 170, 303, 1837, - /* 630 */ 1580, 120, 1314, 522, 468, 1192, 493, 1321, 1322, 1333, - /* 640 */ 1907, 1250, 28, 1379, 1577, 1466, 156, 1849, 1850, 491, - /* 650 */ 1854, 489, 69, 159, 1752, 68, 1250, 1904, 9, 188, - /* 660 */ 181, 1580, 186, 11, 10, 1748, 440, 34, 33, 996, - /* 670 */ 997, 41, 39, 37, 36, 35, 546, 7, 607, 522, - /* 680 */ 654, 1329, 1245, 59, 1243, 179, 1734, 1268, 250, 601, - /* 690 */ 1709, 1744, 1750, 605, 1321, 1322, 1623, 131, 130, 604, - /* 700 */ 603, 602, 23, 567, 122, 1465, 1464, 1580, 1856, 1248, - /* 710 */ 1249, 1268, 1297, 1298, 1300, 1301, 1302, 1303, 1304, 569, - /* 720 */ 565, 1312, 1313, 1315, 1316, 1317, 1318, 1320, 1323, 34, - /* 730 */ 33, 1299, 1852, 41, 39, 37, 36, 35, 1033, 1245, - /* 740 */ 1856, 1243, 29, 1271, 120, 1355, 1734, 1734, 34, 33, - /* 750 */ 1463, 612, 41, 39, 37, 36, 35, 1462, 1461, 157, - /* 760 */ 1849, 1850, 606, 1854, 1851, 1623, 1248, 1249, 1034, 1297, - /* 770 */ 1298, 1300, 1301, 1302, 1303, 1304, 569, 565, 1312, 1313, - /* 780 */ 1315, 1316, 1317, 1318, 1320, 1323, 40, 38, 299, 1498, - /* 790 */ 1266, 1734, 657, 1565, 336, 1764, 1244, 410, 1734, 1734, - /* 800 */ 422, 37, 36, 35, 1282, 522, 265, 1319, 1460, 1242, - /* 810 */ 270, 480, 1457, 1610, 1861, 1375, 503, 395, 1557, 423, - /* 820 */ 151, 397, 212, 1782, 522, 647, 643, 639, 635, 263, - /* 830 */ 1314, 574, 522, 1580, 1456, 507, 1734, 502, 573, 1250, - /* 840 */ 34, 33, 1632, 520, 41, 39, 37, 36, 35, 1734, - /* 850 */ 74, 388, 1580, 1734, 87, 522, 2, 228, 1631, 1375, - /* 860 */ 1580, 1299, 1378, 1795, 45, 4, 521, 91, 1765, 576, - /* 870 */ 1767, 1768, 572, 230, 567, 1734, 1721, 1841, 654, 1455, - /* 880 */ 558, 562, 1837, 1580, 1454, 1299, 1453, 1452, 1451, 1450, - /* 890 */ 519, 421, 1321, 1322, 416, 415, 414, 413, 412, 409, - /* 900 */ 408, 407, 406, 405, 401, 400, 399, 398, 392, 391, - /* 910 */ 390, 389, 607, 386, 385, 1449, 1538, 52, 506, 553, - /* 920 */ 1734, 141, 215, 357, 1253, 1734, 276, 1734, 1734, 1734, - /* 930 */ 1734, 131, 130, 604, 603, 602, 1555, 1245, 522, 1243, - /* 940 */ 274, 58, 1487, 1216, 57, 208, 34, 33, 1252, 259, - /* 950 */ 41, 39, 37, 36, 35, 1567, 1734, 1563, 546, 197, - /* 960 */ 175, 209, 195, 217, 1248, 1249, 1580, 1297, 1298, 1300, - /* 970 */ 1301, 1302, 1303, 1304, 569, 565, 1312, 1313, 1315, 1316, - /* 980 */ 1317, 1318, 1320, 1323, 1493, 61, 122, 34, 33, 522, - /* 990 */ 649, 41, 39, 37, 36, 35, 199, 304, 201, 198, - /* 1000 */ 343, 200, 1491, 221, 34, 33, 482, 551, 41, 39, - /* 1010 */ 37, 36, 35, 203, 568, 125, 202, 1580, 11, 10, - /* 1020 */ 1754, 1282, 85, 88, 485, 600, 120, 1459, 128, 1341, - /* 1030 */ 607, 129, 82, 50, 253, 234, 1764, 496, 304, 1441, - /* 1040 */ 1442, 248, 1849, 545, 42, 544, 42, 533, 1907, 131, - /* 1050 */ 130, 604, 603, 602, 1256, 515, 1756, 42, 66, 65, - /* 1060 */ 381, 161, 580, 169, 1782, 1904, 462, 128, 227, 375, - /* 1070 */ 1341, 1092, 571, 1400, 242, 237, 1783, 1734, 1255, 573, - /* 1080 */ 559, 345, 298, 1342, 1349, 365, 1305, 363, 359, 355, - /* 1090 */ 166, 350, 347, 129, 114, 1764, 1482, 269, 1620, 128, - /* 1100 */ 547, 1871, 1120, 247, 1795, 252, 1347, 1124, 291, 1765, - /* 1110 */ 576, 1767, 1768, 572, 570, 567, 564, 1813, 255, 257, - /* 1120 */ 80, 5, 3, 1782, 1342, 162, 53, 349, 1266, 352, - /* 1130 */ 356, 550, 309, 1131, 1129, 1061, 1734, 1764, 573, 132, - /* 1140 */ 310, 1208, 266, 404, 1672, 171, 139, 1347, 30, 334, - /* 1150 */ 1336, 1337, 1338, 1339, 1340, 1344, 1345, 1346, 411, 418, - /* 1160 */ 419, 420, 424, 1795, 1272, 1782, 425, 90, 1765, 576, - /* 1170 */ 1767, 1768, 572, 574, 567, 433, 1275, 1841, 1734, 436, - /* 1180 */ 573, 329, 1837, 154, 178, 437, 180, 1274, 438, 30, - /* 1190 */ 334, 1336, 1337, 1338, 1339, 1340, 1344, 1345, 1346, 1276, - /* 1200 */ 1764, 439, 183, 1868, 441, 1795, 185, 1273, 442, 91, - /* 1210 */ 1765, 576, 1767, 1768, 572, 187, 567, 70, 445, 1841, - /* 1220 */ 190, 464, 301, 93, 1838, 1714, 1764, 466, 1782, 1570, - /* 1230 */ 194, 207, 1566, 267, 196, 134, 574, 135, 497, 1568, - /* 1240 */ 1564, 1734, 136, 573, 137, 498, 210, 214, 319, 504, - /* 1250 */ 508, 530, 516, 1271, 1782, 534, 501, 268, 511, 225, - /* 1260 */ 78, 1882, 574, 1713, 1682, 513, 321, 1734, 1795, 573, - /* 1270 */ 126, 526, 90, 1765, 576, 1767, 1768, 572, 6, 567, - /* 1280 */ 127, 517, 1841, 1881, 223, 1863, 329, 1837, 1920, 1581, - /* 1290 */ 543, 241, 148, 518, 1795, 528, 529, 1875, 90, 1765, - /* 1300 */ 576, 1767, 1768, 572, 232, 567, 328, 537, 1841, 1872, - /* 1310 */ 527, 236, 329, 1837, 1920, 1764, 327, 326, 525, 524, - /* 1320 */ 1375, 121, 1270, 1898, 560, 557, 1258, 246, 19, 330, - /* 1330 */ 578, 1624, 1857, 271, 1553, 243, 546, 1319, 651, 1251, - /* 1340 */ 262, 650, 51, 1782, 653, 284, 147, 1728, 244, 275, - /* 1350 */ 63, 574, 273, 294, 293, 1727, 1734, 1726, 573, 64, - /* 1360 */ 1314, 245, 1725, 1822, 122, 351, 1722, 353, 354, 1250, - /* 1370 */ 1236, 1237, 167, 1720, 358, 360, 361, 1903, 554, 362, - /* 1380 */ 251, 1764, 561, 1795, 254, 551, 256, 90, 1765, 576, - /* 1390 */ 1767, 1768, 572, 1719, 567, 1923, 364, 1841, 1718, 366, - /* 1400 */ 1717, 329, 1837, 1920, 120, 368, 1716, 370, 531, 1782, - /* 1410 */ 1699, 168, 1860, 373, 374, 1211, 1210, 574, 1693, 248, - /* 1420 */ 1849, 545, 1734, 544, 573, 379, 1907, 1692, 380, 1691, - /* 1430 */ 1690, 1180, 1665, 1664, 1663, 67, 1662, 1661, 551, 159, - /* 1440 */ 1660, 1659, 1658, 1904, 393, 1764, 394, 1657, 396, 1795, - /* 1450 */ 1656, 1655, 1654, 283, 1765, 576, 1767, 1768, 572, 1653, - /* 1460 */ 567, 1652, 1651, 1650, 1649, 1648, 1647, 1259, 1646, 1254, - /* 1470 */ 1645, 1644, 1643, 1782, 1642, 1641, 1640, 124, 1639, 1907, - /* 1480 */ 1638, 574, 1637, 1636, 1635, 1634, 1734, 1633, 573, 1182, - /* 1490 */ 1510, 1478, 161, 115, 1262, 176, 1904, 1764, 152, 1477, - /* 1500 */ 999, 1707, 551, 429, 431, 565, 1312, 1313, 1315, 1316, - /* 1510 */ 1317, 1318, 998, 1795, 1701, 1689, 116, 283, 1765, 576, - /* 1520 */ 1767, 1768, 572, 184, 567, 1782, 1688, 1674, 177, 1559, - /* 1530 */ 1509, 182, 1507, 574, 1505, 446, 447, 1503, 1734, 1027, - /* 1540 */ 573, 448, 450, 1907, 451, 452, 454, 456, 1501, 1490, - /* 1550 */ 1764, 455, 458, 1489, 1474, 460, 159, 459, 1561, 1135, - /* 1560 */ 1904, 1134, 193, 1560, 1764, 1795, 1060, 1499, 1059, 144, - /* 1570 */ 1765, 576, 1767, 1768, 572, 1058, 567, 1057, 1782, 622, - /* 1580 */ 1054, 624, 1053, 320, 49, 1052, 574, 315, 1494, 1492, - /* 1590 */ 316, 1734, 1782, 573, 317, 483, 1473, 523, 1472, 486, - /* 1600 */ 574, 488, 1471, 492, 490, 1734, 92, 573, 1706, 1218, - /* 1610 */ 54, 1700, 138, 552, 1921, 499, 1764, 1687, 1795, 500, - /* 1620 */ 1685, 1686, 292, 1765, 576, 1767, 1768, 572, 211, 567, - /* 1630 */ 1684, 1683, 1795, 15, 1228, 216, 292, 1765, 576, 1767, - /* 1640 */ 1768, 572, 1681, 567, 1782, 1673, 318, 82, 224, 229, - /* 1650 */ 42, 226, 574, 222, 16, 505, 1260, 1734, 76, 573, - /* 1660 */ 514, 77, 24, 10, 240, 1415, 231, 235, 1764, 48, - /* 1670 */ 233, 239, 26, 1397, 1399, 1392, 145, 238, 1754, 25, - /* 1680 */ 1764, 81, 249, 1372, 1795, 1427, 47, 1371, 287, 1765, - /* 1690 */ 576, 1767, 1768, 572, 1764, 567, 1782, 1753, 149, 1432, - /* 1700 */ 18, 1426, 1421, 331, 574, 1431, 1430, 332, 1782, 1734, - /* 1710 */ 20, 573, 1334, 333, 1290, 1798, 574, 575, 1309, 566, - /* 1720 */ 17, 1734, 1782, 573, 1307, 150, 542, 1306, 32, 12, - /* 1730 */ 571, 21, 163, 46, 579, 1734, 1795, 573, 22, 338, - /* 1740 */ 144, 1765, 576, 1767, 1768, 572, 13, 567, 1795, 583, - /* 1750 */ 1764, 577, 292, 1765, 576, 1767, 1768, 572, 1121, 567, - /* 1760 */ 581, 586, 1795, 1118, 1764, 584, 291, 1765, 576, 1767, - /* 1770 */ 1768, 572, 1115, 567, 1764, 1814, 587, 589, 1782, 1109, - /* 1780 */ 590, 592, 593, 335, 1107, 1922, 574, 599, 1113, 1098, - /* 1790 */ 1112, 1734, 1782, 573, 1111, 83, 1110, 337, 84, 1130, - /* 1800 */ 574, 60, 1782, 260, 1126, 1734, 608, 573, 1025, 1049, - /* 1810 */ 574, 611, 261, 1047, 1067, 1734, 1764, 573, 1795, 1046, - /* 1820 */ 1045, 1044, 292, 1765, 576, 1767, 1768, 572, 1764, 567, - /* 1830 */ 1043, 1042, 1795, 1041, 1040, 1064, 292, 1765, 576, 1767, - /* 1840 */ 1768, 572, 1795, 567, 1782, 1062, 277, 1765, 576, 1767, - /* 1850 */ 1768, 572, 574, 567, 1037, 1036, 1782, 1734, 1035, 573, - /* 1860 */ 1032, 1031, 1030, 1506, 574, 632, 1504, 634, 633, 1734, - /* 1870 */ 1764, 573, 636, 638, 1502, 640, 1500, 642, 637, 641, - /* 1880 */ 1764, 644, 645, 646, 1795, 1488, 648, 989, 278, 1765, - /* 1890 */ 576, 1767, 1768, 572, 1764, 567, 1795, 1470, 1782, 264, - /* 1900 */ 279, 1765, 576, 1767, 1768, 572, 574, 567, 1782, 652, - /* 1910 */ 655, 1734, 1246, 573, 272, 1445, 574, 1445, 656, 1445, - /* 1920 */ 1445, 1734, 1782, 573, 1445, 1445, 1445, 1445, 1445, 1445, - /* 1930 */ 574, 1445, 1445, 1445, 1445, 1734, 1764, 573, 1795, 1445, - /* 1940 */ 1445, 1445, 286, 1765, 576, 1767, 1768, 572, 1795, 567, - /* 1950 */ 1764, 1445, 288, 1765, 576, 1767, 1768, 572, 1445, 567, - /* 1960 */ 1764, 1445, 1795, 1445, 1782, 1445, 280, 1765, 576, 1767, - /* 1970 */ 1768, 572, 574, 567, 1445, 1445, 1445, 1734, 1782, 573, - /* 1980 */ 1445, 1445, 1445, 1445, 1445, 1445, 574, 1445, 1782, 1445, - /* 1990 */ 1445, 1734, 1445, 573, 1445, 1445, 574, 1445, 1445, 1445, - /* 2000 */ 1445, 1734, 1445, 573, 1795, 1445, 1445, 1445, 289, 1765, - /* 2010 */ 576, 1767, 1768, 572, 1445, 567, 1445, 1445, 1795, 1445, - /* 2020 */ 1764, 1445, 281, 1765, 576, 1767, 1768, 572, 1795, 567, - /* 2030 */ 1764, 1445, 290, 1765, 576, 1767, 1768, 572, 1445, 567, - /* 2040 */ 1445, 1445, 1764, 1445, 1445, 1445, 1445, 1445, 1782, 1445, - /* 2050 */ 1445, 1445, 1445, 1445, 1445, 1445, 574, 1445, 1782, 1445, - /* 2060 */ 1445, 1734, 1445, 573, 1445, 1445, 574, 1445, 1445, 1445, - /* 2070 */ 1782, 1734, 1445, 573, 1445, 1445, 1445, 1445, 574, 1445, - /* 2080 */ 1445, 1445, 1445, 1734, 1764, 573, 1445, 1445, 1795, 1445, - /* 2090 */ 1445, 1445, 282, 1765, 576, 1767, 1768, 572, 1795, 567, - /* 2100 */ 1764, 1445, 295, 1765, 576, 1767, 1768, 572, 1445, 567, - /* 2110 */ 1795, 1445, 1782, 1445, 296, 1765, 576, 1767, 1768, 572, - /* 2120 */ 574, 567, 1445, 1445, 1445, 1734, 1764, 573, 1782, 1445, - /* 2130 */ 1445, 1445, 1445, 1445, 1445, 1445, 574, 1445, 1445, 1445, - /* 2140 */ 1445, 1734, 1445, 573, 1445, 1445, 1445, 1445, 1445, 1445, - /* 2150 */ 1764, 1445, 1795, 1445, 1782, 1445, 1776, 1765, 576, 1767, - /* 2160 */ 1768, 572, 574, 567, 1445, 1445, 1445, 1734, 1795, 573, - /* 2170 */ 1445, 1445, 1775, 1765, 576, 1767, 1768, 572, 1782, 567, - /* 2180 */ 1445, 1445, 1445, 1445, 1445, 1445, 574, 1445, 1445, 1445, - /* 2190 */ 1445, 1734, 1764, 573, 1795, 1445, 1445, 1445, 1774, 1765, - /* 2200 */ 576, 1767, 1768, 572, 1764, 567, 1445, 1445, 1445, 1445, - /* 2210 */ 1445, 1445, 1445, 1445, 1445, 1445, 1764, 1445, 1795, 1445, - /* 2220 */ 1782, 1445, 307, 1765, 576, 1767, 1768, 572, 574, 567, - /* 2230 */ 1445, 1445, 1782, 1734, 1445, 573, 1445, 1445, 1445, 1445, - /* 2240 */ 574, 1445, 1445, 1445, 1782, 1734, 1445, 573, 1445, 1445, - /* 2250 */ 1445, 1445, 574, 1445, 1445, 1445, 1445, 1734, 1445, 573, - /* 2260 */ 1795, 1445, 1445, 1445, 306, 1765, 576, 1767, 1768, 572, - /* 2270 */ 1445, 567, 1795, 1445, 1764, 1445, 308, 1765, 576, 1767, - /* 2280 */ 1768, 572, 1445, 567, 1795, 1445, 1445, 1445, 305, 1765, - /* 2290 */ 576, 1767, 1768, 572, 1445, 567, 1445, 1445, 1445, 1445, - /* 2300 */ 1445, 1445, 1782, 1445, 1445, 1445, 1445, 1445, 1445, 1445, - /* 2310 */ 574, 1445, 1445, 1445, 1445, 1734, 1445, 573, 1445, 1445, - /* 2320 */ 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, - /* 2330 */ 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, - /* 2340 */ 1445, 1445, 1795, 1445, 1445, 1445, 285, 1765, 576, 1767, - /* 2350 */ 1768, 572, 1445, 567, + /* 0 */ 1450, 384, 427, 378, 428, 1487, 31, 258, 435, 547, + /* 10 */ 428, 1487, 40, 38, 1565, 341, 1634, 1635, 1633, 1635, + /* 20 */ 336, 1453, 1250, 34, 33, 1759, 485, 41, 39, 37, + /* 30 */ 36, 35, 511, 1325, 1688, 1248, 1756, 122, 300, 550, + /* 40 */ 322, 495, 103, 1685, 1915, 102, 101, 100, 99, 98, + /* 50 */ 97, 96, 95, 94, 523, 205, 1320, 159, 552, 14, + /* 60 */ 348, 1912, 1752, 1758, 325, 113, 1256, 1772, 62, 488, + /* 70 */ 432, 444, 465, 482, 568, 71, 1272, 120, 204, 40, + /* 80 */ 38, 1388, 1588, 1, 213, 476, 475, 336, 117, 1250, + /* 90 */ 1790, 1864, 248, 1857, 546, 1790, 545, 1583, 540, 1915, + /* 100 */ 1325, 1915, 1248, 575, 56, 656, 523, 55, 1742, 608, + /* 110 */ 574, 61, 161, 75, 159, 1861, 1912, 164, 1912, 1327, + /* 120 */ 1328, 550, 426, 1320, 552, 430, 14, 510, 131, 130, + /* 130 */ 605, 604, 603, 1256, 1588, 1803, 539, 608, 1275, 89, + /* 140 */ 1773, 577, 1775, 1776, 573, 85, 568, 61, 996, 1849, + /* 150 */ 2, 1517, 547, 303, 1845, 82, 131, 130, 605, 604, + /* 160 */ 603, 480, 479, 478, 1251, 1915, 1249, 477, 1915, 143, + /* 170 */ 118, 474, 656, 1544, 473, 472, 471, 61, 161, 1579, + /* 180 */ 122, 159, 1912, 1475, 43, 1912, 1327, 1328, 1000, 1001, + /* 190 */ 1756, 1254, 1255, 206, 1303, 1304, 1306, 1307, 1308, 1309, + /* 200 */ 1310, 570, 566, 1318, 1319, 1321, 1322, 1323, 1324, 1326, + /* 210 */ 1329, 559, 480, 479, 478, 170, 1752, 1758, 477, 1274, + /* 220 */ 120, 118, 474, 162, 1742, 473, 472, 471, 568, 547, + /* 230 */ 1013, 1251, 1012, 1249, 549, 155, 1857, 1858, 417, 1862, + /* 240 */ 313, 69, 34, 33, 68, 463, 41, 39, 37, 36, + /* 250 */ 35, 162, 73, 302, 1474, 547, 513, 122, 1254, 1255, + /* 260 */ 1014, 1303, 1304, 1306, 1307, 1308, 1309, 1310, 570, 566, + /* 270 */ 1318, 1319, 1321, 1322, 1323, 1324, 1326, 1329, 40, 38, + /* 280 */ 219, 220, 1275, 122, 174, 173, 336, 162, 1250, 314, + /* 290 */ 1566, 312, 311, 304, 467, 1742, 346, 120, 469, 1325, + /* 300 */ 103, 1248, 1915, 102, 101, 100, 99, 98, 97, 96, + /* 310 */ 95, 94, 156, 1857, 1858, 1914, 1862, 162, 1288, 1912, + /* 320 */ 468, 550, 1320, 120, 162, 14, 1347, 41, 39, 37, + /* 330 */ 36, 35, 1256, 541, 1915, 40, 38, 1915, 157, 1857, + /* 340 */ 1858, 302, 1862, 336, 513, 1250, 1514, 160, 444, 2, + /* 350 */ 159, 1912, 1473, 1013, 1912, 1012, 1325, 142, 1248, 1464, + /* 360 */ 1105, 599, 598, 597, 1109, 596, 1111, 1112, 595, 1114, + /* 370 */ 592, 656, 1120, 589, 1122, 1123, 586, 583, 1564, 1320, + /* 380 */ 1348, 1147, 1148, 1014, 44, 1327, 1328, 7, 323, 1256, + /* 390 */ 37, 36, 35, 1742, 34, 33, 140, 1729, 41, 39, + /* 400 */ 37, 36, 35, 1353, 1273, 1590, 8, 633, 632, 631, + /* 410 */ 630, 344, 560, 629, 628, 627, 123, 622, 621, 620, + /* 420 */ 619, 618, 617, 616, 615, 133, 611, 61, 656, 23, + /* 430 */ 1251, 536, 1249, 34, 33, 610, 610, 41, 39, 37, + /* 440 */ 36, 35, 1327, 1328, 357, 30, 334, 1342, 1343, 1344, + /* 450 */ 1345, 1346, 1350, 1351, 1352, 1067, 434, 1254, 1255, 430, + /* 460 */ 1303, 1304, 1306, 1307, 1308, 1309, 1310, 570, 566, 1318, + /* 470 */ 1319, 1321, 1322, 1323, 1324, 1326, 1329, 34, 33, 1915, + /* 480 */ 339, 41, 39, 37, 36, 35, 1069, 1251, 140, 1249, + /* 490 */ 606, 71, 1913, 1631, 602, 86, 1912, 1590, 34, 33, + /* 500 */ 1472, 1760, 41, 39, 37, 36, 35, 377, 119, 376, + /* 510 */ 542, 537, 1756, 1584, 1254, 1255, 1580, 1303, 1304, 1306, + /* 520 */ 1307, 1308, 1309, 1310, 570, 566, 1318, 1319, 1321, 1322, + /* 530 */ 1323, 1324, 1326, 1329, 40, 38, 1330, 1493, 1752, 1758, + /* 540 */ 659, 1742, 336, 1772, 1250, 1256, 162, 626, 624, 304, + /* 550 */ 568, 1276, 1409, 1419, 265, 1325, 153, 1248, 34, 33, + /* 560 */ 1563, 218, 41, 39, 37, 36, 35, 162, 151, 1627, + /* 570 */ 1381, 1790, 523, 649, 645, 641, 637, 263, 1320, 551, + /* 580 */ 613, 1445, 1347, 113, 1742, 651, 574, 369, 1256, 494, + /* 590 */ 470, 40, 38, 533, 1407, 1408, 1410, 1411, 503, 336, + /* 600 */ 1588, 1250, 492, 87, 490, 9, 228, 496, 1465, 371, + /* 610 */ 367, 1803, 1325, 1577, 1248, 90, 1773, 577, 1775, 1776, + /* 620 */ 573, 523, 568, 1230, 1231, 1849, 523, 656, 1864, 329, + /* 630 */ 1845, 154, 165, 1545, 1399, 1320, 1348, 382, 1684, 520, + /* 640 */ 297, 1327, 1328, 158, 1683, 1256, 297, 1678, 1915, 1588, + /* 650 */ 1640, 1875, 1860, 1640, 1588, 608, 342, 324, 172, 1353, + /* 660 */ 340, 159, 9, 253, 140, 1912, 1638, 1864, 1250, 1638, + /* 670 */ 1444, 215, 523, 1590, 131, 130, 605, 604, 603, 1392, + /* 680 */ 1573, 1248, 250, 383, 656, 1274, 1251, 1335, 1249, 11, + /* 690 */ 10, 1859, 1222, 1274, 208, 1471, 1470, 1575, 1327, 1328, + /* 700 */ 1588, 30, 334, 1342, 1343, 1344, 1345, 1346, 1350, 1351, + /* 710 */ 1352, 59, 1256, 1254, 1255, 1571, 1303, 1304, 1306, 1307, + /* 720 */ 1308, 1309, 1310, 570, 566, 1318, 1319, 1321, 1322, 1323, + /* 730 */ 1324, 1326, 1329, 1452, 34, 33, 1742, 1742, 41, 39, + /* 740 */ 37, 36, 35, 1251, 1349, 1249, 1385, 79, 34, 33, + /* 750 */ 209, 656, 41, 39, 37, 36, 35, 112, 111, 110, + /* 760 */ 109, 108, 107, 106, 105, 104, 1469, 1354, 1581, 569, + /* 770 */ 1254, 1255, 1361, 1303, 1304, 1306, 1307, 1308, 1309, 1310, + /* 780 */ 570, 566, 1318, 1319, 1321, 1322, 1323, 1324, 1326, 1329, + /* 790 */ 40, 38, 299, 140, 1272, 511, 1000, 1001, 336, 1772, + /* 800 */ 1250, 410, 1591, 523, 422, 523, 1686, 1742, 523, 28, + /* 810 */ 1251, 1325, 1249, 1248, 387, 523, 402, 523, 523, 403, + /* 820 */ 601, 395, 1468, 423, 1288, 397, 443, 1790, 1585, 1717, + /* 830 */ 614, 1588, 1560, 1588, 1320, 575, 1588, 1254, 1255, 1467, + /* 840 */ 1742, 27, 574, 1588, 1256, 1588, 1588, 34, 33, 1466, + /* 850 */ 1463, 41, 39, 37, 36, 35, 388, 1274, 1277, 523, + /* 860 */ 1305, 2, 270, 1742, 534, 1618, 607, 1803, 1305, 1631, + /* 870 */ 504, 91, 1773, 577, 1775, 1776, 573, 139, 568, 1462, + /* 880 */ 1742, 1849, 1461, 656, 1460, 1848, 1845, 1588, 1869, 1381, + /* 890 */ 1742, 1742, 45, 4, 1259, 469, 421, 1327, 1328, 416, + /* 900 */ 415, 414, 413, 412, 409, 408, 407, 406, 405, 401, + /* 910 */ 400, 399, 398, 392, 391, 390, 389, 468, 386, 385, + /* 920 */ 1742, 1640, 29, 1742, 556, 1742, 141, 523, 34, 33, + /* 930 */ 523, 276, 41, 39, 37, 36, 35, 1639, 508, 523, + /* 940 */ 523, 521, 1251, 523, 1249, 274, 58, 1258, 554, 57, + /* 950 */ 522, 259, 1459, 1458, 343, 1588, 1457, 462, 1588, 1456, + /* 960 */ 1455, 625, 1772, 52, 507, 175, 1384, 1588, 1588, 1254, + /* 970 */ 1255, 1588, 1303, 1304, 1306, 1307, 1308, 1309, 1310, 570, + /* 980 */ 566, 1318, 1319, 1321, 1322, 1323, 1324, 1326, 1329, 230, + /* 990 */ 1790, 61, 197, 1742, 1742, 195, 199, 1742, 575, 198, + /* 1000 */ 1742, 1742, 372, 1742, 201, 574, 203, 200, 564, 202, + /* 1010 */ 42, 212, 217, 125, 497, 128, 129, 50, 242, 552, + /* 1020 */ 1504, 1499, 234, 11, 10, 1262, 1447, 1448, 1791, 88, + /* 1030 */ 1803, 1772, 1305, 1497, 89, 1773, 577, 1775, 1776, 573, + /* 1040 */ 74, 568, 481, 483, 1849, 42, 42, 1762, 303, 1845, + /* 1050 */ 345, 1198, 1488, 221, 516, 486, 227, 1098, 1406, 1790, + /* 1060 */ 1915, 42, 1628, 237, 66, 65, 381, 551, 581, 169, + /* 1070 */ 1879, 548, 1742, 159, 574, 375, 247, 1912, 1261, 128, + /* 1080 */ 252, 129, 255, 114, 1764, 128, 1355, 1311, 298, 257, + /* 1090 */ 3, 365, 80, 363, 359, 355, 166, 350, 347, 1803, + /* 1100 */ 5, 1772, 269, 90, 1773, 577, 1775, 1776, 573, 1126, + /* 1110 */ 568, 327, 326, 1849, 1038, 53, 349, 329, 1845, 154, + /* 1120 */ 1130, 1264, 1137, 557, 1135, 1272, 132, 352, 356, 1790, + /* 1130 */ 309, 162, 1325, 1067, 1257, 310, 266, 575, 1214, 1876, + /* 1140 */ 1339, 404, 1742, 1680, 574, 1039, 171, 411, 418, 420, + /* 1150 */ 419, 424, 1278, 425, 1772, 1320, 1281, 433, 178, 436, + /* 1160 */ 437, 180, 1280, 438, 1282, 1256, 439, 441, 183, 1803, + /* 1170 */ 185, 1772, 1279, 90, 1773, 577, 1775, 1776, 573, 442, + /* 1180 */ 568, 187, 1790, 1849, 70, 445, 464, 329, 1845, 1928, + /* 1190 */ 575, 190, 267, 301, 466, 1742, 207, 574, 1883, 1790, + /* 1200 */ 93, 1722, 498, 499, 532, 502, 1578, 575, 194, 1574, + /* 1210 */ 196, 134, 1742, 135, 574, 1576, 1572, 136, 137, 210, + /* 1220 */ 505, 509, 1803, 319, 214, 531, 90, 1773, 577, 1775, + /* 1230 */ 1776, 573, 517, 568, 512, 1721, 1849, 1690, 223, 1803, + /* 1240 */ 329, 1845, 1928, 90, 1773, 577, 1775, 1776, 573, 126, + /* 1250 */ 568, 1906, 127, 1849, 518, 1772, 514, 329, 1845, 1928, + /* 1260 */ 321, 268, 225, 1265, 78, 1260, 519, 1589, 1868, 1277, + /* 1270 */ 1880, 6, 535, 232, 527, 529, 236, 530, 544, 328, + /* 1280 */ 538, 525, 528, 1790, 526, 1381, 246, 1276, 1865, 121, + /* 1290 */ 1268, 575, 561, 558, 330, 19, 1742, 1632, 574, 1890, + /* 1300 */ 244, 566, 1318, 1319, 1321, 1322, 1323, 1324, 1871, 241, + /* 1310 */ 1889, 148, 552, 243, 579, 271, 1772, 245, 1561, 262, + /* 1320 */ 653, 652, 1911, 1803, 655, 1830, 1772, 283, 1773, 577, + /* 1330 */ 1775, 1776, 573, 51, 568, 251, 284, 294, 147, 273, + /* 1340 */ 293, 275, 1736, 63, 1790, 1735, 1931, 1734, 1733, 64, + /* 1350 */ 351, 1730, 575, 1915, 1790, 555, 254, 1742, 562, 574, + /* 1360 */ 256, 353, 575, 354, 1242, 1243, 161, 1742, 1772, 574, + /* 1370 */ 1912, 167, 358, 552, 1728, 360, 361, 362, 1727, 364, + /* 1380 */ 1726, 366, 1725, 368, 1803, 1724, 1707, 370, 283, 1773, + /* 1390 */ 577, 1775, 1776, 573, 1803, 568, 1790, 168, 91, 1773, + /* 1400 */ 577, 1775, 1776, 573, 572, 568, 373, 374, 1849, 1742, + /* 1410 */ 1217, 574, 563, 1845, 1915, 1216, 1701, 1700, 379, 380, + /* 1420 */ 1699, 1698, 1772, 1186, 1673, 1672, 1671, 159, 1670, 67, + /* 1430 */ 1669, 1912, 1772, 1668, 1667, 1666, 1803, 393, 394, 1665, + /* 1440 */ 291, 1773, 577, 1775, 1776, 573, 571, 568, 565, 1821, + /* 1450 */ 1790, 396, 1664, 1663, 1662, 1661, 1660, 1659, 575, 1188, + /* 1460 */ 1790, 1658, 1657, 1742, 547, 574, 1656, 1655, 575, 1654, + /* 1470 */ 1653, 1652, 1651, 1742, 124, 574, 1650, 1649, 1648, 1647, + /* 1480 */ 1646, 1645, 1644, 1643, 1772, 1642, 1641, 1516, 1484, 176, + /* 1490 */ 1803, 152, 122, 1483, 144, 1773, 577, 1775, 1776, 573, + /* 1500 */ 1803, 568, 115, 1003, 91, 1773, 577, 1775, 1776, 573, + /* 1510 */ 429, 568, 1790, 552, 1849, 1002, 1715, 320, 1709, 1846, + /* 1520 */ 575, 431, 1697, 184, 177, 1742, 1696, 574, 1682, 116, + /* 1530 */ 182, 1567, 120, 1031, 1515, 1513, 448, 446, 553, 1929, + /* 1540 */ 1772, 447, 1511, 450, 452, 451, 1509, 248, 1857, 546, + /* 1550 */ 454, 545, 1803, 455, 1915, 1507, 292, 1773, 577, 1775, + /* 1560 */ 1776, 573, 1772, 568, 456, 458, 459, 159, 1790, 1496, + /* 1570 */ 1495, 1912, 460, 524, 1480, 1569, 575, 1568, 1141, 1140, + /* 1580 */ 1066, 1742, 1065, 574, 49, 193, 1064, 1063, 1060, 1059, + /* 1590 */ 1790, 623, 625, 1058, 1057, 1505, 1500, 1498, 575, 484, + /* 1600 */ 315, 316, 317, 1742, 1479, 574, 487, 489, 1803, 1478, + /* 1610 */ 1477, 491, 292, 1773, 577, 1775, 1776, 573, 1714, 568, + /* 1620 */ 493, 92, 1224, 1772, 1708, 54, 1695, 500, 138, 1693, + /* 1630 */ 1803, 224, 82, 42, 287, 1773, 577, 1775, 1776, 573, + /* 1640 */ 1694, 568, 1692, 1691, 216, 1772, 15, 501, 211, 1689, + /* 1650 */ 318, 1790, 1681, 229, 226, 1266, 506, 1421, 16, 575, + /* 1660 */ 515, 240, 48, 239, 1742, 222, 574, 76, 77, 24, + /* 1670 */ 26, 231, 543, 1790, 1762, 233, 17, 1403, 333, 47, + /* 1680 */ 249, 575, 235, 1234, 1405, 145, 1742, 1398, 574, 238, + /* 1690 */ 1761, 1803, 1378, 149, 25, 144, 1773, 577, 1775, 1776, + /* 1700 */ 573, 1772, 568, 18, 81, 1433, 1377, 1438, 10, 1427, + /* 1710 */ 1432, 331, 1437, 1803, 1436, 1772, 332, 292, 1773, 577, + /* 1720 */ 1775, 1776, 573, 1340, 568, 20, 150, 1296, 1806, 1790, + /* 1730 */ 1315, 46, 1313, 567, 32, 163, 12, 572, 1312, 13, + /* 1740 */ 1930, 21, 1742, 1790, 574, 22, 580, 1127, 335, 576, + /* 1750 */ 578, 575, 338, 1124, 582, 584, 1742, 585, 574, 587, + /* 1760 */ 590, 593, 1121, 1104, 1119, 1772, 588, 1136, 1115, 1803, + /* 1770 */ 591, 1118, 1113, 291, 1773, 577, 1775, 1776, 573, 1117, + /* 1780 */ 568, 594, 1822, 1803, 83, 84, 600, 292, 1773, 577, + /* 1790 */ 1775, 1776, 573, 1790, 568, 60, 260, 1116, 337, 192, + /* 1800 */ 1132, 575, 1029, 609, 1054, 1073, 1742, 261, 574, 612, + /* 1810 */ 1052, 1051, 1050, 146, 1049, 1048, 1047, 1772, 461, 457, + /* 1820 */ 453, 449, 191, 1046, 1045, 1070, 1068, 1042, 1041, 1512, + /* 1830 */ 1040, 1037, 1036, 1803, 635, 1035, 1034, 292, 1773, 577, + /* 1840 */ 1775, 1776, 573, 634, 568, 1790, 636, 1510, 72, 638, + /* 1850 */ 639, 189, 640, 575, 1508, 642, 644, 643, 1742, 1506, + /* 1860 */ 574, 646, 647, 648, 1494, 650, 993, 1476, 264, 1772, + /* 1870 */ 654, 1451, 1252, 272, 657, 658, 1451, 1451, 1451, 1451, + /* 1880 */ 1451, 1451, 1451, 1451, 1451, 1803, 1451, 1772, 1451, 277, + /* 1890 */ 1773, 577, 1775, 1776, 573, 1451, 568, 1790, 1451, 1451, + /* 1900 */ 1451, 1451, 1451, 1451, 1451, 575, 1451, 1451, 1451, 1451, + /* 1910 */ 1742, 1451, 574, 188, 181, 1790, 186, 1451, 1451, 1451, + /* 1920 */ 440, 1451, 1451, 575, 1451, 1451, 1451, 1451, 1742, 1772, + /* 1930 */ 574, 1451, 1451, 1451, 1451, 1451, 1451, 1803, 1451, 179, + /* 1940 */ 1451, 278, 1773, 577, 1775, 1776, 573, 1451, 568, 1451, + /* 1950 */ 1451, 1451, 1772, 1451, 1451, 1803, 1451, 1790, 1451, 279, + /* 1960 */ 1773, 577, 1775, 1776, 573, 575, 568, 1451, 1451, 1451, + /* 1970 */ 1742, 1451, 574, 1451, 1451, 1451, 1451, 1451, 1451, 1451, + /* 1980 */ 1790, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 575, 1451, + /* 1990 */ 1451, 1451, 1451, 1742, 1772, 574, 1451, 1803, 1451, 1451, + /* 2000 */ 1451, 286, 1773, 577, 1775, 1776, 573, 1451, 568, 1451, + /* 2010 */ 1451, 1451, 1451, 1772, 1451, 1451, 1451, 1451, 1451, 1451, + /* 2020 */ 1803, 1451, 1790, 1451, 288, 1773, 577, 1775, 1776, 573, + /* 2030 */ 575, 568, 1451, 1451, 1451, 1742, 1451, 574, 1451, 1451, + /* 2040 */ 1451, 1790, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 575, + /* 2050 */ 1451, 1451, 1451, 1451, 1742, 1772, 574, 1451, 1451, 1451, + /* 2060 */ 1451, 1451, 1803, 1451, 1451, 1772, 280, 1773, 577, 1775, + /* 2070 */ 1776, 573, 1451, 568, 1451, 1772, 1451, 1451, 1451, 1451, + /* 2080 */ 1451, 1803, 1451, 1790, 1451, 289, 1773, 577, 1775, 1776, + /* 2090 */ 573, 575, 568, 1790, 1451, 1451, 1742, 1451, 574, 1451, + /* 2100 */ 1451, 575, 1451, 1790, 1451, 1451, 1742, 1451, 574, 1451, + /* 2110 */ 1451, 575, 1451, 1451, 1451, 1451, 1742, 1772, 574, 1451, + /* 2120 */ 1451, 1451, 1451, 1803, 1451, 1451, 1451, 281, 1773, 577, + /* 2130 */ 1775, 1776, 573, 1803, 568, 1451, 1451, 290, 1773, 577, + /* 2140 */ 1775, 1776, 573, 1803, 568, 1790, 1451, 282, 1773, 577, + /* 2150 */ 1775, 1776, 573, 575, 568, 1451, 1451, 1451, 1742, 1451, + /* 2160 */ 574, 1451, 1451, 1451, 1451, 1451, 1451, 1772, 1451, 1451, + /* 2170 */ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1772, 1451, 1451, + /* 2180 */ 1451, 1451, 1451, 1451, 1451, 1803, 1451, 1772, 1451, 295, + /* 2190 */ 1773, 577, 1775, 1776, 573, 1790, 568, 1451, 1451, 1451, + /* 2200 */ 1451, 1451, 1451, 575, 1451, 1790, 1451, 1451, 1742, 1451, + /* 2210 */ 574, 1451, 1451, 575, 1451, 1790, 1451, 1451, 1742, 1451, + /* 2220 */ 574, 1451, 1451, 575, 1451, 1451, 1451, 1451, 1742, 1772, + /* 2230 */ 574, 1451, 1451, 1451, 1451, 1803, 1451, 1451, 1451, 296, + /* 2240 */ 1773, 577, 1775, 1776, 573, 1803, 568, 1451, 1451, 1784, + /* 2250 */ 1773, 577, 1775, 1776, 573, 1803, 568, 1790, 1451, 1783, + /* 2260 */ 1773, 577, 1775, 1776, 573, 575, 568, 1451, 1451, 1451, + /* 2270 */ 1742, 1451, 574, 1451, 1451, 1451, 1451, 1451, 1451, 1772, + /* 2280 */ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, + /* 2290 */ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1803, 1772, 1451, + /* 2300 */ 1451, 1782, 1773, 577, 1775, 1776, 573, 1790, 568, 1451, + /* 2310 */ 1451, 1451, 1451, 1451, 1451, 575, 1451, 1451, 1451, 1451, + /* 2320 */ 1742, 1451, 574, 1451, 1451, 1451, 1790, 1451, 1451, 1451, + /* 2330 */ 1451, 1451, 1451, 1451, 575, 1451, 1451, 1451, 1451, 1742, + /* 2340 */ 1772, 574, 1451, 1451, 1451, 1451, 1451, 1803, 1451, 1451, + /* 2350 */ 1772, 307, 1773, 577, 1775, 1776, 573, 1451, 568, 1451, + /* 2360 */ 1772, 1451, 1451, 1451, 1451, 1451, 1803, 1451, 1790, 1451, + /* 2370 */ 306, 1773, 577, 1775, 1776, 573, 575, 568, 1790, 1451, + /* 2380 */ 1451, 1742, 1451, 574, 1451, 1451, 575, 1451, 1790, 1451, + /* 2390 */ 1451, 1742, 1451, 574, 1451, 1451, 575, 1451, 1451, 1451, + /* 2400 */ 1451, 1742, 1451, 574, 1451, 1451, 1451, 1451, 1803, 1451, + /* 2410 */ 1451, 1451, 308, 1773, 577, 1775, 1776, 573, 1803, 568, + /* 2420 */ 1451, 1451, 305, 1773, 577, 1775, 1776, 573, 1803, 568, + /* 2430 */ 1451, 1451, 285, 1773, 577, 1775, 1776, 573, 1451, 568, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 312, 353, 259, 312, 261, 262, 259, 294, 261, 262, - /* 10 */ 297, 298, 12, 13, 366, 283, 252, 267, 370, 265, - /* 20 */ 20, 0, 22, 0, 292, 12, 13, 14, 15, 16, - /* 30 */ 280, 4, 263, 33, 255, 35, 4, 338, 339, 289, - /* 40 */ 286, 353, 21, 274, 353, 24, 25, 26, 27, 28, - /* 50 */ 29, 30, 31, 32, 366, 263, 56, 366, 370, 59, - /* 60 */ 291, 370, 283, 20, 20, 65, 283, 254, 20, 256, - /* 70 */ 291, 44, 45, 275, 291, 296, 312, 298, 12, 13, - /* 80 */ 14, 283, 82, 291, 61, 62, 20, 283, 22, 66, - /* 90 */ 292, 312, 69, 70, 290, 58, 73, 74, 75, 33, - /* 100 */ 255, 35, 323, 299, 104, 255, 327, 328, 329, 330, - /* 110 */ 331, 332, 329, 334, 82, 82, 337, 353, 118, 119, - /* 120 */ 341, 342, 56, 331, 43, 59, 82, 275, 283, 268, - /* 130 */ 366, 65, 353, 272, 370, 283, 291, 345, 346, 347, - /* 140 */ 348, 296, 350, 298, 292, 366, 296, 21, 82, 370, - /* 150 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 260, - /* 160 */ 113, 114, 263, 163, 83, 165, 118, 119, 323, 312, - /* 170 */ 104, 0, 327, 328, 329, 330, 331, 332, 20, 334, - /* 180 */ 260, 298, 337, 263, 118, 119, 341, 342, 0, 306, - /* 190 */ 190, 191, 309, 193, 194, 195, 196, 197, 198, 199, + /* 0 */ 253, 264, 260, 313, 262, 263, 339, 340, 260, 264, + /* 10 */ 262, 263, 12, 13, 0, 295, 298, 299, 298, 299, + /* 20 */ 20, 0, 22, 8, 9, 286, 4, 12, 13, 14, + /* 30 */ 15, 16, 299, 33, 0, 35, 297, 292, 301, 20, + /* 40 */ 307, 19, 21, 310, 354, 24, 25, 26, 27, 28, + /* 50 */ 29, 30, 31, 32, 264, 33, 56, 367, 313, 59, + /* 60 */ 313, 371, 323, 324, 325, 275, 66, 256, 4, 47, + /* 70 */ 14, 58, 282, 51, 335, 268, 20, 332, 56, 12, + /* 80 */ 13, 14, 292, 83, 56, 270, 271, 20, 281, 22, + /* 90 */ 284, 326, 347, 348, 349, 284, 351, 290, 292, 354, + /* 100 */ 33, 354, 35, 292, 82, 105, 264, 85, 297, 95, + /* 110 */ 299, 83, 367, 85, 367, 350, 371, 275, 371, 119, + /* 120 */ 120, 20, 261, 56, 313, 264, 59, 313, 114, 115, + /* 130 */ 116, 117, 118, 66, 292, 324, 330, 95, 20, 328, + /* 140 */ 329, 330, 331, 332, 333, 83, 335, 83, 4, 338, + /* 150 */ 83, 0, 264, 342, 343, 93, 114, 115, 116, 117, + /* 160 */ 118, 61, 62, 63, 164, 354, 166, 67, 354, 269, + /* 170 */ 70, 71, 105, 273, 74, 75, 76, 83, 367, 286, + /* 180 */ 292, 367, 371, 256, 83, 371, 119, 120, 44, 45, + /* 190 */ 297, 191, 192, 115, 194, 195, 196, 197, 198, 199, /* 200 */ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - /* 210 */ 353, 148, 24, 25, 26, 27, 28, 29, 30, 31, - /* 220 */ 32, 174, 222, 366, 177, 56, 308, 370, 310, 163, - /* 230 */ 267, 165, 61, 62, 63, 64, 20, 66, 67, 68, - /* 240 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 250 */ 79, 82, 289, 84, 222, 222, 190, 191, 82, 193, - /* 260 */ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - /* 270 */ 204, 205, 206, 207, 208, 209, 12, 13, 43, 275, - /* 280 */ 61, 62, 263, 190, 20, 66, 22, 283, 69, 70, - /* 290 */ 227, 228, 73, 74, 75, 312, 292, 33, 82, 35, - /* 300 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - /* 310 */ 105, 20, 107, 108, 109, 110, 111, 112, 353, 300, - /* 320 */ 56, 285, 4, 59, 231, 232, 233, 234, 235, 65, - /* 330 */ 255, 366, 296, 12, 13, 370, 353, 19, 162, 263, - /* 340 */ 164, 20, 265, 22, 255, 283, 82, 114, 35, 366, - /* 350 */ 274, 33, 290, 370, 33, 278, 35, 281, 322, 323, - /* 360 */ 324, 299, 20, 286, 255, 47, 22, 291, 104, 51, - /* 370 */ 334, 296, 283, 263, 56, 353, 0, 56, 65, 35, - /* 380 */ 291, 20, 118, 119, 274, 296, 65, 298, 366, 8, - /* 390 */ 9, 222, 370, 12, 13, 14, 15, 16, 222, 81, - /* 400 */ 263, 291, 84, 82, 285, 296, 173, 174, 14, 65, - /* 410 */ 177, 274, 323, 158, 20, 296, 327, 328, 329, 330, - /* 420 */ 331, 332, 263, 334, 282, 104, 337, 163, 291, 165, - /* 430 */ 341, 342, 343, 274, 58, 180, 181, 295, 222, 118, - /* 440 */ 119, 322, 323, 113, 355, 297, 298, 20, 104, 22, - /* 450 */ 291, 58, 363, 334, 190, 191, 0, 193, 194, 195, - /* 460 */ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - /* 470 */ 206, 207, 208, 209, 8, 9, 241, 50, 12, 13, - /* 480 */ 14, 15, 16, 20, 163, 22, 165, 8, 9, 0, - /* 490 */ 2, 12, 13, 14, 15, 16, 8, 9, 35, 291, - /* 500 */ 12, 13, 14, 15, 16, 175, 176, 163, 59, 165, - /* 510 */ 302, 190, 191, 50, 193, 194, 195, 196, 197, 198, - /* 520 */ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - /* 530 */ 209, 12, 13, 14, 190, 191, 155, 269, 270, 20, - /* 540 */ 76, 22, 255, 222, 284, 263, 33, 58, 263, 83, - /* 550 */ 325, 14, 33, 263, 35, 37, 274, 20, 20, 274, - /* 560 */ 47, 298, 83, 263, 274, 52, 53, 54, 55, 56, - /* 570 */ 283, 281, 309, 291, 349, 56, 291, 145, 291, 263, - /* 580 */ 308, 291, 310, 296, 65, 298, 122, 123, 12, 13, - /* 590 */ 274, 291, 269, 270, 81, 43, 20, 84, 22, 312, - /* 600 */ 168, 82, 263, 85, 94, 87, 88, 291, 90, 33, - /* 610 */ 323, 35, 94, 274, 327, 328, 329, 330, 331, 332, - /* 620 */ 271, 334, 273, 104, 337, 244, 116, 56, 341, 342, - /* 630 */ 291, 331, 56, 263, 116, 83, 21, 118, 119, 190, - /* 640 */ 353, 65, 210, 4, 274, 255, 346, 347, 348, 34, - /* 650 */ 350, 36, 81, 366, 285, 84, 65, 370, 82, 146, - /* 660 */ 147, 291, 149, 1, 2, 296, 153, 8, 9, 44, - /* 670 */ 45, 12, 13, 14, 15, 16, 263, 39, 94, 263, - /* 680 */ 104, 14, 163, 3, 165, 172, 296, 20, 150, 93, - /* 690 */ 274, 322, 323, 293, 118, 119, 296, 113, 114, 115, - /* 700 */ 116, 117, 43, 334, 291, 255, 255, 291, 325, 190, - /* 710 */ 191, 20, 193, 194, 195, 196, 197, 198, 199, 200, - /* 720 */ 201, 202, 203, 204, 205, 206, 207, 208, 209, 8, - /* 730 */ 9, 194, 349, 12, 13, 14, 15, 16, 35, 163, - /* 740 */ 325, 165, 2, 20, 331, 83, 296, 296, 8, 9, - /* 750 */ 255, 65, 12, 13, 14, 15, 16, 255, 255, 346, - /* 760 */ 347, 348, 293, 350, 349, 296, 190, 191, 65, 193, - /* 770 */ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - /* 780 */ 204, 205, 206, 207, 208, 209, 12, 13, 18, 0, - /* 790 */ 20, 296, 19, 284, 20, 255, 22, 27, 296, 296, - /* 800 */ 30, 14, 15, 16, 83, 263, 33, 33, 255, 35, - /* 810 */ 276, 22, 255, 279, 220, 221, 274, 47, 0, 49, - /* 820 */ 47, 51, 56, 283, 263, 52, 53, 54, 55, 56, - /* 830 */ 56, 291, 263, 291, 255, 274, 296, 316, 298, 65, - /* 840 */ 8, 9, 283, 274, 12, 13, 14, 15, 16, 296, - /* 850 */ 84, 81, 291, 296, 81, 263, 82, 84, 299, 221, - /* 860 */ 291, 194, 223, 323, 42, 43, 274, 327, 328, 329, - /* 870 */ 330, 331, 332, 150, 334, 296, 0, 337, 104, 255, - /* 880 */ 43, 341, 342, 291, 255, 194, 255, 255, 255, 255, - /* 890 */ 117, 121, 118, 119, 124, 125, 126, 127, 128, 129, - /* 900 */ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - /* 910 */ 140, 141, 94, 143, 144, 255, 272, 150, 151, 239, - /* 920 */ 296, 18, 149, 47, 35, 296, 23, 296, 296, 296, - /* 930 */ 296, 113, 114, 115, 116, 117, 0, 163, 263, 165, - /* 940 */ 37, 38, 0, 170, 41, 172, 8, 9, 35, 274, - /* 950 */ 12, 13, 14, 15, 16, 284, 296, 284, 263, 86, - /* 960 */ 57, 284, 89, 43, 190, 191, 291, 193, 194, 195, - /* 970 */ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - /* 980 */ 206, 207, 208, 209, 0, 82, 291, 8, 9, 263, - /* 990 */ 48, 12, 13, 14, 15, 16, 86, 59, 86, 89, - /* 1000 */ 274, 89, 0, 83, 8, 9, 22, 312, 12, 13, - /* 1010 */ 14, 15, 16, 86, 284, 43, 89, 291, 1, 2, - /* 1020 */ 46, 83, 82, 120, 22, 284, 331, 256, 43, 91, - /* 1030 */ 94, 43, 92, 43, 373, 43, 255, 319, 59, 118, - /* 1040 */ 119, 346, 347, 348, 43, 350, 43, 364, 353, 113, - /* 1050 */ 114, 115, 116, 117, 165, 83, 82, 43, 155, 156, - /* 1060 */ 157, 366, 43, 160, 283, 370, 264, 43, 83, 166, - /* 1070 */ 91, 83, 291, 83, 360, 83, 283, 296, 165, 298, - /* 1080 */ 243, 264, 179, 145, 83, 182, 83, 184, 185, 186, - /* 1090 */ 187, 188, 189, 43, 43, 255, 262, 83, 295, 43, - /* 1100 */ 351, 326, 83, 344, 323, 367, 168, 83, 327, 328, - /* 1110 */ 329, 330, 331, 332, 333, 334, 335, 336, 367, 367, - /* 1120 */ 82, 224, 354, 283, 145, 222, 287, 321, 20, 263, - /* 1130 */ 47, 291, 320, 83, 83, 35, 296, 255, 298, 83, - /* 1140 */ 269, 161, 314, 263, 263, 42, 150, 168, 210, 211, - /* 1150 */ 212, 213, 214, 215, 216, 217, 218, 219, 303, 301, - /* 1160 */ 145, 301, 263, 323, 20, 283, 257, 327, 328, 329, - /* 1170 */ 330, 331, 332, 291, 334, 257, 20, 337, 296, 318, - /* 1180 */ 298, 341, 342, 343, 267, 298, 267, 20, 311, 210, - /* 1190 */ 211, 212, 213, 214, 215, 216, 217, 218, 219, 20, - /* 1200 */ 255, 313, 267, 363, 311, 323, 267, 20, 304, 327, - /* 1210 */ 328, 329, 330, 331, 332, 267, 334, 267, 263, 337, - /* 1220 */ 267, 257, 257, 263, 342, 296, 255, 283, 283, 283, - /* 1230 */ 283, 265, 283, 318, 283, 283, 291, 283, 171, 283, - /* 1240 */ 283, 296, 283, 298, 283, 317, 265, 265, 311, 263, - /* 1250 */ 263, 229, 147, 20, 283, 230, 298, 279, 296, 265, - /* 1260 */ 265, 359, 291, 296, 296, 296, 296, 296, 323, 298, - /* 1270 */ 307, 296, 327, 328, 329, 330, 331, 332, 236, 334, - /* 1280 */ 307, 305, 337, 359, 291, 362, 341, 342, 343, 291, - /* 1290 */ 154, 361, 359, 304, 323, 296, 296, 352, 327, 328, - /* 1300 */ 329, 330, 331, 332, 307, 334, 296, 296, 337, 326, - /* 1310 */ 238, 307, 341, 342, 343, 255, 12, 13, 237, 225, - /* 1320 */ 221, 291, 20, 352, 242, 240, 22, 321, 82, 245, - /* 1330 */ 287, 296, 325, 263, 273, 358, 263, 33, 258, 35, - /* 1340 */ 265, 36, 315, 283, 257, 277, 310, 0, 357, 253, - /* 1350 */ 173, 291, 266, 277, 277, 0, 296, 0, 298, 42, - /* 1360 */ 56, 356, 0, 340, 291, 73, 0, 35, 183, 65, - /* 1370 */ 35, 35, 35, 0, 183, 35, 35, 369, 369, 183, - /* 1380 */ 368, 255, 369, 323, 368, 312, 368, 327, 328, 329, - /* 1390 */ 330, 331, 332, 0, 334, 374, 183, 337, 0, 35, - /* 1400 */ 0, 341, 342, 343, 331, 22, 0, 35, 104, 283, - /* 1410 */ 0, 82, 352, 168, 167, 165, 163, 291, 0, 346, - /* 1420 */ 347, 348, 296, 350, 298, 159, 353, 0, 158, 0, - /* 1430 */ 0, 46, 0, 0, 0, 142, 0, 0, 312, 366, - /* 1440 */ 0, 0, 0, 370, 137, 255, 35, 0, 137, 323, - /* 1450 */ 0, 0, 0, 327, 328, 329, 330, 331, 332, 0, - /* 1460 */ 334, 0, 0, 0, 0, 0, 0, 163, 0, 165, - /* 1470 */ 0, 0, 0, 283, 0, 0, 0, 42, 0, 353, - /* 1480 */ 0, 291, 0, 0, 0, 0, 296, 0, 298, 22, - /* 1490 */ 0, 0, 366, 39, 190, 42, 370, 255, 43, 0, - /* 1500 */ 14, 0, 312, 46, 46, 201, 202, 203, 204, 205, - /* 1510 */ 206, 207, 14, 323, 0, 0, 39, 327, 328, 329, - /* 1520 */ 330, 331, 332, 154, 334, 283, 0, 0, 40, 0, - /* 1530 */ 0, 39, 0, 291, 0, 35, 47, 0, 296, 60, - /* 1540 */ 298, 39, 35, 353, 47, 39, 35, 39, 0, 0, - /* 1550 */ 255, 47, 35, 0, 0, 39, 366, 47, 0, 35, - /* 1560 */ 370, 22, 89, 0, 255, 323, 35, 0, 35, 327, - /* 1570 */ 328, 329, 330, 331, 332, 35, 334, 35, 283, 43, - /* 1580 */ 35, 43, 35, 288, 91, 35, 291, 22, 0, 0, - /* 1590 */ 22, 296, 283, 298, 22, 49, 0, 288, 0, 35, - /* 1600 */ 291, 35, 0, 22, 35, 296, 20, 298, 0, 35, - /* 1610 */ 150, 0, 169, 371, 372, 22, 255, 0, 323, 150, - /* 1620 */ 0, 0, 327, 328, 329, 330, 331, 332, 147, 334, - /* 1630 */ 0, 0, 323, 82, 178, 83, 327, 328, 329, 330, - /* 1640 */ 331, 332, 0, 334, 283, 0, 150, 92, 39, 46, - /* 1650 */ 43, 146, 291, 82, 226, 152, 22, 296, 82, 298, - /* 1660 */ 148, 82, 82, 2, 46, 83, 82, 82, 255, 43, - /* 1670 */ 83, 43, 43, 83, 83, 83, 82, 82, 46, 82, - /* 1680 */ 255, 82, 46, 83, 323, 35, 43, 83, 327, 328, - /* 1690 */ 329, 330, 331, 332, 255, 334, 283, 46, 46, 83, - /* 1700 */ 43, 35, 83, 35, 291, 35, 35, 35, 283, 296, - /* 1710 */ 43, 298, 190, 288, 22, 82, 291, 192, 83, 82, - /* 1720 */ 226, 296, 283, 298, 83, 46, 365, 83, 82, 82, - /* 1730 */ 291, 82, 46, 220, 35, 296, 323, 298, 82, 35, - /* 1740 */ 327, 328, 329, 330, 331, 332, 226, 334, 323, 35, - /* 1750 */ 255, 93, 327, 328, 329, 330, 331, 332, 83, 334, - /* 1760 */ 82, 35, 323, 83, 255, 82, 327, 328, 329, 330, - /* 1770 */ 331, 332, 83, 334, 255, 336, 82, 35, 283, 83, - /* 1780 */ 82, 35, 82, 288, 83, 372, 291, 94, 106, 22, - /* 1790 */ 106, 296, 283, 298, 106, 82, 106, 288, 82, 35, - /* 1800 */ 291, 82, 283, 43, 22, 296, 59, 298, 60, 35, - /* 1810 */ 291, 80, 43, 35, 65, 296, 255, 298, 323, 35, - /* 1820 */ 35, 35, 327, 328, 329, 330, 331, 332, 255, 334, - /* 1830 */ 35, 22, 323, 35, 35, 65, 327, 328, 329, 330, - /* 1840 */ 331, 332, 323, 334, 283, 35, 327, 328, 329, 330, - /* 1850 */ 331, 332, 291, 334, 35, 35, 283, 296, 35, 298, - /* 1860 */ 35, 35, 35, 0, 291, 35, 0, 39, 47, 296, - /* 1870 */ 255, 298, 35, 39, 0, 35, 0, 39, 47, 47, - /* 1880 */ 255, 35, 47, 39, 323, 0, 35, 35, 327, 328, - /* 1890 */ 329, 330, 331, 332, 255, 334, 323, 0, 283, 22, - /* 1900 */ 327, 328, 329, 330, 331, 332, 291, 334, 283, 21, - /* 1910 */ 21, 296, 22, 298, 22, 375, 291, 375, 20, 375, - /* 1920 */ 375, 296, 283, 298, 375, 375, 375, 375, 375, 375, - /* 1930 */ 291, 375, 375, 375, 375, 296, 255, 298, 323, 375, - /* 1940 */ 375, 375, 327, 328, 329, 330, 331, 332, 323, 334, - /* 1950 */ 255, 375, 327, 328, 329, 330, 331, 332, 375, 334, - /* 1960 */ 255, 375, 323, 375, 283, 375, 327, 328, 329, 330, - /* 1970 */ 331, 332, 291, 334, 375, 375, 375, 296, 283, 298, - /* 1980 */ 375, 375, 375, 375, 375, 375, 291, 375, 283, 375, - /* 1990 */ 375, 296, 375, 298, 375, 375, 291, 375, 375, 375, - /* 2000 */ 375, 296, 375, 298, 323, 375, 375, 375, 327, 328, - /* 2010 */ 329, 330, 331, 332, 375, 334, 375, 375, 323, 375, - /* 2020 */ 255, 375, 327, 328, 329, 330, 331, 332, 323, 334, - /* 2030 */ 255, 375, 327, 328, 329, 330, 331, 332, 375, 334, - /* 2040 */ 375, 375, 255, 375, 375, 375, 375, 375, 283, 375, - /* 2050 */ 375, 375, 375, 375, 375, 375, 291, 375, 283, 375, - /* 2060 */ 375, 296, 375, 298, 375, 375, 291, 375, 375, 375, - /* 2070 */ 283, 296, 375, 298, 375, 375, 375, 375, 291, 375, - /* 2080 */ 375, 375, 375, 296, 255, 298, 375, 375, 323, 375, - /* 2090 */ 375, 375, 327, 328, 329, 330, 331, 332, 323, 334, - /* 2100 */ 255, 375, 327, 328, 329, 330, 331, 332, 375, 334, - /* 2110 */ 323, 375, 283, 375, 327, 328, 329, 330, 331, 332, - /* 2120 */ 291, 334, 375, 375, 375, 296, 255, 298, 283, 375, - /* 2130 */ 375, 375, 375, 375, 375, 375, 291, 375, 375, 375, - /* 2140 */ 375, 296, 375, 298, 375, 375, 375, 375, 375, 375, - /* 2150 */ 255, 375, 323, 375, 283, 375, 327, 328, 329, 330, - /* 2160 */ 331, 332, 291, 334, 375, 375, 375, 296, 323, 298, - /* 2170 */ 375, 375, 327, 328, 329, 330, 331, 332, 283, 334, - /* 2180 */ 375, 375, 375, 375, 375, 375, 291, 375, 375, 375, - /* 2190 */ 375, 296, 255, 298, 323, 375, 375, 375, 327, 328, - /* 2200 */ 329, 330, 331, 332, 255, 334, 375, 375, 375, 375, - /* 2210 */ 375, 375, 375, 375, 375, 375, 255, 375, 323, 375, - /* 2220 */ 283, 375, 327, 328, 329, 330, 331, 332, 291, 334, - /* 2230 */ 375, 375, 283, 296, 375, 298, 375, 375, 375, 375, - /* 2240 */ 291, 375, 375, 375, 283, 296, 375, 298, 375, 375, - /* 2250 */ 375, 375, 291, 375, 375, 375, 375, 296, 375, 298, - /* 2260 */ 323, 375, 375, 375, 327, 328, 329, 330, 331, 332, - /* 2270 */ 375, 334, 323, 375, 255, 375, 327, 328, 329, 330, - /* 2280 */ 331, 332, 375, 334, 323, 375, 375, 375, 327, 328, - /* 2290 */ 329, 330, 331, 332, 375, 334, 375, 375, 375, 375, - /* 2300 */ 375, 375, 283, 375, 375, 375, 375, 375, 375, 375, - /* 2310 */ 291, 375, 375, 375, 375, 296, 375, 298, 375, 375, - /* 2320 */ 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, - /* 2330 */ 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, - /* 2340 */ 375, 375, 323, 375, 375, 375, 327, 328, 329, 330, - /* 2350 */ 331, 332, 375, 334, + /* 210 */ 210, 43, 61, 62, 63, 56, 323, 324, 67, 20, + /* 220 */ 332, 70, 71, 223, 297, 74, 75, 76, 335, 264, + /* 230 */ 20, 164, 22, 166, 346, 347, 348, 349, 77, 351, + /* 240 */ 37, 82, 8, 9, 85, 35, 12, 13, 14, 15, + /* 250 */ 16, 223, 174, 175, 256, 264, 178, 292, 191, 192, + /* 260 */ 50, 194, 195, 196, 197, 198, 199, 200, 201, 202, + /* 270 */ 203, 204, 205, 206, 207, 208, 209, 210, 12, 13, + /* 280 */ 114, 115, 20, 292, 123, 124, 20, 223, 22, 86, + /* 290 */ 0, 88, 89, 59, 91, 297, 313, 332, 95, 33, + /* 300 */ 21, 35, 354, 24, 25, 26, 27, 28, 29, 30, + /* 310 */ 31, 32, 347, 348, 349, 367, 351, 223, 84, 371, + /* 320 */ 117, 20, 56, 332, 223, 59, 92, 12, 13, 14, + /* 330 */ 15, 16, 66, 20, 354, 12, 13, 354, 347, 348, + /* 340 */ 349, 175, 351, 20, 178, 22, 0, 367, 58, 83, + /* 350 */ 367, 371, 256, 20, 371, 22, 33, 255, 35, 257, + /* 360 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + /* 370 */ 106, 105, 108, 109, 110, 111, 112, 113, 0, 56, + /* 380 */ 146, 119, 120, 50, 83, 119, 120, 39, 276, 66, + /* 390 */ 14, 15, 16, 297, 8, 9, 284, 0, 12, 13, + /* 400 */ 14, 15, 16, 169, 20, 293, 83, 61, 62, 63, + /* 410 */ 64, 65, 244, 67, 68, 69, 70, 71, 72, 73, + /* 420 */ 74, 75, 76, 77, 78, 79, 80, 83, 105, 43, + /* 430 */ 164, 149, 166, 8, 9, 58, 58, 12, 13, 14, + /* 440 */ 15, 16, 119, 120, 47, 211, 212, 213, 214, 215, + /* 450 */ 216, 217, 218, 219, 220, 35, 261, 191, 192, 264, + /* 460 */ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + /* 470 */ 204, 205, 206, 207, 208, 209, 210, 8, 9, 354, + /* 480 */ 276, 12, 13, 14, 15, 16, 66, 164, 284, 166, + /* 490 */ 294, 268, 367, 297, 94, 266, 371, 293, 8, 9, + /* 500 */ 256, 286, 12, 13, 14, 15, 16, 163, 279, 165, + /* 510 */ 228, 229, 297, 290, 191, 192, 287, 194, 195, 196, + /* 520 */ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + /* 530 */ 207, 208, 209, 210, 12, 13, 14, 0, 323, 324, + /* 540 */ 19, 297, 20, 256, 22, 66, 223, 270, 271, 59, + /* 550 */ 335, 20, 191, 84, 33, 33, 283, 35, 8, 9, + /* 560 */ 0, 114, 12, 13, 14, 15, 16, 223, 47, 296, + /* 570 */ 222, 284, 264, 52, 53, 54, 55, 56, 56, 292, + /* 580 */ 66, 156, 92, 275, 297, 48, 299, 159, 66, 21, + /* 590 */ 282, 12, 13, 232, 233, 234, 235, 236, 317, 20, + /* 600 */ 292, 22, 34, 82, 36, 83, 85, 313, 257, 181, + /* 610 */ 182, 324, 33, 285, 35, 328, 329, 330, 331, 332, + /* 620 */ 333, 264, 335, 176, 177, 338, 264, 105, 326, 342, + /* 630 */ 343, 344, 275, 273, 84, 56, 146, 275, 309, 118, + /* 640 */ 311, 119, 120, 356, 309, 66, 311, 292, 354, 292, + /* 650 */ 284, 364, 350, 284, 292, 95, 276, 291, 303, 169, + /* 660 */ 291, 367, 83, 374, 284, 371, 300, 326, 22, 300, + /* 670 */ 245, 150, 264, 293, 114, 115, 116, 117, 118, 14, + /* 680 */ 285, 35, 151, 275, 105, 20, 164, 14, 166, 1, + /* 690 */ 2, 350, 171, 20, 173, 256, 256, 285, 119, 120, + /* 700 */ 292, 211, 212, 213, 214, 215, 216, 217, 218, 219, + /* 710 */ 220, 3, 66, 191, 192, 285, 194, 195, 196, 197, + /* 720 */ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + /* 730 */ 208, 209, 210, 0, 8, 9, 297, 297, 12, 13, + /* 740 */ 14, 15, 16, 164, 146, 166, 4, 266, 8, 9, + /* 750 */ 285, 105, 12, 13, 14, 15, 16, 24, 25, 26, + /* 760 */ 27, 28, 29, 30, 31, 32, 256, 169, 287, 285, + /* 770 */ 191, 192, 84, 194, 195, 196, 197, 198, 199, 200, + /* 780 */ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + /* 790 */ 12, 13, 18, 284, 20, 299, 44, 45, 20, 256, + /* 800 */ 22, 27, 293, 264, 30, 264, 310, 297, 264, 211, + /* 810 */ 164, 33, 166, 35, 275, 264, 275, 264, 264, 275, + /* 820 */ 285, 47, 256, 49, 84, 51, 275, 284, 275, 275, + /* 830 */ 272, 292, 274, 292, 56, 292, 292, 191, 192, 256, + /* 840 */ 297, 2, 299, 292, 66, 292, 292, 8, 9, 256, + /* 850 */ 256, 12, 13, 14, 15, 16, 82, 20, 20, 264, + /* 860 */ 195, 83, 277, 297, 365, 280, 294, 324, 195, 297, + /* 870 */ 275, 328, 329, 330, 331, 332, 333, 151, 335, 256, + /* 880 */ 297, 338, 256, 105, 256, 342, 343, 292, 221, 222, + /* 890 */ 297, 297, 42, 43, 35, 95, 122, 119, 120, 125, + /* 900 */ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + /* 910 */ 136, 137, 138, 139, 140, 141, 142, 117, 144, 145, + /* 920 */ 297, 284, 2, 297, 43, 297, 18, 264, 8, 9, + /* 930 */ 264, 23, 12, 13, 14, 15, 16, 300, 275, 264, + /* 940 */ 264, 275, 164, 264, 166, 37, 38, 35, 240, 41, + /* 950 */ 275, 275, 256, 256, 275, 292, 256, 265, 292, 256, + /* 960 */ 256, 43, 256, 151, 152, 57, 224, 292, 292, 191, + /* 970 */ 192, 292, 194, 195, 196, 197, 198, 199, 200, 201, + /* 980 */ 202, 203, 204, 205, 206, 207, 208, 209, 210, 151, + /* 990 */ 284, 83, 87, 297, 297, 90, 87, 297, 292, 90, + /* 1000 */ 297, 297, 84, 297, 87, 299, 87, 90, 59, 90, + /* 1010 */ 43, 56, 43, 43, 320, 43, 43, 43, 361, 313, + /* 1020 */ 0, 0, 43, 1, 2, 166, 119, 120, 284, 121, + /* 1030 */ 324, 256, 195, 0, 328, 329, 330, 331, 332, 333, + /* 1040 */ 85, 335, 22, 22, 338, 43, 43, 46, 342, 343, + /* 1050 */ 265, 84, 263, 84, 84, 22, 84, 84, 84, 284, + /* 1060 */ 354, 43, 296, 84, 156, 157, 158, 292, 43, 161, + /* 1070 */ 327, 352, 297, 367, 299, 167, 345, 371, 166, 43, + /* 1080 */ 368, 43, 368, 43, 83, 43, 84, 84, 180, 368, + /* 1090 */ 355, 183, 83, 185, 186, 187, 188, 189, 190, 324, + /* 1100 */ 225, 256, 84, 328, 329, 330, 331, 332, 333, 84, + /* 1110 */ 335, 12, 13, 338, 35, 288, 322, 342, 343, 344, + /* 1120 */ 84, 22, 84, 242, 84, 20, 84, 264, 47, 284, + /* 1130 */ 321, 223, 33, 35, 35, 270, 315, 292, 162, 364, + /* 1140 */ 191, 264, 297, 264, 299, 66, 42, 304, 302, 302, + /* 1150 */ 146, 264, 20, 258, 256, 56, 20, 258, 268, 319, + /* 1160 */ 299, 268, 20, 312, 20, 66, 314, 312, 268, 324, + /* 1170 */ 268, 256, 20, 328, 329, 330, 331, 332, 333, 305, + /* 1180 */ 335, 268, 284, 338, 268, 264, 258, 342, 343, 344, + /* 1190 */ 292, 268, 319, 258, 284, 297, 266, 299, 353, 284, + /* 1200 */ 264, 297, 172, 318, 105, 299, 284, 292, 284, 284, + /* 1210 */ 284, 284, 297, 284, 299, 284, 284, 284, 284, 266, + /* 1220 */ 264, 264, 324, 312, 266, 230, 328, 329, 330, 331, + /* 1230 */ 332, 333, 148, 335, 297, 297, 338, 297, 292, 324, + /* 1240 */ 342, 343, 344, 328, 329, 330, 331, 332, 333, 308, + /* 1250 */ 335, 353, 308, 338, 306, 256, 297, 342, 343, 344, + /* 1260 */ 297, 280, 266, 164, 266, 166, 305, 292, 353, 20, + /* 1270 */ 327, 237, 231, 308, 297, 297, 308, 297, 155, 297, + /* 1280 */ 297, 226, 239, 284, 238, 222, 322, 20, 326, 292, + /* 1290 */ 191, 292, 243, 241, 246, 83, 297, 297, 299, 360, + /* 1300 */ 358, 202, 203, 204, 205, 206, 207, 208, 363, 362, + /* 1310 */ 360, 360, 313, 359, 288, 264, 256, 357, 274, 266, + /* 1320 */ 259, 36, 370, 324, 258, 341, 256, 328, 329, 330, + /* 1330 */ 331, 332, 333, 316, 335, 369, 278, 278, 311, 267, + /* 1340 */ 278, 254, 0, 174, 284, 0, 375, 0, 0, 42, + /* 1350 */ 74, 0, 292, 354, 284, 370, 369, 297, 370, 299, + /* 1360 */ 369, 35, 292, 184, 35, 35, 367, 297, 256, 299, + /* 1370 */ 371, 35, 184, 313, 0, 35, 35, 184, 0, 184, + /* 1380 */ 0, 35, 0, 22, 324, 0, 0, 35, 328, 329, + /* 1390 */ 330, 331, 332, 333, 324, 335, 284, 83, 328, 329, + /* 1400 */ 330, 331, 332, 333, 292, 335, 169, 168, 338, 297, + /* 1410 */ 166, 299, 342, 343, 354, 164, 0, 0, 160, 159, + /* 1420 */ 0, 0, 256, 46, 0, 0, 0, 367, 0, 143, + /* 1430 */ 0, 371, 256, 0, 0, 0, 324, 138, 35, 0, + /* 1440 */ 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + /* 1450 */ 284, 138, 0, 0, 0, 0, 0, 0, 292, 22, + /* 1460 */ 284, 0, 0, 297, 264, 299, 0, 0, 292, 0, + /* 1470 */ 0, 0, 0, 297, 42, 299, 0, 0, 0, 0, + /* 1480 */ 0, 0, 0, 0, 256, 0, 0, 0, 0, 42, + /* 1490 */ 324, 43, 292, 0, 328, 329, 330, 331, 332, 333, + /* 1500 */ 324, 335, 39, 14, 328, 329, 330, 331, 332, 333, + /* 1510 */ 46, 335, 284, 313, 338, 14, 0, 289, 0, 343, + /* 1520 */ 292, 46, 0, 155, 40, 297, 0, 299, 0, 39, + /* 1530 */ 39, 0, 332, 60, 0, 0, 39, 35, 372, 373, + /* 1540 */ 256, 47, 0, 35, 39, 47, 0, 347, 348, 349, + /* 1550 */ 35, 351, 324, 47, 354, 0, 328, 329, 330, 331, + /* 1560 */ 332, 333, 256, 335, 39, 35, 47, 367, 284, 0, + /* 1570 */ 0, 371, 39, 289, 0, 0, 292, 0, 35, 22, + /* 1580 */ 35, 297, 35, 299, 92, 90, 35, 35, 35, 35, + /* 1590 */ 284, 43, 43, 35, 35, 0, 0, 0, 292, 49, + /* 1600 */ 22, 22, 22, 297, 0, 299, 35, 35, 324, 0, + /* 1610 */ 0, 35, 328, 329, 330, 331, 332, 333, 0, 335, + /* 1620 */ 22, 20, 35, 256, 0, 151, 0, 22, 170, 0, + /* 1630 */ 324, 39, 93, 43, 328, 329, 330, 331, 332, 333, + /* 1640 */ 0, 335, 0, 0, 84, 256, 83, 151, 148, 0, + /* 1650 */ 151, 284, 0, 46, 147, 22, 153, 84, 227, 292, + /* 1660 */ 149, 46, 43, 43, 297, 83, 299, 83, 83, 83, + /* 1670 */ 43, 83, 366, 284, 46, 84, 227, 84, 289, 43, + /* 1680 */ 46, 292, 83, 179, 84, 83, 297, 84, 299, 83, + /* 1690 */ 46, 324, 84, 46, 83, 328, 329, 330, 331, 332, + /* 1700 */ 333, 256, 335, 43, 83, 35, 84, 84, 2, 84, + /* 1710 */ 35, 35, 35, 324, 35, 256, 35, 328, 329, 330, + /* 1720 */ 331, 332, 333, 191, 335, 43, 46, 22, 83, 284, + /* 1730 */ 84, 221, 84, 83, 83, 46, 83, 292, 84, 227, + /* 1740 */ 373, 83, 297, 284, 299, 83, 35, 84, 289, 193, + /* 1750 */ 94, 292, 35, 84, 83, 35, 297, 83, 299, 35, + /* 1760 */ 35, 35, 84, 22, 107, 256, 83, 35, 84, 324, + /* 1770 */ 83, 107, 84, 328, 329, 330, 331, 332, 333, 107, + /* 1780 */ 335, 83, 337, 324, 83, 83, 95, 328, 329, 330, + /* 1790 */ 331, 332, 333, 284, 335, 83, 43, 107, 289, 33, + /* 1800 */ 22, 292, 60, 59, 35, 66, 297, 43, 299, 81, + /* 1810 */ 35, 35, 35, 47, 35, 35, 22, 256, 52, 53, + /* 1820 */ 54, 55, 56, 35, 35, 66, 35, 35, 35, 0, + /* 1830 */ 35, 35, 35, 324, 47, 35, 35, 328, 329, 330, + /* 1840 */ 331, 332, 333, 35, 335, 284, 39, 0, 82, 35, + /* 1850 */ 47, 85, 39, 292, 0, 35, 39, 47, 297, 0, + /* 1860 */ 299, 35, 47, 39, 0, 35, 35, 0, 22, 256, + /* 1870 */ 21, 376, 22, 22, 21, 20, 376, 376, 376, 376, + /* 1880 */ 376, 376, 376, 376, 376, 324, 376, 256, 376, 328, + /* 1890 */ 329, 330, 331, 332, 333, 376, 335, 284, 376, 376, + /* 1900 */ 376, 376, 376, 376, 376, 292, 376, 376, 376, 376, + /* 1910 */ 297, 376, 299, 147, 148, 284, 150, 376, 376, 376, + /* 1920 */ 154, 376, 376, 292, 376, 376, 376, 376, 297, 256, + /* 1930 */ 299, 376, 376, 376, 376, 376, 376, 324, 376, 173, + /* 1940 */ 376, 328, 329, 330, 331, 332, 333, 376, 335, 376, + /* 1950 */ 376, 376, 256, 376, 376, 324, 376, 284, 376, 328, + /* 1960 */ 329, 330, 331, 332, 333, 292, 335, 376, 376, 376, + /* 1970 */ 297, 376, 299, 376, 376, 376, 376, 376, 376, 376, + /* 1980 */ 284, 376, 376, 376, 376, 376, 376, 376, 292, 376, + /* 1990 */ 376, 376, 376, 297, 256, 299, 376, 324, 376, 376, + /* 2000 */ 376, 328, 329, 330, 331, 332, 333, 376, 335, 376, + /* 2010 */ 376, 376, 376, 256, 376, 376, 376, 376, 376, 376, + /* 2020 */ 324, 376, 284, 376, 328, 329, 330, 331, 332, 333, + /* 2030 */ 292, 335, 376, 376, 376, 297, 376, 299, 376, 376, + /* 2040 */ 376, 284, 376, 376, 376, 376, 376, 376, 376, 292, + /* 2050 */ 376, 376, 376, 376, 297, 256, 299, 376, 376, 376, + /* 2060 */ 376, 376, 324, 376, 376, 256, 328, 329, 330, 331, + /* 2070 */ 332, 333, 376, 335, 376, 256, 376, 376, 376, 376, + /* 2080 */ 376, 324, 376, 284, 376, 328, 329, 330, 331, 332, + /* 2090 */ 333, 292, 335, 284, 376, 376, 297, 376, 299, 376, + /* 2100 */ 376, 292, 376, 284, 376, 376, 297, 376, 299, 376, + /* 2110 */ 376, 292, 376, 376, 376, 376, 297, 256, 299, 376, + /* 2120 */ 376, 376, 376, 324, 376, 376, 376, 328, 329, 330, + /* 2130 */ 331, 332, 333, 324, 335, 376, 376, 328, 329, 330, + /* 2140 */ 331, 332, 333, 324, 335, 284, 376, 328, 329, 330, + /* 2150 */ 331, 332, 333, 292, 335, 376, 376, 376, 297, 376, + /* 2160 */ 299, 376, 376, 376, 376, 376, 376, 256, 376, 376, + /* 2170 */ 376, 376, 376, 376, 376, 376, 376, 256, 376, 376, + /* 2180 */ 376, 376, 376, 376, 376, 324, 376, 256, 376, 328, + /* 2190 */ 329, 330, 331, 332, 333, 284, 335, 376, 376, 376, + /* 2200 */ 376, 376, 376, 292, 376, 284, 376, 376, 297, 376, + /* 2210 */ 299, 376, 376, 292, 376, 284, 376, 376, 297, 376, + /* 2220 */ 299, 376, 376, 292, 376, 376, 376, 376, 297, 256, + /* 2230 */ 299, 376, 376, 376, 376, 324, 376, 376, 376, 328, + /* 2240 */ 329, 330, 331, 332, 333, 324, 335, 376, 376, 328, + /* 2250 */ 329, 330, 331, 332, 333, 324, 335, 284, 376, 328, + /* 2260 */ 329, 330, 331, 332, 333, 292, 335, 376, 376, 376, + /* 2270 */ 297, 376, 299, 376, 376, 376, 376, 376, 376, 256, + /* 2280 */ 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, + /* 2290 */ 376, 376, 376, 376, 376, 376, 376, 324, 256, 376, + /* 2300 */ 376, 328, 329, 330, 331, 332, 333, 284, 335, 376, + /* 2310 */ 376, 376, 376, 376, 376, 292, 376, 376, 376, 376, + /* 2320 */ 297, 376, 299, 376, 376, 376, 284, 376, 376, 376, + /* 2330 */ 376, 376, 376, 376, 292, 376, 376, 376, 376, 297, + /* 2340 */ 256, 299, 376, 376, 376, 376, 376, 324, 376, 376, + /* 2350 */ 256, 328, 329, 330, 331, 332, 333, 376, 335, 376, + /* 2360 */ 256, 376, 376, 376, 376, 376, 324, 376, 284, 376, + /* 2370 */ 328, 329, 330, 331, 332, 333, 292, 335, 284, 376, + /* 2380 */ 376, 297, 376, 299, 376, 376, 292, 376, 284, 376, + /* 2390 */ 376, 297, 376, 299, 376, 376, 292, 376, 376, 376, + /* 2400 */ 376, 297, 376, 299, 376, 376, 376, 376, 324, 376, + /* 2410 */ 376, 376, 328, 329, 330, 331, 332, 333, 324, 335, + /* 2420 */ 376, 376, 328, 329, 330, 331, 332, 333, 324, 335, + /* 2430 */ 376, 376, 328, 329, 330, 331, 332, 333, 376, 335, }; -#define YY_SHIFT_COUNT (657) +#define YY_SHIFT_COUNT (659) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (1898) +#define YY_SHIFT_MAX (1867) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 903, 0, 0, 66, 66, 264, 264, 264, 321, 321, - /* 10 */ 264, 264, 519, 576, 774, 576, 576, 576, 576, 576, - /* 20 */ 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - /* 30 */ 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - /* 40 */ 576, 576, 576, 216, 216, 44, 44, 44, 1304, 1304, - /* 50 */ 1304, 176, 169, 33, 33, 43, 43, 27, 27, 32, - /* 60 */ 48, 33, 33, 43, 43, 43, 43, 43, 43, 43, - /* 70 */ 43, 43, 37, 43, 43, 43, 158, 291, 43, 43, - /* 80 */ 291, 342, 43, 291, 291, 291, 43, 393, 770, 938, - /* 90 */ 979, 979, 126, 219, 344, 344, 344, 344, 344, 344, - /* 100 */ 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, - /* 110 */ 344, 344, 344, 518, 48, 394, 394, 376, 313, 489, - /* 120 */ 538, 538, 538, 313, 361, 158, 456, 456, 291, 291, - /* 130 */ 591, 591, 596, 686, 205, 205, 205, 205, 205, 205, - /* 140 */ 205, 773, 21, 23, 381, 93, 463, 233, 63, 537, - /* 150 */ 667, 427, 625, 510, 723, 594, 638, 594, 822, 680, - /* 160 */ 680, 680, 639, 691, 1038, 897, 1108, 1083, 1100, 980, - /* 170 */ 1108, 1108, 1103, 1015, 1015, 1108, 1144, 1144, 1156, 37, - /* 180 */ 158, 37, 1167, 1179, 37, 1167, 37, 1187, 37, 37, - /* 190 */ 1108, 37, 1144, 291, 291, 291, 291, 291, 291, 291, - /* 200 */ 291, 291, 291, 291, 1108, 1144, 591, 1156, 393, 1067, - /* 210 */ 158, 393, 1108, 1108, 1167, 393, 1022, 591, 591, 591, - /* 220 */ 591, 1022, 591, 1105, 361, 1187, 393, 596, 393, 361, - /* 230 */ 1233, 591, 1025, 1022, 591, 591, 1025, 1022, 591, 591, - /* 240 */ 291, 1042, 1136, 1025, 1072, 1081, 1094, 897, 1099, 361, - /* 250 */ 1302, 1082, 1085, 1084, 1082, 1085, 1082, 1085, 1246, 1038, - /* 260 */ 591, 686, 1108, 393, 1305, 1144, 2354, 2354, 2354, 2354, - /* 270 */ 2354, 2354, 2354, 171, 513, 188, 318, 466, 659, 479, - /* 280 */ 488, 740, 996, 721, 818, 832, 832, 832, 832, 832, - /* 290 */ 832, 832, 832, 936, 584, 13, 13, 47, 255, 571, - /* 300 */ 464, 615, 330, 662, 432, 787, 787, 787, 787, 876, - /* 310 */ 81, 873, 910, 912, 927, 789, 984, 1002, 766, 767, - /* 320 */ 552, 920, 972, 985, 988, 990, 889, 913, 992, 1017, - /* 330 */ 921, 235, 837, 1001, 449, 1003, 974, 1014, 1019, 1024, - /* 340 */ 1050, 1051, 1056, 940, 703, 942, 1347, 1177, 1355, 1357, - /* 350 */ 1317, 1362, 1292, 1366, 1332, 1185, 1335, 1336, 1337, 1191, - /* 360 */ 1373, 1340, 1341, 1196, 1393, 1213, 1398, 1364, 1400, 1383, - /* 370 */ 1406, 1372, 1410, 1329, 1245, 1247, 1250, 1253, 1418, 1427, - /* 380 */ 1266, 1270, 1429, 1430, 1385, 1432, 1433, 1434, 1293, 1436, - /* 390 */ 1437, 1440, 1441, 1442, 1307, 1411, 1447, 1311, 1450, 1451, - /* 400 */ 1452, 1459, 1461, 1462, 1463, 1464, 1465, 1466, 1468, 1470, - /* 410 */ 1471, 1472, 1435, 1474, 1475, 1476, 1478, 1480, 1482, 1467, - /* 420 */ 1483, 1484, 1485, 1487, 1490, 1491, 1453, 1454, 1455, 1486, - /* 430 */ 1457, 1498, 1458, 1499, 1488, 1477, 1501, 1514, 1515, 1492, - /* 440 */ 1369, 1526, 1527, 1529, 1479, 1530, 1532, 1500, 1489, 1502, - /* 450 */ 1534, 1507, 1497, 1506, 1537, 1511, 1504, 1508, 1548, 1517, - /* 460 */ 1510, 1516, 1549, 1553, 1554, 1558, 1493, 1473, 1524, 1539, - /* 470 */ 1563, 1531, 1533, 1540, 1542, 1536, 1538, 1545, 1547, 1550, - /* 480 */ 1567, 1565, 1588, 1568, 1546, 1589, 1572, 1564, 1596, 1566, - /* 490 */ 1598, 1569, 1602, 1581, 1586, 1608, 1460, 1574, 1611, 1443, - /* 500 */ 1593, 1469, 1481, 1617, 1620, 1496, 1503, 1621, 1630, 1631, - /* 510 */ 1551, 1552, 1456, 1642, 1571, 1512, 1576, 1645, 1609, 1505, - /* 520 */ 1579, 1555, 1603, 1607, 1428, 1580, 1582, 1584, 1587, 1590, - /* 530 */ 1585, 1634, 1626, 1591, 1594, 1595, 1597, 1592, 1628, 1618, - /* 540 */ 1632, 1599, 1629, 1494, 1600, 1604, 1636, 1513, 1643, 1651, - /* 550 */ 1652, 1616, 1657, 1520, 1619, 1650, 1666, 1668, 1670, 1671, - /* 560 */ 1672, 1619, 1661, 1522, 1667, 1633, 1635, 1637, 1641, 1646, - /* 570 */ 1644, 1679, 1647, 1649, 1686, 1692, 1525, 1656, 1658, 1675, - /* 580 */ 1699, 1704, 1678, 1680, 1714, 1683, 1689, 1726, 1694, 1696, - /* 590 */ 1742, 1698, 1701, 1746, 1700, 1682, 1684, 1688, 1690, 1767, - /* 600 */ 1693, 1713, 1716, 1764, 1719, 1760, 1760, 1782, 1748, 1747, - /* 610 */ 1774, 1749, 1731, 1769, 1778, 1784, 1785, 1786, 1795, 1809, - /* 620 */ 1798, 1799, 1770, 1536, 1810, 1538, 1819, 1820, 1823, 1825, - /* 630 */ 1826, 1827, 1863, 1830, 1821, 1828, 1866, 1837, 1831, 1834, - /* 640 */ 1874, 1840, 1832, 1838, 1876, 1846, 1835, 1844, 1885, 1851, - /* 650 */ 1852, 1897, 1877, 1888, 1890, 1892, 1889, 1898, + /* 0 */ 908, 0, 0, 67, 67, 266, 266, 266, 323, 323, + /* 10 */ 266, 266, 522, 579, 778, 579, 579, 579, 579, 579, + /* 20 */ 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + /* 30 */ 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + /* 40 */ 579, 579, 579, 101, 101, 301, 301, 301, 1099, 1099, + /* 50 */ 1099, 344, 28, 94, 94, 19, 19, 144, 144, 64, + /* 60 */ 262, 94, 94, 19, 19, 19, 19, 19, 19, 19, + /* 70 */ 19, 19, 13, 19, 19, 19, 118, 199, 19, 19, + /* 80 */ 199, 313, 19, 199, 199, 199, 19, 377, 774, 234, + /* 90 */ 490, 490, 279, 100, 646, 646, 646, 646, 646, 646, + /* 100 */ 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, + /* 110 */ 646, 646, 646, 203, 262, 56, 56, 290, 420, 378, + /* 120 */ 531, 531, 531, 420, 384, 118, 34, 34, 199, 199, + /* 130 */ 479, 479, 400, 514, 264, 264, 264, 264, 264, 264, + /* 140 */ 264, 521, 21, 151, 425, 361, 210, 78, 282, 665, + /* 150 */ 673, 333, 752, 800, 838, 667, 348, 667, 850, 708, + /* 160 */ 708, 708, 742, 837, 1009, 875, 1105, 1081, 1098, 976, + /* 170 */ 1105, 1105, 1104, 1004, 1004, 1105, 1132, 1132, 1136, 13, + /* 180 */ 118, 13, 1142, 1144, 13, 1142, 13, 1152, 13, 13, + /* 190 */ 1105, 13, 1132, 199, 199, 199, 199, 199, 199, 199, + /* 200 */ 199, 199, 199, 199, 1105, 1132, 479, 1136, 377, 1030, + /* 210 */ 118, 377, 1105, 1105, 1142, 377, 995, 479, 479, 479, + /* 220 */ 479, 995, 479, 1084, 384, 1152, 377, 400, 377, 384, + /* 230 */ 1249, 479, 1041, 995, 479, 479, 1041, 995, 479, 479, + /* 240 */ 199, 1034, 1123, 1041, 1043, 1046, 1055, 875, 1063, 384, + /* 250 */ 1267, 1049, 1052, 1048, 1049, 1052, 1049, 1052, 1212, 1009, + /* 260 */ 479, 514, 1105, 377, 1285, 1132, 2440, 2440, 2440, 2440, + /* 270 */ 2440, 2440, 2440, 346, 1766, 733, 22, 469, 386, 550, + /* 280 */ 839, 920, 726, 740, 14, 15, 15, 15, 15, 15, + /* 290 */ 15, 15, 15, 560, 42, 315, 315, 166, 428, 159, + /* 300 */ 161, 568, 447, 688, 598, 376, 376, 376, 376, 397, + /* 310 */ 918, 905, 909, 917, 919, 1020, 1021, 1033, 955, 812, + /* 320 */ 967, 969, 970, 972, 973, 974, 859, 912, 979, 1022, + /* 330 */ 907, 881, 168, 1002, 949, 1003, 1001, 1018, 1025, 1036, + /* 340 */ 1038, 1040, 1042, 62, 1079, 537, 1342, 1169, 1345, 1347, + /* 350 */ 1307, 1348, 1276, 1351, 1326, 1179, 1329, 1330, 1336, 1188, + /* 360 */ 1374, 1340, 1341, 1193, 1378, 1195, 1380, 1346, 1382, 1361, + /* 370 */ 1385, 1352, 1386, 1314, 1237, 1239, 1244, 1251, 1416, 1417, + /* 380 */ 1258, 1260, 1420, 1421, 1377, 1424, 1425, 1426, 1286, 1428, + /* 390 */ 1430, 1433, 1434, 1435, 1299, 1403, 1439, 1313, 1452, 1453, + /* 400 */ 1454, 1455, 1456, 1457, 1461, 1462, 1466, 1467, 1469, 1470, + /* 410 */ 1471, 1472, 1432, 1476, 1477, 1478, 1479, 1480, 1481, 1437, + /* 420 */ 1482, 1483, 1485, 1486, 1487, 1488, 1447, 1463, 1448, 1489, + /* 430 */ 1464, 1501, 1475, 1493, 1484, 1490, 1516, 1518, 1522, 1491, + /* 440 */ 1368, 1526, 1528, 1531, 1473, 1534, 1535, 1502, 1494, 1497, + /* 450 */ 1542, 1508, 1498, 1505, 1546, 1515, 1506, 1525, 1555, 1530, + /* 460 */ 1519, 1533, 1569, 1570, 1574, 1575, 1492, 1495, 1543, 1557, + /* 470 */ 1577, 1545, 1547, 1551, 1552, 1548, 1549, 1553, 1554, 1558, + /* 480 */ 1559, 1595, 1578, 1596, 1579, 1550, 1597, 1580, 1571, 1604, + /* 490 */ 1572, 1609, 1576, 1610, 1598, 1601, 1618, 1474, 1587, 1624, + /* 500 */ 1458, 1605, 1496, 1500, 1626, 1629, 1499, 1503, 1640, 1642, + /* 510 */ 1643, 1563, 1560, 1504, 1649, 1582, 1511, 1584, 1652, 1592, + /* 520 */ 1507, 1585, 1539, 1607, 1590, 1431, 1586, 1573, 1588, 1591, + /* 530 */ 1593, 1599, 1633, 1619, 1600, 1602, 1606, 1611, 1603, 1620, + /* 540 */ 1615, 1628, 1621, 1627, 1449, 1608, 1622, 1634, 1510, 1636, + /* 550 */ 1644, 1647, 1623, 1660, 1512, 1625, 1670, 1675, 1676, 1677, + /* 560 */ 1679, 1681, 1625, 1706, 1532, 1682, 1645, 1646, 1650, 1648, + /* 570 */ 1651, 1654, 1680, 1653, 1658, 1689, 1705, 1556, 1662, 1656, + /* 580 */ 1663, 1711, 1717, 1671, 1669, 1720, 1674, 1678, 1724, 1683, + /* 590 */ 1684, 1725, 1687, 1688, 1726, 1698, 1657, 1664, 1672, 1690, + /* 600 */ 1741, 1691, 1701, 1702, 1732, 1712, 1753, 1753, 1778, 1742, + /* 610 */ 1744, 1769, 1739, 1728, 1764, 1775, 1776, 1777, 1779, 1780, + /* 620 */ 1794, 1788, 1789, 1759, 1548, 1791, 1549, 1792, 1793, 1795, + /* 630 */ 1796, 1797, 1800, 1801, 1829, 1808, 1787, 1807, 1847, 1814, + /* 640 */ 1803, 1813, 1854, 1820, 1810, 1817, 1859, 1826, 1815, 1824, + /* 650 */ 1864, 1830, 1831, 1867, 1846, 1849, 1850, 1851, 1853, 1855, }; #define YY_REDUCE_COUNT (272) -#define YY_REDUCE_MIN (-352) -#define YY_REDUCE_MAX (2019) +#define YY_REDUCE_MIN (-333) +#define YY_REDUCE_MAX (2104) static const short yy_reduce_ofst[] = { - /* 0 */ -236, -221, 287, 89, 840, 945, 971, 1060, 1126, 1190, - /* 10 */ -155, 540, 781, 1242, 882, 1295, 1309, 1361, 1413, 1425, - /* 20 */ 1439, 1495, 1509, 1519, 1561, 1573, 1615, 1625, 1639, 1681, - /* 30 */ 1695, 1705, 1765, 1775, 1787, 1829, 1845, 1871, 1895, 1937, - /* 40 */ 1949, 1961, 2019, 695, 1073, -208, 300, 413, 36, 119, - /* 50 */ 369, -312, -309, -143, -17, 76, 290, -257, -253, -352, - /* 60 */ -287, -35, 22, -231, 110, 137, 159, 282, 285, 316, - /* 70 */ 339, 370, -250, 416, 542, 561, -117, -202, 569, 592, - /* 80 */ -196, -217, 675, -148, 62, 4, 726, 77, 19, -301, - /* 90 */ -301, -301, -187, -139, -150, 75, 109, 390, 450, 451, - /* 100 */ 495, 502, 503, 553, 557, 579, 624, 629, 631, 632, - /* 110 */ 633, 634, 660, 142, 148, -101, -80, -37, 268, -246, - /* 120 */ 225, 383, 415, 323, 208, 263, -82, 272, -268, 559, - /* 130 */ 400, 469, 534, 349, 260, 509, 671, 673, 677, 730, - /* 140 */ 741, 521, 771, 644, 661, 683, 802, 718, 714, 793, - /* 150 */ 793, 817, 834, 803, 775, 749, 749, 749, 759, 738, - /* 160 */ 751, 752, 768, 793, 839, 806, 866, 812, 871, 828, - /* 170 */ 880, 881, 855, 858, 860, 899, 909, 918, 861, 917, - /* 180 */ 887, 919, 877, 888, 935, 893, 939, 904, 948, 950, - /* 190 */ 955, 953, 964, 944, 946, 947, 949, 951, 952, 954, - /* 200 */ 956, 957, 959, 961, 960, 965, 929, 915, 966, 928, - /* 210 */ 958, 981, 986, 987, 937, 982, 963, 962, 967, 968, - /* 220 */ 969, 973, 970, 976, 993, 989, 994, 978, 995, 998, - /* 230 */ 983, 975, 902, 997, 999, 1000, 924, 1004, 1010, 1011, - /* 240 */ 793, 923, 930, 933, 977, 991, 1005, 1006, 749, 1030, - /* 250 */ 1007, 1008, 1012, 1021, 1009, 1016, 1013, 1018, 1023, 1043, - /* 260 */ 1035, 1061, 1070, 1075, 1080, 1087, 1027, 1036, 1068, 1076, - /* 270 */ 1077, 1086, 1096, + /* 0 */ -253, -189, 706, 287, 775, 845, 898, 915, 999, 1060, + /* 10 */ 543, 1070, 1112, 1166, 1176, 1228, 1284, 1306, 1367, 1389, + /* 20 */ 1445, 1459, 1509, 1561, 1613, 1631, 1673, 1696, 1738, 1757, + /* 30 */ 1799, 1809, 1819, 1861, 1911, 1921, 1931, 1973, 2023, 2042, + /* 40 */ 2084, 2094, 2104, -255, 1200, -112, -35, -9, -261, -107, + /* 50 */ 215, -310, -186, -17, 294, -210, 308, -258, -252, -52, + /* 60 */ -280, -20, 125, -158, 357, 362, 408, 539, 541, 544, + /* 70 */ 551, 553, -193, 554, 595, 663, -267, 112, 666, 675, + /* 80 */ 366, -194, 676, 204, 369, 380, 679, 229, -263, -333, + /* 90 */ -333, -333, 102, -100, -73, -2, 96, 244, 439, 440, + /* 100 */ 510, 566, 583, 593, 594, 623, 626, 628, 696, 697, + /* 110 */ 700, 703, 704, 273, -282, -139, 195, 223, -185, 481, + /* 120 */ -235, 302, 341, 277, 355, 496, 329, 335, 509, 637, + /* 130 */ 196, 572, 585, 558, 328, 395, 412, 430, 465, 484, + /* 140 */ 535, 281, 351, 360, 289, 499, 692, 694, 657, 744, + /* 150 */ 744, 785, 789, 766, 743, 719, 719, 719, 731, 712, + /* 160 */ 714, 721, 735, 744, 827, 794, 863, 809, 865, 821, + /* 170 */ 877, 879, 843, 846, 847, 887, 895, 899, 840, 890, + /* 180 */ 861, 893, 851, 852, 900, 855, 902, 874, 913, 916, + /* 190 */ 921, 923, 928, 910, 922, 924, 925, 926, 927, 929, + /* 200 */ 931, 932, 933, 934, 936, 935, 904, 873, 930, 885, + /* 210 */ 906, 953, 956, 957, 911, 958, 941, 937, 938, 940, + /* 220 */ 959, 944, 963, 948, 946, 961, 996, 981, 998, 975, + /* 230 */ 943, 977, 939, 965, 978, 980, 950, 968, 982, 983, + /* 240 */ 744, 945, 947, 951, 954, 942, 960, 964, 719, 997, + /* 250 */ 962, 952, 966, 971, 985, 987, 988, 991, 984, 1026, + /* 260 */ 1000, 1044, 1051, 1053, 1061, 1066, 1017, 1027, 1058, 1059, + /* 270 */ 1062, 1072, 1087, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 10 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 20 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 30 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 40 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 50 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 60 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 70 */ 1443, 1443, 1515, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 80 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1513, 1666, 1443, - /* 90 */ 1843, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 100 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 110 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1515, 1443, 1513, - /* 120 */ 1855, 1855, 1855, 1443, 1443, 1443, 1710, 1710, 1443, 1443, - /* 130 */ 1443, 1443, 1609, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 140 */ 1443, 1702, 1443, 1443, 1924, 1443, 1443, 1708, 1878, 1443, - /* 150 */ 1443, 1443, 1443, 1562, 1870, 1847, 1861, 1848, 1845, 1909, - /* 160 */ 1909, 1909, 1864, 1443, 1578, 1874, 1443, 1443, 1443, 1694, - /* 170 */ 1443, 1443, 1671, 1668, 1668, 1443, 1443, 1443, 1443, 1515, - /* 180 */ 1443, 1515, 1443, 1443, 1515, 1443, 1515, 1443, 1515, 1515, - /* 190 */ 1443, 1515, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 200 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1513, 1704, - /* 210 */ 1443, 1513, 1443, 1443, 1443, 1513, 1883, 1443, 1443, 1443, - /* 220 */ 1443, 1883, 1443, 1443, 1443, 1443, 1513, 1443, 1513, 1443, - /* 230 */ 1443, 1443, 1885, 1883, 1443, 1443, 1885, 1883, 1443, 1443, - /* 240 */ 1443, 1897, 1893, 1885, 1901, 1899, 1876, 1874, 1861, 1443, - /* 250 */ 1443, 1915, 1911, 1927, 1915, 1911, 1915, 1911, 1443, 1578, - /* 260 */ 1443, 1443, 1443, 1513, 1475, 1443, 1696, 1710, 1612, 1612, - /* 270 */ 1612, 1516, 1448, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 280 */ 1443, 1443, 1443, 1443, 1443, 1781, 1896, 1895, 1819, 1818, - /* 290 */ 1817, 1815, 1780, 1443, 1574, 1779, 1778, 1443, 1443, 1443, - /* 300 */ 1443, 1443, 1443, 1443, 1443, 1772, 1773, 1771, 1770, 1443, - /* 310 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 320 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1844, - /* 330 */ 1443, 1912, 1916, 1443, 1443, 1443, 1755, 1443, 1443, 1443, - /* 340 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 350 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 360 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 370 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 380 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 390 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 400 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 410 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 420 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1480, 1443, - /* 430 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 440 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 450 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 460 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 470 */ 1443, 1443, 1443, 1443, 1443, 1543, 1542, 1443, 1443, 1443, - /* 480 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 490 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 500 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 510 */ 1443, 1443, 1443, 1714, 1443, 1443, 1443, 1443, 1443, 1443, - /* 520 */ 1443, 1443, 1443, 1877, 1443, 1443, 1443, 1443, 1443, 1443, - /* 530 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 540 */ 1755, 1443, 1894, 1443, 1854, 1850, 1443, 1443, 1846, 1754, - /* 550 */ 1443, 1443, 1910, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 560 */ 1443, 1443, 1839, 1443, 1812, 1797, 1443, 1443, 1443, 1443, - /* 570 */ 1443, 1443, 1443, 1443, 1443, 1443, 1766, 1443, 1443, 1443, - /* 580 */ 1443, 1443, 1606, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 590 */ 1443, 1443, 1443, 1443, 1443, 1591, 1589, 1588, 1587, 1443, - /* 600 */ 1584, 1443, 1443, 1443, 1443, 1615, 1614, 1443, 1443, 1443, - /* 610 */ 1443, 1443, 1443, 1535, 1443, 1443, 1443, 1443, 1443, 1443, - /* 620 */ 1443, 1443, 1443, 1526, 1443, 1525, 1443, 1443, 1443, 1443, - /* 630 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 640 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - /* 650 */ 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, + /* 0 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 10 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 20 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 30 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 40 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 50 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 60 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 70 */ 1449, 1449, 1521, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 80 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1519, 1674, 1449, + /* 90 */ 1851, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 100 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 110 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1521, 1449, 1519, + /* 120 */ 1863, 1863, 1863, 1449, 1449, 1449, 1718, 1718, 1449, 1449, + /* 130 */ 1449, 1449, 1617, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 140 */ 1449, 1710, 1449, 1449, 1932, 1449, 1449, 1716, 1886, 1449, + /* 150 */ 1449, 1449, 1449, 1570, 1878, 1855, 1869, 1856, 1853, 1917, + /* 160 */ 1917, 1917, 1872, 1449, 1586, 1882, 1449, 1449, 1449, 1702, + /* 170 */ 1449, 1449, 1679, 1676, 1676, 1449, 1449, 1449, 1449, 1521, + /* 180 */ 1449, 1521, 1449, 1449, 1521, 1449, 1521, 1449, 1521, 1521, + /* 190 */ 1449, 1521, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 200 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1519, 1712, + /* 210 */ 1449, 1519, 1449, 1449, 1449, 1519, 1891, 1449, 1449, 1449, + /* 220 */ 1449, 1891, 1449, 1449, 1449, 1449, 1519, 1449, 1519, 1449, + /* 230 */ 1449, 1449, 1893, 1891, 1449, 1449, 1893, 1891, 1449, 1449, + /* 240 */ 1449, 1905, 1901, 1893, 1909, 1907, 1884, 1882, 1869, 1449, + /* 250 */ 1449, 1923, 1919, 1935, 1923, 1919, 1923, 1919, 1449, 1586, + /* 260 */ 1449, 1449, 1449, 1519, 1481, 1449, 1704, 1718, 1620, 1620, + /* 270 */ 1620, 1522, 1454, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 280 */ 1449, 1449, 1449, 1449, 1449, 1789, 1904, 1903, 1827, 1826, + /* 290 */ 1825, 1823, 1788, 1449, 1582, 1787, 1786, 1449, 1449, 1449, + /* 300 */ 1449, 1449, 1449, 1449, 1449, 1780, 1781, 1779, 1778, 1449, + /* 310 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 320 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1852, + /* 330 */ 1449, 1920, 1924, 1449, 1449, 1449, 1763, 1449, 1449, 1449, + /* 340 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 350 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 360 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 370 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 380 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 390 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 400 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 410 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 420 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1486, 1449, + /* 430 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 440 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 450 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 460 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 470 */ 1449, 1449, 1449, 1449, 1449, 1551, 1550, 1449, 1449, 1449, + /* 480 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 490 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 500 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 510 */ 1449, 1449, 1449, 1449, 1722, 1449, 1449, 1449, 1449, 1449, + /* 520 */ 1449, 1449, 1449, 1449, 1885, 1449, 1449, 1449, 1449, 1449, + /* 530 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 540 */ 1449, 1763, 1449, 1902, 1449, 1862, 1858, 1449, 1449, 1854, + /* 550 */ 1762, 1449, 1449, 1918, 1449, 1449, 1449, 1449, 1449, 1449, + /* 560 */ 1449, 1449, 1449, 1847, 1449, 1820, 1805, 1449, 1449, 1449, + /* 570 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1774, 1449, 1449, + /* 580 */ 1449, 1449, 1449, 1614, 1449, 1449, 1449, 1449, 1449, 1449, + /* 590 */ 1449, 1449, 1449, 1449, 1449, 1449, 1599, 1597, 1596, 1595, + /* 600 */ 1449, 1592, 1449, 1449, 1449, 1449, 1623, 1622, 1449, 1449, + /* 610 */ 1449, 1449, 1449, 1449, 1542, 1449, 1449, 1449, 1449, 1449, + /* 620 */ 1449, 1449, 1449, 1449, 1533, 1449, 1532, 1449, 1449, 1449, + /* 630 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 640 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + /* 650 */ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, }; /********** End of lemon-generated parsing tables *****************************/ @@ -946,6 +962,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* EXISTS => nothing */ 0, /* BUFFER => nothing */ 0, /* CACHELAST => nothing */ + 0, /* CACHELASTSIZE => nothing */ 0, /* COMP => nothing */ 0, /* DURATION => nothing */ 0, /* NK_VARIABLE => nothing */ @@ -1130,11 +1147,11 @@ static const YYCODETYPE yyFallback[] = { 0, /* ASC => nothing */ 0, /* NULLS => nothing */ 0, /* ID => nothing */ - 246, /* NK_BITNOT => ID */ - 246, /* VALUES => ID */ - 246, /* IMPORT => ID */ - 246, /* NK_SEMI => ID */ - 246, /* FILE => ID */ + 247, /* NK_BITNOT => ID */ + 247, /* VALUES => ID */ + 247, /* IMPORT => ID */ + 247, /* NK_SEMI => ID */ + 247, /* FILE => ID */ }; #endif /* YYFALLBACK */ @@ -1285,318 +1302,319 @@ static const char *const yyTokenName[] = { /* 60 */ "EXISTS", /* 61 */ "BUFFER", /* 62 */ "CACHELAST", - /* 63 */ "COMP", - /* 64 */ "DURATION", - /* 65 */ "NK_VARIABLE", - /* 66 */ "FSYNC", - /* 67 */ "MAXROWS", - /* 68 */ "MINROWS", - /* 69 */ "KEEP", - /* 70 */ "PAGES", - /* 71 */ "PAGESIZE", - /* 72 */ "PRECISION", - /* 73 */ "REPLICA", - /* 74 */ "STRICT", - /* 75 */ "WAL", - /* 76 */ "VGROUPS", - /* 77 */ "SINGLE_STABLE", - /* 78 */ "RETENTIONS", - /* 79 */ "SCHEMALESS", - /* 80 */ "NK_COLON", - /* 81 */ "TABLE", - /* 82 */ "NK_LP", - /* 83 */ "NK_RP", - /* 84 */ "STABLE", - /* 85 */ "ADD", - /* 86 */ "COLUMN", - /* 87 */ "MODIFY", - /* 88 */ "RENAME", - /* 89 */ "TAG", - /* 90 */ "SET", - /* 91 */ "NK_EQ", - /* 92 */ "USING", - /* 93 */ "TAGS", - /* 94 */ "COMMENT", - /* 95 */ "BOOL", - /* 96 */ "TINYINT", - /* 97 */ "SMALLINT", - /* 98 */ "INT", - /* 99 */ "INTEGER", - /* 100 */ "BIGINT", - /* 101 */ "FLOAT", - /* 102 */ "DOUBLE", - /* 103 */ "BINARY", - /* 104 */ "TIMESTAMP", - /* 105 */ "NCHAR", - /* 106 */ "UNSIGNED", - /* 107 */ "JSON", - /* 108 */ "VARCHAR", - /* 109 */ "MEDIUMBLOB", - /* 110 */ "BLOB", - /* 111 */ "VARBINARY", - /* 112 */ "DECIMAL", - /* 113 */ "MAX_DELAY", - /* 114 */ "WATERMARK", - /* 115 */ "ROLLUP", - /* 116 */ "TTL", - /* 117 */ "SMA", - /* 118 */ "FIRST", - /* 119 */ "LAST", - /* 120 */ "SHOW", - /* 121 */ "DATABASES", - /* 122 */ "TABLES", - /* 123 */ "STABLES", - /* 124 */ "MNODES", - /* 125 */ "MODULES", - /* 126 */ "QNODES", - /* 127 */ "FUNCTIONS", - /* 128 */ "INDEXES", - /* 129 */ "ACCOUNTS", - /* 130 */ "APPS", - /* 131 */ "CONNECTIONS", - /* 132 */ "LICENCE", - /* 133 */ "GRANTS", - /* 134 */ "QUERIES", - /* 135 */ "SCORES", - /* 136 */ "TOPICS", - /* 137 */ "VARIABLES", - /* 138 */ "BNODES", - /* 139 */ "SNODES", - /* 140 */ "CLUSTER", - /* 141 */ "TRANSACTIONS", - /* 142 */ "DISTRIBUTED", - /* 143 */ "CONSUMERS", - /* 144 */ "SUBSCRIPTIONS", - /* 145 */ "LIKE", - /* 146 */ "INDEX", - /* 147 */ "FUNCTION", - /* 148 */ "INTERVAL", - /* 149 */ "TOPIC", - /* 150 */ "AS", - /* 151 */ "WITH", - /* 152 */ "META", - /* 153 */ "CONSUMER", - /* 154 */ "GROUP", - /* 155 */ "DESC", - /* 156 */ "DESCRIBE", - /* 157 */ "RESET", - /* 158 */ "QUERY", - /* 159 */ "CACHE", - /* 160 */ "EXPLAIN", - /* 161 */ "ANALYZE", - /* 162 */ "VERBOSE", - /* 163 */ "NK_BOOL", - /* 164 */ "RATIO", - /* 165 */ "NK_FLOAT", - /* 166 */ "COMPACT", - /* 167 */ "VNODES", - /* 168 */ "IN", - /* 169 */ "OUTPUTTYPE", - /* 170 */ "AGGREGATE", - /* 171 */ "BUFSIZE", - /* 172 */ "STREAM", - /* 173 */ "INTO", - /* 174 */ "TRIGGER", - /* 175 */ "AT_ONCE", - /* 176 */ "WINDOW_CLOSE", - /* 177 */ "IGNORE", - /* 178 */ "EXPIRED", - /* 179 */ "KILL", - /* 180 */ "CONNECTION", - /* 181 */ "TRANSACTION", - /* 182 */ "BALANCE", - /* 183 */ "VGROUP", - /* 184 */ "MERGE", - /* 185 */ "REDISTRIBUTE", - /* 186 */ "SPLIT", - /* 187 */ "SYNCDB", - /* 188 */ "DELETE", - /* 189 */ "INSERT", - /* 190 */ "NULL", - /* 191 */ "NK_QUESTION", - /* 192 */ "NK_ARROW", - /* 193 */ "ROWTS", - /* 194 */ "TBNAME", - /* 195 */ "QSTARTTS", - /* 196 */ "QENDTS", - /* 197 */ "WSTARTTS", - /* 198 */ "WENDTS", - /* 199 */ "WDURATION", - /* 200 */ "CAST", - /* 201 */ "NOW", - /* 202 */ "TODAY", - /* 203 */ "TIMEZONE", - /* 204 */ "CLIENT_VERSION", - /* 205 */ "SERVER_VERSION", - /* 206 */ "SERVER_STATUS", - /* 207 */ "CURRENT_USER", - /* 208 */ "COUNT", - /* 209 */ "LAST_ROW", - /* 210 */ "BETWEEN", - /* 211 */ "IS", - /* 212 */ "NK_LT", - /* 213 */ "NK_GT", - /* 214 */ "NK_LE", - /* 215 */ "NK_GE", - /* 216 */ "NK_NE", - /* 217 */ "MATCH", - /* 218 */ "NMATCH", - /* 219 */ "CONTAINS", - /* 220 */ "JOIN", - /* 221 */ "INNER", - /* 222 */ "SELECT", - /* 223 */ "DISTINCT", - /* 224 */ "WHERE", - /* 225 */ "PARTITION", - /* 226 */ "BY", - /* 227 */ "SESSION", - /* 228 */ "STATE_WINDOW", - /* 229 */ "SLIDING", - /* 230 */ "FILL", - /* 231 */ "VALUE", - /* 232 */ "NONE", - /* 233 */ "PREV", - /* 234 */ "LINEAR", - /* 235 */ "NEXT", - /* 236 */ "HAVING", - /* 237 */ "RANGE", - /* 238 */ "EVERY", - /* 239 */ "ORDER", - /* 240 */ "SLIMIT", - /* 241 */ "SOFFSET", - /* 242 */ "LIMIT", - /* 243 */ "OFFSET", - /* 244 */ "ASC", - /* 245 */ "NULLS", - /* 246 */ "ID", - /* 247 */ "NK_BITNOT", - /* 248 */ "VALUES", - /* 249 */ "IMPORT", - /* 250 */ "NK_SEMI", - /* 251 */ "FILE", - /* 252 */ "cmd", - /* 253 */ "account_options", - /* 254 */ "alter_account_options", - /* 255 */ "literal", - /* 256 */ "alter_account_option", - /* 257 */ "user_name", - /* 258 */ "sysinfo_opt", - /* 259 */ "privileges", - /* 260 */ "priv_level", - /* 261 */ "priv_type_list", - /* 262 */ "priv_type", - /* 263 */ "db_name", - /* 264 */ "dnode_endpoint", - /* 265 */ "not_exists_opt", - /* 266 */ "db_options", - /* 267 */ "exists_opt", - /* 268 */ "alter_db_options", - /* 269 */ "integer_list", - /* 270 */ "variable_list", - /* 271 */ "retention_list", - /* 272 */ "alter_db_option", - /* 273 */ "retention", - /* 274 */ "full_table_name", - /* 275 */ "column_def_list", - /* 276 */ "tags_def_opt", - /* 277 */ "table_options", - /* 278 */ "multi_create_clause", - /* 279 */ "tags_def", - /* 280 */ "multi_drop_clause", - /* 281 */ "alter_table_clause", - /* 282 */ "alter_table_options", - /* 283 */ "column_name", - /* 284 */ "type_name", - /* 285 */ "signed_literal", - /* 286 */ "create_subtable_clause", - /* 287 */ "specific_cols_opt", - /* 288 */ "expression_list", - /* 289 */ "drop_table_clause", - /* 290 */ "col_name_list", - /* 291 */ "table_name", - /* 292 */ "column_def", - /* 293 */ "duration_list", - /* 294 */ "rollup_func_list", - /* 295 */ "alter_table_option", - /* 296 */ "duration_literal", - /* 297 */ "rollup_func_name", - /* 298 */ "function_name", - /* 299 */ "col_name", - /* 300 */ "db_name_cond_opt", - /* 301 */ "like_pattern_opt", - /* 302 */ "table_name_cond", - /* 303 */ "from_db_opt", - /* 304 */ "index_name", - /* 305 */ "index_options", - /* 306 */ "func_list", - /* 307 */ "sliding_opt", - /* 308 */ "sma_stream_opt", - /* 309 */ "func", - /* 310 */ "stream_options", - /* 311 */ "topic_name", - /* 312 */ "query_expression", - /* 313 */ "cgroup_name", - /* 314 */ "analyze_opt", - /* 315 */ "explain_options", - /* 316 */ "agg_func_opt", - /* 317 */ "bufsize_opt", - /* 318 */ "stream_name", - /* 319 */ "into_opt", - /* 320 */ "dnode_list", - /* 321 */ "where_clause_opt", - /* 322 */ "signed", - /* 323 */ "literal_func", - /* 324 */ "literal_list", - /* 325 */ "table_alias", - /* 326 */ "column_alias", - /* 327 */ "expression", - /* 328 */ "pseudo_column", - /* 329 */ "column_reference", - /* 330 */ "function_expression", - /* 331 */ "subquery", - /* 332 */ "star_func", - /* 333 */ "star_func_para_list", - /* 334 */ "noarg_func", - /* 335 */ "other_para_list", - /* 336 */ "star_func_para", - /* 337 */ "predicate", - /* 338 */ "compare_op", - /* 339 */ "in_op", - /* 340 */ "in_predicate_value", - /* 341 */ "boolean_value_expression", - /* 342 */ "boolean_primary", - /* 343 */ "common_expression", - /* 344 */ "from_clause_opt", - /* 345 */ "table_reference_list", - /* 346 */ "table_reference", - /* 347 */ "table_primary", - /* 348 */ "joined_table", - /* 349 */ "alias_opt", - /* 350 */ "parenthesized_joined_table", - /* 351 */ "join_type", - /* 352 */ "search_condition", - /* 353 */ "query_specification", - /* 354 */ "set_quantifier_opt", - /* 355 */ "select_list", - /* 356 */ "partition_by_clause_opt", - /* 357 */ "range_opt", - /* 358 */ "every_opt", - /* 359 */ "fill_opt", - /* 360 */ "twindow_clause_opt", - /* 361 */ "group_by_clause_opt", - /* 362 */ "having_clause_opt", - /* 363 */ "select_item", - /* 364 */ "fill_mode", - /* 365 */ "group_by_list", - /* 366 */ "query_expression_body", - /* 367 */ "order_by_clause_opt", - /* 368 */ "slimit_clause_opt", - /* 369 */ "limit_clause_opt", - /* 370 */ "query_primary", - /* 371 */ "sort_specification_list", - /* 372 */ "sort_specification", - /* 373 */ "ordering_specification_opt", - /* 374 */ "null_ordering_opt", + /* 63 */ "CACHELASTSIZE", + /* 64 */ "COMP", + /* 65 */ "DURATION", + /* 66 */ "NK_VARIABLE", + /* 67 */ "FSYNC", + /* 68 */ "MAXROWS", + /* 69 */ "MINROWS", + /* 70 */ "KEEP", + /* 71 */ "PAGES", + /* 72 */ "PAGESIZE", + /* 73 */ "PRECISION", + /* 74 */ "REPLICA", + /* 75 */ "STRICT", + /* 76 */ "WAL", + /* 77 */ "VGROUPS", + /* 78 */ "SINGLE_STABLE", + /* 79 */ "RETENTIONS", + /* 80 */ "SCHEMALESS", + /* 81 */ "NK_COLON", + /* 82 */ "TABLE", + /* 83 */ "NK_LP", + /* 84 */ "NK_RP", + /* 85 */ "STABLE", + /* 86 */ "ADD", + /* 87 */ "COLUMN", + /* 88 */ "MODIFY", + /* 89 */ "RENAME", + /* 90 */ "TAG", + /* 91 */ "SET", + /* 92 */ "NK_EQ", + /* 93 */ "USING", + /* 94 */ "TAGS", + /* 95 */ "COMMENT", + /* 96 */ "BOOL", + /* 97 */ "TINYINT", + /* 98 */ "SMALLINT", + /* 99 */ "INT", + /* 100 */ "INTEGER", + /* 101 */ "BIGINT", + /* 102 */ "FLOAT", + /* 103 */ "DOUBLE", + /* 104 */ "BINARY", + /* 105 */ "TIMESTAMP", + /* 106 */ "NCHAR", + /* 107 */ "UNSIGNED", + /* 108 */ "JSON", + /* 109 */ "VARCHAR", + /* 110 */ "MEDIUMBLOB", + /* 111 */ "BLOB", + /* 112 */ "VARBINARY", + /* 113 */ "DECIMAL", + /* 114 */ "MAX_DELAY", + /* 115 */ "WATERMARK", + /* 116 */ "ROLLUP", + /* 117 */ "TTL", + /* 118 */ "SMA", + /* 119 */ "FIRST", + /* 120 */ "LAST", + /* 121 */ "SHOW", + /* 122 */ "DATABASES", + /* 123 */ "TABLES", + /* 124 */ "STABLES", + /* 125 */ "MNODES", + /* 126 */ "MODULES", + /* 127 */ "QNODES", + /* 128 */ "FUNCTIONS", + /* 129 */ "INDEXES", + /* 130 */ "ACCOUNTS", + /* 131 */ "APPS", + /* 132 */ "CONNECTIONS", + /* 133 */ "LICENCE", + /* 134 */ "GRANTS", + /* 135 */ "QUERIES", + /* 136 */ "SCORES", + /* 137 */ "TOPICS", + /* 138 */ "VARIABLES", + /* 139 */ "BNODES", + /* 140 */ "SNODES", + /* 141 */ "CLUSTER", + /* 142 */ "TRANSACTIONS", + /* 143 */ "DISTRIBUTED", + /* 144 */ "CONSUMERS", + /* 145 */ "SUBSCRIPTIONS", + /* 146 */ "LIKE", + /* 147 */ "INDEX", + /* 148 */ "FUNCTION", + /* 149 */ "INTERVAL", + /* 150 */ "TOPIC", + /* 151 */ "AS", + /* 152 */ "WITH", + /* 153 */ "META", + /* 154 */ "CONSUMER", + /* 155 */ "GROUP", + /* 156 */ "DESC", + /* 157 */ "DESCRIBE", + /* 158 */ "RESET", + /* 159 */ "QUERY", + /* 160 */ "CACHE", + /* 161 */ "EXPLAIN", + /* 162 */ "ANALYZE", + /* 163 */ "VERBOSE", + /* 164 */ "NK_BOOL", + /* 165 */ "RATIO", + /* 166 */ "NK_FLOAT", + /* 167 */ "COMPACT", + /* 168 */ "VNODES", + /* 169 */ "IN", + /* 170 */ "OUTPUTTYPE", + /* 171 */ "AGGREGATE", + /* 172 */ "BUFSIZE", + /* 173 */ "STREAM", + /* 174 */ "INTO", + /* 175 */ "TRIGGER", + /* 176 */ "AT_ONCE", + /* 177 */ "WINDOW_CLOSE", + /* 178 */ "IGNORE", + /* 179 */ "EXPIRED", + /* 180 */ "KILL", + /* 181 */ "CONNECTION", + /* 182 */ "TRANSACTION", + /* 183 */ "BALANCE", + /* 184 */ "VGROUP", + /* 185 */ "MERGE", + /* 186 */ "REDISTRIBUTE", + /* 187 */ "SPLIT", + /* 188 */ "SYNCDB", + /* 189 */ "DELETE", + /* 190 */ "INSERT", + /* 191 */ "NULL", + /* 192 */ "NK_QUESTION", + /* 193 */ "NK_ARROW", + /* 194 */ "ROWTS", + /* 195 */ "TBNAME", + /* 196 */ "QSTARTTS", + /* 197 */ "QENDTS", + /* 198 */ "WSTARTTS", + /* 199 */ "WENDTS", + /* 200 */ "WDURATION", + /* 201 */ "CAST", + /* 202 */ "NOW", + /* 203 */ "TODAY", + /* 204 */ "TIMEZONE", + /* 205 */ "CLIENT_VERSION", + /* 206 */ "SERVER_VERSION", + /* 207 */ "SERVER_STATUS", + /* 208 */ "CURRENT_USER", + /* 209 */ "COUNT", + /* 210 */ "LAST_ROW", + /* 211 */ "BETWEEN", + /* 212 */ "IS", + /* 213 */ "NK_LT", + /* 214 */ "NK_GT", + /* 215 */ "NK_LE", + /* 216 */ "NK_GE", + /* 217 */ "NK_NE", + /* 218 */ "MATCH", + /* 219 */ "NMATCH", + /* 220 */ "CONTAINS", + /* 221 */ "JOIN", + /* 222 */ "INNER", + /* 223 */ "SELECT", + /* 224 */ "DISTINCT", + /* 225 */ "WHERE", + /* 226 */ "PARTITION", + /* 227 */ "BY", + /* 228 */ "SESSION", + /* 229 */ "STATE_WINDOW", + /* 230 */ "SLIDING", + /* 231 */ "FILL", + /* 232 */ "VALUE", + /* 233 */ "NONE", + /* 234 */ "PREV", + /* 235 */ "LINEAR", + /* 236 */ "NEXT", + /* 237 */ "HAVING", + /* 238 */ "RANGE", + /* 239 */ "EVERY", + /* 240 */ "ORDER", + /* 241 */ "SLIMIT", + /* 242 */ "SOFFSET", + /* 243 */ "LIMIT", + /* 244 */ "OFFSET", + /* 245 */ "ASC", + /* 246 */ "NULLS", + /* 247 */ "ID", + /* 248 */ "NK_BITNOT", + /* 249 */ "VALUES", + /* 250 */ "IMPORT", + /* 251 */ "NK_SEMI", + /* 252 */ "FILE", + /* 253 */ "cmd", + /* 254 */ "account_options", + /* 255 */ "alter_account_options", + /* 256 */ "literal", + /* 257 */ "alter_account_option", + /* 258 */ "user_name", + /* 259 */ "sysinfo_opt", + /* 260 */ "privileges", + /* 261 */ "priv_level", + /* 262 */ "priv_type_list", + /* 263 */ "priv_type", + /* 264 */ "db_name", + /* 265 */ "dnode_endpoint", + /* 266 */ "not_exists_opt", + /* 267 */ "db_options", + /* 268 */ "exists_opt", + /* 269 */ "alter_db_options", + /* 270 */ "integer_list", + /* 271 */ "variable_list", + /* 272 */ "retention_list", + /* 273 */ "alter_db_option", + /* 274 */ "retention", + /* 275 */ "full_table_name", + /* 276 */ "column_def_list", + /* 277 */ "tags_def_opt", + /* 278 */ "table_options", + /* 279 */ "multi_create_clause", + /* 280 */ "tags_def", + /* 281 */ "multi_drop_clause", + /* 282 */ "alter_table_clause", + /* 283 */ "alter_table_options", + /* 284 */ "column_name", + /* 285 */ "type_name", + /* 286 */ "signed_literal", + /* 287 */ "create_subtable_clause", + /* 288 */ "specific_cols_opt", + /* 289 */ "expression_list", + /* 290 */ "drop_table_clause", + /* 291 */ "col_name_list", + /* 292 */ "table_name", + /* 293 */ "column_def", + /* 294 */ "duration_list", + /* 295 */ "rollup_func_list", + /* 296 */ "alter_table_option", + /* 297 */ "duration_literal", + /* 298 */ "rollup_func_name", + /* 299 */ "function_name", + /* 300 */ "col_name", + /* 301 */ "db_name_cond_opt", + /* 302 */ "like_pattern_opt", + /* 303 */ "table_name_cond", + /* 304 */ "from_db_opt", + /* 305 */ "index_name", + /* 306 */ "index_options", + /* 307 */ "func_list", + /* 308 */ "sliding_opt", + /* 309 */ "sma_stream_opt", + /* 310 */ "func", + /* 311 */ "stream_options", + /* 312 */ "topic_name", + /* 313 */ "query_expression", + /* 314 */ "cgroup_name", + /* 315 */ "analyze_opt", + /* 316 */ "explain_options", + /* 317 */ "agg_func_opt", + /* 318 */ "bufsize_opt", + /* 319 */ "stream_name", + /* 320 */ "into_opt", + /* 321 */ "dnode_list", + /* 322 */ "where_clause_opt", + /* 323 */ "signed", + /* 324 */ "literal_func", + /* 325 */ "literal_list", + /* 326 */ "table_alias", + /* 327 */ "column_alias", + /* 328 */ "expression", + /* 329 */ "pseudo_column", + /* 330 */ "column_reference", + /* 331 */ "function_expression", + /* 332 */ "subquery", + /* 333 */ "star_func", + /* 334 */ "star_func_para_list", + /* 335 */ "noarg_func", + /* 336 */ "other_para_list", + /* 337 */ "star_func_para", + /* 338 */ "predicate", + /* 339 */ "compare_op", + /* 340 */ "in_op", + /* 341 */ "in_predicate_value", + /* 342 */ "boolean_value_expression", + /* 343 */ "boolean_primary", + /* 344 */ "common_expression", + /* 345 */ "from_clause_opt", + /* 346 */ "table_reference_list", + /* 347 */ "table_reference", + /* 348 */ "table_primary", + /* 349 */ "joined_table", + /* 350 */ "alias_opt", + /* 351 */ "parenthesized_joined_table", + /* 352 */ "join_type", + /* 353 */ "search_condition", + /* 354 */ "query_specification", + /* 355 */ "set_quantifier_opt", + /* 356 */ "select_list", + /* 357 */ "partition_by_clause_opt", + /* 358 */ "range_opt", + /* 359 */ "every_opt", + /* 360 */ "fill_opt", + /* 361 */ "twindow_clause_opt", + /* 362 */ "group_by_clause_opt", + /* 363 */ "having_clause_opt", + /* 364 */ "select_item", + /* 365 */ "fill_mode", + /* 366 */ "group_by_list", + /* 367 */ "query_expression_body", + /* 368 */ "order_by_clause_opt", + /* 369 */ "slimit_clause_opt", + /* 370 */ "limit_clause_opt", + /* 371 */ "query_primary", + /* 372 */ "sort_specification_list", + /* 373 */ "sort_specification", + /* 374 */ "ordering_specification_opt", + /* 375 */ "null_ordering_opt", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -1677,417 +1695,419 @@ static const char *const yyRuleName[] = { /* 70 */ "db_options ::=", /* 71 */ "db_options ::= db_options BUFFER NK_INTEGER", /* 72 */ "db_options ::= db_options CACHELAST NK_INTEGER", - /* 73 */ "db_options ::= db_options COMP NK_INTEGER", - /* 74 */ "db_options ::= db_options DURATION NK_INTEGER", - /* 75 */ "db_options ::= db_options DURATION NK_VARIABLE", - /* 76 */ "db_options ::= db_options FSYNC NK_INTEGER", - /* 77 */ "db_options ::= db_options MAXROWS NK_INTEGER", - /* 78 */ "db_options ::= db_options MINROWS NK_INTEGER", - /* 79 */ "db_options ::= db_options KEEP integer_list", - /* 80 */ "db_options ::= db_options KEEP variable_list", - /* 81 */ "db_options ::= db_options PAGES NK_INTEGER", - /* 82 */ "db_options ::= db_options PAGESIZE NK_INTEGER", - /* 83 */ "db_options ::= db_options PRECISION NK_STRING", - /* 84 */ "db_options ::= db_options REPLICA NK_INTEGER", - /* 85 */ "db_options ::= db_options STRICT NK_INTEGER", - /* 86 */ "db_options ::= db_options WAL NK_INTEGER", - /* 87 */ "db_options ::= db_options VGROUPS NK_INTEGER", - /* 88 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", - /* 89 */ "db_options ::= db_options RETENTIONS retention_list", - /* 90 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", - /* 91 */ "alter_db_options ::= alter_db_option", - /* 92 */ "alter_db_options ::= alter_db_options alter_db_option", - /* 93 */ "alter_db_option ::= BUFFER NK_INTEGER", - /* 94 */ "alter_db_option ::= CACHELAST NK_INTEGER", - /* 95 */ "alter_db_option ::= FSYNC NK_INTEGER", - /* 96 */ "alter_db_option ::= KEEP integer_list", - /* 97 */ "alter_db_option ::= KEEP variable_list", - /* 98 */ "alter_db_option ::= PAGES NK_INTEGER", - /* 99 */ "alter_db_option ::= REPLICA NK_INTEGER", - /* 100 */ "alter_db_option ::= STRICT NK_INTEGER", - /* 101 */ "alter_db_option ::= WAL NK_INTEGER", - /* 102 */ "integer_list ::= NK_INTEGER", - /* 103 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER", - /* 104 */ "variable_list ::= NK_VARIABLE", - /* 105 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE", - /* 106 */ "retention_list ::= retention", - /* 107 */ "retention_list ::= retention_list NK_COMMA retention", - /* 108 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE", - /* 109 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options", - /* 110 */ "cmd ::= CREATE TABLE multi_create_clause", - /* 111 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options", - /* 112 */ "cmd ::= DROP TABLE multi_drop_clause", - /* 113 */ "cmd ::= DROP STABLE exists_opt full_table_name", - /* 114 */ "cmd ::= ALTER TABLE alter_table_clause", - /* 115 */ "cmd ::= ALTER STABLE alter_table_clause", - /* 116 */ "alter_table_clause ::= full_table_name alter_table_options", - /* 117 */ "alter_table_clause ::= full_table_name ADD COLUMN column_name type_name", - /* 118 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name", - /* 119 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name", - /* 120 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name", - /* 121 */ "alter_table_clause ::= full_table_name ADD TAG column_name type_name", - /* 122 */ "alter_table_clause ::= full_table_name DROP TAG column_name", - /* 123 */ "alter_table_clause ::= full_table_name MODIFY TAG column_name type_name", - /* 124 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name", - /* 125 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal", - /* 126 */ "multi_create_clause ::= create_subtable_clause", - /* 127 */ "multi_create_clause ::= multi_create_clause create_subtable_clause", - /* 128 */ "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", - /* 129 */ "multi_drop_clause ::= drop_table_clause", - /* 130 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause", - /* 131 */ "drop_table_clause ::= exists_opt full_table_name", - /* 132 */ "specific_cols_opt ::=", - /* 133 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP", - /* 134 */ "full_table_name ::= table_name", - /* 135 */ "full_table_name ::= db_name NK_DOT table_name", - /* 136 */ "column_def_list ::= column_def", - /* 137 */ "column_def_list ::= column_def_list NK_COMMA column_def", - /* 138 */ "column_def ::= column_name type_name", - /* 139 */ "column_def ::= column_name type_name COMMENT NK_STRING", - /* 140 */ "type_name ::= BOOL", - /* 141 */ "type_name ::= TINYINT", - /* 142 */ "type_name ::= SMALLINT", - /* 143 */ "type_name ::= INT", - /* 144 */ "type_name ::= INTEGER", - /* 145 */ "type_name ::= BIGINT", - /* 146 */ "type_name ::= FLOAT", - /* 147 */ "type_name ::= DOUBLE", - /* 148 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP", - /* 149 */ "type_name ::= TIMESTAMP", - /* 150 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP", - /* 151 */ "type_name ::= TINYINT UNSIGNED", - /* 152 */ "type_name ::= SMALLINT UNSIGNED", - /* 153 */ "type_name ::= INT UNSIGNED", - /* 154 */ "type_name ::= BIGINT UNSIGNED", - /* 155 */ "type_name ::= JSON", - /* 156 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP", - /* 157 */ "type_name ::= MEDIUMBLOB", - /* 158 */ "type_name ::= BLOB", - /* 159 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP", - /* 160 */ "type_name ::= DECIMAL", - /* 161 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP", - /* 162 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP", - /* 163 */ "tags_def_opt ::=", - /* 164 */ "tags_def_opt ::= tags_def", - /* 165 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP", - /* 166 */ "table_options ::=", - /* 167 */ "table_options ::= table_options COMMENT NK_STRING", - /* 168 */ "table_options ::= table_options MAX_DELAY duration_list", - /* 169 */ "table_options ::= table_options WATERMARK duration_list", - /* 170 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP", - /* 171 */ "table_options ::= table_options TTL NK_INTEGER", - /* 172 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP", - /* 173 */ "alter_table_options ::= alter_table_option", - /* 174 */ "alter_table_options ::= alter_table_options alter_table_option", - /* 175 */ "alter_table_option ::= COMMENT NK_STRING", - /* 176 */ "alter_table_option ::= TTL NK_INTEGER", - /* 177 */ "duration_list ::= duration_literal", - /* 178 */ "duration_list ::= duration_list NK_COMMA duration_literal", - /* 179 */ "rollup_func_list ::= rollup_func_name", - /* 180 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", - /* 181 */ "rollup_func_name ::= function_name", - /* 182 */ "rollup_func_name ::= FIRST", - /* 183 */ "rollup_func_name ::= LAST", - /* 184 */ "col_name_list ::= col_name", - /* 185 */ "col_name_list ::= col_name_list NK_COMMA col_name", - /* 186 */ "col_name ::= column_name", - /* 187 */ "cmd ::= SHOW DNODES", - /* 188 */ "cmd ::= SHOW USERS", - /* 189 */ "cmd ::= SHOW DATABASES", - /* 190 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", - /* 191 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", - /* 192 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", - /* 193 */ "cmd ::= SHOW MNODES", - /* 194 */ "cmd ::= SHOW MODULES", - /* 195 */ "cmd ::= SHOW QNODES", - /* 196 */ "cmd ::= SHOW FUNCTIONS", - /* 197 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", - /* 198 */ "cmd ::= SHOW STREAMS", - /* 199 */ "cmd ::= SHOW ACCOUNTS", - /* 200 */ "cmd ::= SHOW APPS", - /* 201 */ "cmd ::= SHOW CONNECTIONS", - /* 202 */ "cmd ::= SHOW LICENCE", - /* 203 */ "cmd ::= SHOW GRANTS", - /* 204 */ "cmd ::= SHOW CREATE DATABASE db_name", - /* 205 */ "cmd ::= SHOW CREATE TABLE full_table_name", - /* 206 */ "cmd ::= SHOW CREATE STABLE full_table_name", - /* 207 */ "cmd ::= SHOW QUERIES", - /* 208 */ "cmd ::= SHOW SCORES", - /* 209 */ "cmd ::= SHOW TOPICS", - /* 210 */ "cmd ::= SHOW VARIABLES", - /* 211 */ "cmd ::= SHOW LOCAL VARIABLES", - /* 212 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES", - /* 213 */ "cmd ::= SHOW BNODES", - /* 214 */ "cmd ::= SHOW SNODES", - /* 215 */ "cmd ::= SHOW CLUSTER", - /* 216 */ "cmd ::= SHOW TRANSACTIONS", - /* 217 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", - /* 218 */ "cmd ::= SHOW CONSUMERS", - /* 219 */ "cmd ::= SHOW SUBSCRIPTIONS", - /* 220 */ "db_name_cond_opt ::=", - /* 221 */ "db_name_cond_opt ::= db_name NK_DOT", - /* 222 */ "like_pattern_opt ::=", - /* 223 */ "like_pattern_opt ::= LIKE NK_STRING", - /* 224 */ "table_name_cond ::= table_name", - /* 225 */ "from_db_opt ::=", - /* 226 */ "from_db_opt ::= FROM db_name", - /* 227 */ "cmd ::= CREATE SMA INDEX not_exists_opt index_name ON table_name index_options", - /* 228 */ "cmd ::= DROP INDEX exists_opt index_name", - /* 229 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", - /* 230 */ "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", - /* 231 */ "func_list ::= func", - /* 232 */ "func_list ::= func_list NK_COMMA func", - /* 233 */ "func ::= function_name NK_LP expression_list NK_RP", - /* 234 */ "sma_stream_opt ::=", - /* 235 */ "sma_stream_opt ::= stream_options WATERMARK duration_literal", - /* 236 */ "sma_stream_opt ::= stream_options MAX_DELAY duration_literal", - /* 237 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression", - /* 238 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name", - /* 239 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name", - /* 240 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name", - /* 241 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name", - /* 242 */ "cmd ::= DROP TOPIC exists_opt topic_name", - /* 243 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", - /* 244 */ "cmd ::= DESC full_table_name", - /* 245 */ "cmd ::= DESCRIBE full_table_name", - /* 246 */ "cmd ::= RESET QUERY CACHE", - /* 247 */ "cmd ::= EXPLAIN analyze_opt explain_options query_expression", - /* 248 */ "analyze_opt ::=", - /* 249 */ "analyze_opt ::= ANALYZE", - /* 250 */ "explain_options ::=", - /* 251 */ "explain_options ::= explain_options VERBOSE NK_BOOL", - /* 252 */ "explain_options ::= explain_options RATIO NK_FLOAT", - /* 253 */ "cmd ::= COMPACT VNODES IN NK_LP integer_list NK_RP", - /* 254 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt", - /* 255 */ "cmd ::= DROP FUNCTION exists_opt function_name", - /* 256 */ "agg_func_opt ::=", - /* 257 */ "agg_func_opt ::= AGGREGATE", - /* 258 */ "bufsize_opt ::=", - /* 259 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", - /* 260 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options into_opt AS query_expression", - /* 261 */ "cmd ::= DROP STREAM exists_opt stream_name", - /* 262 */ "into_opt ::=", - /* 263 */ "into_opt ::= INTO full_table_name", - /* 264 */ "stream_options ::=", - /* 265 */ "stream_options ::= stream_options TRIGGER AT_ONCE", - /* 266 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", - /* 267 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", - /* 268 */ "stream_options ::= stream_options WATERMARK duration_literal", - /* 269 */ "stream_options ::= stream_options IGNORE EXPIRED", - /* 270 */ "cmd ::= KILL CONNECTION NK_INTEGER", - /* 271 */ "cmd ::= KILL QUERY NK_STRING", - /* 272 */ "cmd ::= KILL TRANSACTION NK_INTEGER", - /* 273 */ "cmd ::= BALANCE VGROUP", - /* 274 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", - /* 275 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", - /* 276 */ "cmd ::= SPLIT VGROUP NK_INTEGER", - /* 277 */ "dnode_list ::= DNODE NK_INTEGER", - /* 278 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", - /* 279 */ "cmd ::= SYNCDB db_name REPLICA", - /* 280 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", - /* 281 */ "cmd ::= query_expression", - /* 282 */ "cmd ::= INSERT INTO full_table_name specific_cols_opt query_expression", - /* 283 */ "literal ::= NK_INTEGER", - /* 284 */ "literal ::= NK_FLOAT", - /* 285 */ "literal ::= NK_STRING", - /* 286 */ "literal ::= NK_BOOL", - /* 287 */ "literal ::= TIMESTAMP NK_STRING", - /* 288 */ "literal ::= duration_literal", - /* 289 */ "literal ::= NULL", - /* 290 */ "literal ::= NK_QUESTION", - /* 291 */ "duration_literal ::= NK_VARIABLE", - /* 292 */ "signed ::= NK_INTEGER", - /* 293 */ "signed ::= NK_PLUS NK_INTEGER", - /* 294 */ "signed ::= NK_MINUS NK_INTEGER", - /* 295 */ "signed ::= NK_FLOAT", - /* 296 */ "signed ::= NK_PLUS NK_FLOAT", - /* 297 */ "signed ::= NK_MINUS NK_FLOAT", - /* 298 */ "signed_literal ::= signed", - /* 299 */ "signed_literal ::= NK_STRING", - /* 300 */ "signed_literal ::= NK_BOOL", - /* 301 */ "signed_literal ::= TIMESTAMP NK_STRING", - /* 302 */ "signed_literal ::= duration_literal", - /* 303 */ "signed_literal ::= NULL", - /* 304 */ "signed_literal ::= literal_func", - /* 305 */ "literal_list ::= signed_literal", - /* 306 */ "literal_list ::= literal_list NK_COMMA signed_literal", - /* 307 */ "db_name ::= NK_ID", - /* 308 */ "table_name ::= NK_ID", - /* 309 */ "column_name ::= NK_ID", - /* 310 */ "function_name ::= NK_ID", - /* 311 */ "table_alias ::= NK_ID", - /* 312 */ "column_alias ::= NK_ID", - /* 313 */ "user_name ::= NK_ID", - /* 314 */ "index_name ::= NK_ID", - /* 315 */ "topic_name ::= NK_ID", - /* 316 */ "stream_name ::= NK_ID", - /* 317 */ "cgroup_name ::= NK_ID", - /* 318 */ "expression ::= literal", - /* 319 */ "expression ::= pseudo_column", - /* 320 */ "expression ::= column_reference", - /* 321 */ "expression ::= function_expression", - /* 322 */ "expression ::= subquery", - /* 323 */ "expression ::= NK_LP expression NK_RP", - /* 324 */ "expression ::= NK_PLUS expression", - /* 325 */ "expression ::= NK_MINUS expression", - /* 326 */ "expression ::= expression NK_PLUS expression", - /* 327 */ "expression ::= expression NK_MINUS expression", - /* 328 */ "expression ::= expression NK_STAR expression", - /* 329 */ "expression ::= expression NK_SLASH expression", - /* 330 */ "expression ::= expression NK_REM expression", - /* 331 */ "expression ::= column_reference NK_ARROW NK_STRING", - /* 332 */ "expression ::= expression NK_BITAND expression", - /* 333 */ "expression ::= expression NK_BITOR expression", - /* 334 */ "expression_list ::= expression", - /* 335 */ "expression_list ::= expression_list NK_COMMA expression", - /* 336 */ "column_reference ::= column_name", - /* 337 */ "column_reference ::= table_name NK_DOT column_name", - /* 338 */ "pseudo_column ::= ROWTS", - /* 339 */ "pseudo_column ::= TBNAME", - /* 340 */ "pseudo_column ::= table_name NK_DOT TBNAME", - /* 341 */ "pseudo_column ::= QSTARTTS", - /* 342 */ "pseudo_column ::= QENDTS", - /* 343 */ "pseudo_column ::= WSTARTTS", - /* 344 */ "pseudo_column ::= WENDTS", - /* 345 */ "pseudo_column ::= WDURATION", - /* 346 */ "function_expression ::= function_name NK_LP expression_list NK_RP", - /* 347 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", - /* 348 */ "function_expression ::= CAST NK_LP expression AS type_name NK_RP", - /* 349 */ "function_expression ::= literal_func", - /* 350 */ "literal_func ::= noarg_func NK_LP NK_RP", - /* 351 */ "literal_func ::= NOW", - /* 352 */ "noarg_func ::= NOW", - /* 353 */ "noarg_func ::= TODAY", - /* 354 */ "noarg_func ::= TIMEZONE", - /* 355 */ "noarg_func ::= DATABASE", - /* 356 */ "noarg_func ::= CLIENT_VERSION", - /* 357 */ "noarg_func ::= SERVER_VERSION", - /* 358 */ "noarg_func ::= SERVER_STATUS", - /* 359 */ "noarg_func ::= CURRENT_USER", - /* 360 */ "noarg_func ::= USER", - /* 361 */ "star_func ::= COUNT", - /* 362 */ "star_func ::= FIRST", - /* 363 */ "star_func ::= LAST", - /* 364 */ "star_func ::= LAST_ROW", - /* 365 */ "star_func_para_list ::= NK_STAR", - /* 366 */ "star_func_para_list ::= other_para_list", - /* 367 */ "other_para_list ::= star_func_para", - /* 368 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", - /* 369 */ "star_func_para ::= expression", - /* 370 */ "star_func_para ::= table_name NK_DOT NK_STAR", - /* 371 */ "predicate ::= expression compare_op expression", - /* 372 */ "predicate ::= expression BETWEEN expression AND expression", - /* 373 */ "predicate ::= expression NOT BETWEEN expression AND expression", - /* 374 */ "predicate ::= expression IS NULL", - /* 375 */ "predicate ::= expression IS NOT NULL", - /* 376 */ "predicate ::= expression in_op in_predicate_value", - /* 377 */ "compare_op ::= NK_LT", - /* 378 */ "compare_op ::= NK_GT", - /* 379 */ "compare_op ::= NK_LE", - /* 380 */ "compare_op ::= NK_GE", - /* 381 */ "compare_op ::= NK_NE", - /* 382 */ "compare_op ::= NK_EQ", - /* 383 */ "compare_op ::= LIKE", - /* 384 */ "compare_op ::= NOT LIKE", - /* 385 */ "compare_op ::= MATCH", - /* 386 */ "compare_op ::= NMATCH", - /* 387 */ "compare_op ::= CONTAINS", - /* 388 */ "in_op ::= IN", - /* 389 */ "in_op ::= NOT IN", - /* 390 */ "in_predicate_value ::= NK_LP expression_list NK_RP", - /* 391 */ "boolean_value_expression ::= boolean_primary", - /* 392 */ "boolean_value_expression ::= NOT boolean_primary", - /* 393 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", - /* 394 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", - /* 395 */ "boolean_primary ::= predicate", - /* 396 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", - /* 397 */ "common_expression ::= expression", - /* 398 */ "common_expression ::= boolean_value_expression", - /* 399 */ "from_clause_opt ::=", - /* 400 */ "from_clause_opt ::= FROM table_reference_list", - /* 401 */ "table_reference_list ::= table_reference", - /* 402 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", - /* 403 */ "table_reference ::= table_primary", - /* 404 */ "table_reference ::= joined_table", - /* 405 */ "table_primary ::= table_name alias_opt", - /* 406 */ "table_primary ::= db_name NK_DOT table_name alias_opt", - /* 407 */ "table_primary ::= subquery alias_opt", - /* 408 */ "table_primary ::= parenthesized_joined_table", - /* 409 */ "alias_opt ::=", - /* 410 */ "alias_opt ::= table_alias", - /* 411 */ "alias_opt ::= AS table_alias", - /* 412 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", - /* 413 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", - /* 414 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", - /* 415 */ "join_type ::=", - /* 416 */ "join_type ::= INNER", - /* 417 */ "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", - /* 418 */ "set_quantifier_opt ::=", - /* 419 */ "set_quantifier_opt ::= DISTINCT", - /* 420 */ "set_quantifier_opt ::= ALL", - /* 421 */ "select_list ::= select_item", - /* 422 */ "select_list ::= select_list NK_COMMA select_item", - /* 423 */ "select_item ::= NK_STAR", - /* 424 */ "select_item ::= common_expression", - /* 425 */ "select_item ::= common_expression column_alias", - /* 426 */ "select_item ::= common_expression AS column_alias", - /* 427 */ "select_item ::= table_name NK_DOT NK_STAR", - /* 428 */ "where_clause_opt ::=", - /* 429 */ "where_clause_opt ::= WHERE search_condition", - /* 430 */ "partition_by_clause_opt ::=", - /* 431 */ "partition_by_clause_opt ::= PARTITION BY expression_list", - /* 432 */ "twindow_clause_opt ::=", - /* 433 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", - /* 434 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP", - /* 435 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", - /* 436 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", - /* 437 */ "sliding_opt ::=", - /* 438 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", - /* 439 */ "fill_opt ::=", - /* 440 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", - /* 441 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", - /* 442 */ "fill_mode ::= NONE", - /* 443 */ "fill_mode ::= PREV", - /* 444 */ "fill_mode ::= NULL", - /* 445 */ "fill_mode ::= LINEAR", - /* 446 */ "fill_mode ::= NEXT", - /* 447 */ "group_by_clause_opt ::=", - /* 448 */ "group_by_clause_opt ::= GROUP BY group_by_list", - /* 449 */ "group_by_list ::= expression", - /* 450 */ "group_by_list ::= group_by_list NK_COMMA expression", - /* 451 */ "having_clause_opt ::=", - /* 452 */ "having_clause_opt ::= HAVING search_condition", - /* 453 */ "range_opt ::=", - /* 454 */ "range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP", - /* 455 */ "every_opt ::=", - /* 456 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", - /* 457 */ "query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt", - /* 458 */ "query_expression_body ::= query_primary", - /* 459 */ "query_expression_body ::= query_expression_body UNION ALL query_expression_body", - /* 460 */ "query_expression_body ::= query_expression_body UNION query_expression_body", - /* 461 */ "query_primary ::= query_specification", - /* 462 */ "query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP", - /* 463 */ "order_by_clause_opt ::=", - /* 464 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", - /* 465 */ "slimit_clause_opt ::=", - /* 466 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", - /* 467 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", - /* 468 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 469 */ "limit_clause_opt ::=", - /* 470 */ "limit_clause_opt ::= LIMIT NK_INTEGER", - /* 471 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", - /* 472 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 473 */ "subquery ::= NK_LP query_expression NK_RP", - /* 474 */ "search_condition ::= common_expression", - /* 475 */ "sort_specification_list ::= sort_specification", - /* 476 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", - /* 477 */ "sort_specification ::= expression ordering_specification_opt null_ordering_opt", - /* 478 */ "ordering_specification_opt ::=", - /* 479 */ "ordering_specification_opt ::= ASC", - /* 480 */ "ordering_specification_opt ::= DESC", - /* 481 */ "null_ordering_opt ::=", - /* 482 */ "null_ordering_opt ::= NULLS FIRST", - /* 483 */ "null_ordering_opt ::= NULLS LAST", + /* 73 */ "db_options ::= db_options CACHELASTSIZE NK_INTEGER", + /* 74 */ "db_options ::= db_options COMP NK_INTEGER", + /* 75 */ "db_options ::= db_options DURATION NK_INTEGER", + /* 76 */ "db_options ::= db_options DURATION NK_VARIABLE", + /* 77 */ "db_options ::= db_options FSYNC NK_INTEGER", + /* 78 */ "db_options ::= db_options MAXROWS NK_INTEGER", + /* 79 */ "db_options ::= db_options MINROWS NK_INTEGER", + /* 80 */ "db_options ::= db_options KEEP integer_list", + /* 81 */ "db_options ::= db_options KEEP variable_list", + /* 82 */ "db_options ::= db_options PAGES NK_INTEGER", + /* 83 */ "db_options ::= db_options PAGESIZE NK_INTEGER", + /* 84 */ "db_options ::= db_options PRECISION NK_STRING", + /* 85 */ "db_options ::= db_options REPLICA NK_INTEGER", + /* 86 */ "db_options ::= db_options STRICT NK_INTEGER", + /* 87 */ "db_options ::= db_options WAL NK_INTEGER", + /* 88 */ "db_options ::= db_options VGROUPS NK_INTEGER", + /* 89 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", + /* 90 */ "db_options ::= db_options RETENTIONS retention_list", + /* 91 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", + /* 92 */ "alter_db_options ::= alter_db_option", + /* 93 */ "alter_db_options ::= alter_db_options alter_db_option", + /* 94 */ "alter_db_option ::= BUFFER NK_INTEGER", + /* 95 */ "alter_db_option ::= CACHELAST NK_INTEGER", + /* 96 */ "alter_db_option ::= CACHELASTSIZE NK_INTEGER", + /* 97 */ "alter_db_option ::= FSYNC NK_INTEGER", + /* 98 */ "alter_db_option ::= KEEP integer_list", + /* 99 */ "alter_db_option ::= KEEP variable_list", + /* 100 */ "alter_db_option ::= PAGES NK_INTEGER", + /* 101 */ "alter_db_option ::= REPLICA NK_INTEGER", + /* 102 */ "alter_db_option ::= STRICT NK_INTEGER", + /* 103 */ "alter_db_option ::= WAL NK_INTEGER", + /* 104 */ "integer_list ::= NK_INTEGER", + /* 105 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER", + /* 106 */ "variable_list ::= NK_VARIABLE", + /* 107 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE", + /* 108 */ "retention_list ::= retention", + /* 109 */ "retention_list ::= retention_list NK_COMMA retention", + /* 110 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE", + /* 111 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options", + /* 112 */ "cmd ::= CREATE TABLE multi_create_clause", + /* 113 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options", + /* 114 */ "cmd ::= DROP TABLE multi_drop_clause", + /* 115 */ "cmd ::= DROP STABLE exists_opt full_table_name", + /* 116 */ "cmd ::= ALTER TABLE alter_table_clause", + /* 117 */ "cmd ::= ALTER STABLE alter_table_clause", + /* 118 */ "alter_table_clause ::= full_table_name alter_table_options", + /* 119 */ "alter_table_clause ::= full_table_name ADD COLUMN column_name type_name", + /* 120 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name", + /* 121 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name", + /* 122 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name", + /* 123 */ "alter_table_clause ::= full_table_name ADD TAG column_name type_name", + /* 124 */ "alter_table_clause ::= full_table_name DROP TAG column_name", + /* 125 */ "alter_table_clause ::= full_table_name MODIFY TAG column_name type_name", + /* 126 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name", + /* 127 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal", + /* 128 */ "multi_create_clause ::= create_subtable_clause", + /* 129 */ "multi_create_clause ::= multi_create_clause create_subtable_clause", + /* 130 */ "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", + /* 131 */ "multi_drop_clause ::= drop_table_clause", + /* 132 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause", + /* 133 */ "drop_table_clause ::= exists_opt full_table_name", + /* 134 */ "specific_cols_opt ::=", + /* 135 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP", + /* 136 */ "full_table_name ::= table_name", + /* 137 */ "full_table_name ::= db_name NK_DOT table_name", + /* 138 */ "column_def_list ::= column_def", + /* 139 */ "column_def_list ::= column_def_list NK_COMMA column_def", + /* 140 */ "column_def ::= column_name type_name", + /* 141 */ "column_def ::= column_name type_name COMMENT NK_STRING", + /* 142 */ "type_name ::= BOOL", + /* 143 */ "type_name ::= TINYINT", + /* 144 */ "type_name ::= SMALLINT", + /* 145 */ "type_name ::= INT", + /* 146 */ "type_name ::= INTEGER", + /* 147 */ "type_name ::= BIGINT", + /* 148 */ "type_name ::= FLOAT", + /* 149 */ "type_name ::= DOUBLE", + /* 150 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP", + /* 151 */ "type_name ::= TIMESTAMP", + /* 152 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP", + /* 153 */ "type_name ::= TINYINT UNSIGNED", + /* 154 */ "type_name ::= SMALLINT UNSIGNED", + /* 155 */ "type_name ::= INT UNSIGNED", + /* 156 */ "type_name ::= BIGINT UNSIGNED", + /* 157 */ "type_name ::= JSON", + /* 158 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP", + /* 159 */ "type_name ::= MEDIUMBLOB", + /* 160 */ "type_name ::= BLOB", + /* 161 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP", + /* 162 */ "type_name ::= DECIMAL", + /* 163 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP", + /* 164 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP", + /* 165 */ "tags_def_opt ::=", + /* 166 */ "tags_def_opt ::= tags_def", + /* 167 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP", + /* 168 */ "table_options ::=", + /* 169 */ "table_options ::= table_options COMMENT NK_STRING", + /* 170 */ "table_options ::= table_options MAX_DELAY duration_list", + /* 171 */ "table_options ::= table_options WATERMARK duration_list", + /* 172 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP", + /* 173 */ "table_options ::= table_options TTL NK_INTEGER", + /* 174 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP", + /* 175 */ "alter_table_options ::= alter_table_option", + /* 176 */ "alter_table_options ::= alter_table_options alter_table_option", + /* 177 */ "alter_table_option ::= COMMENT NK_STRING", + /* 178 */ "alter_table_option ::= TTL NK_INTEGER", + /* 179 */ "duration_list ::= duration_literal", + /* 180 */ "duration_list ::= duration_list NK_COMMA duration_literal", + /* 181 */ "rollup_func_list ::= rollup_func_name", + /* 182 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", + /* 183 */ "rollup_func_name ::= function_name", + /* 184 */ "rollup_func_name ::= FIRST", + /* 185 */ "rollup_func_name ::= LAST", + /* 186 */ "col_name_list ::= col_name", + /* 187 */ "col_name_list ::= col_name_list NK_COMMA col_name", + /* 188 */ "col_name ::= column_name", + /* 189 */ "cmd ::= SHOW DNODES", + /* 190 */ "cmd ::= SHOW USERS", + /* 191 */ "cmd ::= SHOW DATABASES", + /* 192 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", + /* 193 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", + /* 194 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", + /* 195 */ "cmd ::= SHOW MNODES", + /* 196 */ "cmd ::= SHOW MODULES", + /* 197 */ "cmd ::= SHOW QNODES", + /* 198 */ "cmd ::= SHOW FUNCTIONS", + /* 199 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", + /* 200 */ "cmd ::= SHOW STREAMS", + /* 201 */ "cmd ::= SHOW ACCOUNTS", + /* 202 */ "cmd ::= SHOW APPS", + /* 203 */ "cmd ::= SHOW CONNECTIONS", + /* 204 */ "cmd ::= SHOW LICENCE", + /* 205 */ "cmd ::= SHOW GRANTS", + /* 206 */ "cmd ::= SHOW CREATE DATABASE db_name", + /* 207 */ "cmd ::= SHOW CREATE TABLE full_table_name", + /* 208 */ "cmd ::= SHOW CREATE STABLE full_table_name", + /* 209 */ "cmd ::= SHOW QUERIES", + /* 210 */ "cmd ::= SHOW SCORES", + /* 211 */ "cmd ::= SHOW TOPICS", + /* 212 */ "cmd ::= SHOW VARIABLES", + /* 213 */ "cmd ::= SHOW LOCAL VARIABLES", + /* 214 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES", + /* 215 */ "cmd ::= SHOW BNODES", + /* 216 */ "cmd ::= SHOW SNODES", + /* 217 */ "cmd ::= SHOW CLUSTER", + /* 218 */ "cmd ::= SHOW TRANSACTIONS", + /* 219 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", + /* 220 */ "cmd ::= SHOW CONSUMERS", + /* 221 */ "cmd ::= SHOW SUBSCRIPTIONS", + /* 222 */ "db_name_cond_opt ::=", + /* 223 */ "db_name_cond_opt ::= db_name NK_DOT", + /* 224 */ "like_pattern_opt ::=", + /* 225 */ "like_pattern_opt ::= LIKE NK_STRING", + /* 226 */ "table_name_cond ::= table_name", + /* 227 */ "from_db_opt ::=", + /* 228 */ "from_db_opt ::= FROM db_name", + /* 229 */ "cmd ::= CREATE SMA INDEX not_exists_opt index_name ON table_name index_options", + /* 230 */ "cmd ::= DROP INDEX exists_opt index_name", + /* 231 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", + /* 232 */ "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", + /* 233 */ "func_list ::= func", + /* 234 */ "func_list ::= func_list NK_COMMA func", + /* 235 */ "func ::= function_name NK_LP expression_list NK_RP", + /* 236 */ "sma_stream_opt ::=", + /* 237 */ "sma_stream_opt ::= stream_options WATERMARK duration_literal", + /* 238 */ "sma_stream_opt ::= stream_options MAX_DELAY duration_literal", + /* 239 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression", + /* 240 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name", + /* 241 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name", + /* 242 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name", + /* 243 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name", + /* 244 */ "cmd ::= DROP TOPIC exists_opt topic_name", + /* 245 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", + /* 246 */ "cmd ::= DESC full_table_name", + /* 247 */ "cmd ::= DESCRIBE full_table_name", + /* 248 */ "cmd ::= RESET QUERY CACHE", + /* 249 */ "cmd ::= EXPLAIN analyze_opt explain_options query_expression", + /* 250 */ "analyze_opt ::=", + /* 251 */ "analyze_opt ::= ANALYZE", + /* 252 */ "explain_options ::=", + /* 253 */ "explain_options ::= explain_options VERBOSE NK_BOOL", + /* 254 */ "explain_options ::= explain_options RATIO NK_FLOAT", + /* 255 */ "cmd ::= COMPACT VNODES IN NK_LP integer_list NK_RP", + /* 256 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt", + /* 257 */ "cmd ::= DROP FUNCTION exists_opt function_name", + /* 258 */ "agg_func_opt ::=", + /* 259 */ "agg_func_opt ::= AGGREGATE", + /* 260 */ "bufsize_opt ::=", + /* 261 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", + /* 262 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options into_opt AS query_expression", + /* 263 */ "cmd ::= DROP STREAM exists_opt stream_name", + /* 264 */ "into_opt ::=", + /* 265 */ "into_opt ::= INTO full_table_name", + /* 266 */ "stream_options ::=", + /* 267 */ "stream_options ::= stream_options TRIGGER AT_ONCE", + /* 268 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", + /* 269 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", + /* 270 */ "stream_options ::= stream_options WATERMARK duration_literal", + /* 271 */ "stream_options ::= stream_options IGNORE EXPIRED", + /* 272 */ "cmd ::= KILL CONNECTION NK_INTEGER", + /* 273 */ "cmd ::= KILL QUERY NK_STRING", + /* 274 */ "cmd ::= KILL TRANSACTION NK_INTEGER", + /* 275 */ "cmd ::= BALANCE VGROUP", + /* 276 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", + /* 277 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", + /* 278 */ "cmd ::= SPLIT VGROUP NK_INTEGER", + /* 279 */ "dnode_list ::= DNODE NK_INTEGER", + /* 280 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", + /* 281 */ "cmd ::= SYNCDB db_name REPLICA", + /* 282 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", + /* 283 */ "cmd ::= query_expression", + /* 284 */ "cmd ::= INSERT INTO full_table_name specific_cols_opt query_expression", + /* 285 */ "literal ::= NK_INTEGER", + /* 286 */ "literal ::= NK_FLOAT", + /* 287 */ "literal ::= NK_STRING", + /* 288 */ "literal ::= NK_BOOL", + /* 289 */ "literal ::= TIMESTAMP NK_STRING", + /* 290 */ "literal ::= duration_literal", + /* 291 */ "literal ::= NULL", + /* 292 */ "literal ::= NK_QUESTION", + /* 293 */ "duration_literal ::= NK_VARIABLE", + /* 294 */ "signed ::= NK_INTEGER", + /* 295 */ "signed ::= NK_PLUS NK_INTEGER", + /* 296 */ "signed ::= NK_MINUS NK_INTEGER", + /* 297 */ "signed ::= NK_FLOAT", + /* 298 */ "signed ::= NK_PLUS NK_FLOAT", + /* 299 */ "signed ::= NK_MINUS NK_FLOAT", + /* 300 */ "signed_literal ::= signed", + /* 301 */ "signed_literal ::= NK_STRING", + /* 302 */ "signed_literal ::= NK_BOOL", + /* 303 */ "signed_literal ::= TIMESTAMP NK_STRING", + /* 304 */ "signed_literal ::= duration_literal", + /* 305 */ "signed_literal ::= NULL", + /* 306 */ "signed_literal ::= literal_func", + /* 307 */ "literal_list ::= signed_literal", + /* 308 */ "literal_list ::= literal_list NK_COMMA signed_literal", + /* 309 */ "db_name ::= NK_ID", + /* 310 */ "table_name ::= NK_ID", + /* 311 */ "column_name ::= NK_ID", + /* 312 */ "function_name ::= NK_ID", + /* 313 */ "table_alias ::= NK_ID", + /* 314 */ "column_alias ::= NK_ID", + /* 315 */ "user_name ::= NK_ID", + /* 316 */ "index_name ::= NK_ID", + /* 317 */ "topic_name ::= NK_ID", + /* 318 */ "stream_name ::= NK_ID", + /* 319 */ "cgroup_name ::= NK_ID", + /* 320 */ "expression ::= literal", + /* 321 */ "expression ::= pseudo_column", + /* 322 */ "expression ::= column_reference", + /* 323 */ "expression ::= function_expression", + /* 324 */ "expression ::= subquery", + /* 325 */ "expression ::= NK_LP expression NK_RP", + /* 326 */ "expression ::= NK_PLUS expression", + /* 327 */ "expression ::= NK_MINUS expression", + /* 328 */ "expression ::= expression NK_PLUS expression", + /* 329 */ "expression ::= expression NK_MINUS expression", + /* 330 */ "expression ::= expression NK_STAR expression", + /* 331 */ "expression ::= expression NK_SLASH expression", + /* 332 */ "expression ::= expression NK_REM expression", + /* 333 */ "expression ::= column_reference NK_ARROW NK_STRING", + /* 334 */ "expression ::= expression NK_BITAND expression", + /* 335 */ "expression ::= expression NK_BITOR expression", + /* 336 */ "expression_list ::= expression", + /* 337 */ "expression_list ::= expression_list NK_COMMA expression", + /* 338 */ "column_reference ::= column_name", + /* 339 */ "column_reference ::= table_name NK_DOT column_name", + /* 340 */ "pseudo_column ::= ROWTS", + /* 341 */ "pseudo_column ::= TBNAME", + /* 342 */ "pseudo_column ::= table_name NK_DOT TBNAME", + /* 343 */ "pseudo_column ::= QSTARTTS", + /* 344 */ "pseudo_column ::= QENDTS", + /* 345 */ "pseudo_column ::= WSTARTTS", + /* 346 */ "pseudo_column ::= WENDTS", + /* 347 */ "pseudo_column ::= WDURATION", + /* 348 */ "function_expression ::= function_name NK_LP expression_list NK_RP", + /* 349 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", + /* 350 */ "function_expression ::= CAST NK_LP expression AS type_name NK_RP", + /* 351 */ "function_expression ::= literal_func", + /* 352 */ "literal_func ::= noarg_func NK_LP NK_RP", + /* 353 */ "literal_func ::= NOW", + /* 354 */ "noarg_func ::= NOW", + /* 355 */ "noarg_func ::= TODAY", + /* 356 */ "noarg_func ::= TIMEZONE", + /* 357 */ "noarg_func ::= DATABASE", + /* 358 */ "noarg_func ::= CLIENT_VERSION", + /* 359 */ "noarg_func ::= SERVER_VERSION", + /* 360 */ "noarg_func ::= SERVER_STATUS", + /* 361 */ "noarg_func ::= CURRENT_USER", + /* 362 */ "noarg_func ::= USER", + /* 363 */ "star_func ::= COUNT", + /* 364 */ "star_func ::= FIRST", + /* 365 */ "star_func ::= LAST", + /* 366 */ "star_func ::= LAST_ROW", + /* 367 */ "star_func_para_list ::= NK_STAR", + /* 368 */ "star_func_para_list ::= other_para_list", + /* 369 */ "other_para_list ::= star_func_para", + /* 370 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", + /* 371 */ "star_func_para ::= expression", + /* 372 */ "star_func_para ::= table_name NK_DOT NK_STAR", + /* 373 */ "predicate ::= expression compare_op expression", + /* 374 */ "predicate ::= expression BETWEEN expression AND expression", + /* 375 */ "predicate ::= expression NOT BETWEEN expression AND expression", + /* 376 */ "predicate ::= expression IS NULL", + /* 377 */ "predicate ::= expression IS NOT NULL", + /* 378 */ "predicate ::= expression in_op in_predicate_value", + /* 379 */ "compare_op ::= NK_LT", + /* 380 */ "compare_op ::= NK_GT", + /* 381 */ "compare_op ::= NK_LE", + /* 382 */ "compare_op ::= NK_GE", + /* 383 */ "compare_op ::= NK_NE", + /* 384 */ "compare_op ::= NK_EQ", + /* 385 */ "compare_op ::= LIKE", + /* 386 */ "compare_op ::= NOT LIKE", + /* 387 */ "compare_op ::= MATCH", + /* 388 */ "compare_op ::= NMATCH", + /* 389 */ "compare_op ::= CONTAINS", + /* 390 */ "in_op ::= IN", + /* 391 */ "in_op ::= NOT IN", + /* 392 */ "in_predicate_value ::= NK_LP expression_list NK_RP", + /* 393 */ "boolean_value_expression ::= boolean_primary", + /* 394 */ "boolean_value_expression ::= NOT boolean_primary", + /* 395 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", + /* 396 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", + /* 397 */ "boolean_primary ::= predicate", + /* 398 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", + /* 399 */ "common_expression ::= expression", + /* 400 */ "common_expression ::= boolean_value_expression", + /* 401 */ "from_clause_opt ::=", + /* 402 */ "from_clause_opt ::= FROM table_reference_list", + /* 403 */ "table_reference_list ::= table_reference", + /* 404 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", + /* 405 */ "table_reference ::= table_primary", + /* 406 */ "table_reference ::= joined_table", + /* 407 */ "table_primary ::= table_name alias_opt", + /* 408 */ "table_primary ::= db_name NK_DOT table_name alias_opt", + /* 409 */ "table_primary ::= subquery alias_opt", + /* 410 */ "table_primary ::= parenthesized_joined_table", + /* 411 */ "alias_opt ::=", + /* 412 */ "alias_opt ::= table_alias", + /* 413 */ "alias_opt ::= AS table_alias", + /* 414 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", + /* 415 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", + /* 416 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", + /* 417 */ "join_type ::=", + /* 418 */ "join_type ::= INNER", + /* 419 */ "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", + /* 420 */ "set_quantifier_opt ::=", + /* 421 */ "set_quantifier_opt ::= DISTINCT", + /* 422 */ "set_quantifier_opt ::= ALL", + /* 423 */ "select_list ::= select_item", + /* 424 */ "select_list ::= select_list NK_COMMA select_item", + /* 425 */ "select_item ::= NK_STAR", + /* 426 */ "select_item ::= common_expression", + /* 427 */ "select_item ::= common_expression column_alias", + /* 428 */ "select_item ::= common_expression AS column_alias", + /* 429 */ "select_item ::= table_name NK_DOT NK_STAR", + /* 430 */ "where_clause_opt ::=", + /* 431 */ "where_clause_opt ::= WHERE search_condition", + /* 432 */ "partition_by_clause_opt ::=", + /* 433 */ "partition_by_clause_opt ::= PARTITION BY expression_list", + /* 434 */ "twindow_clause_opt ::=", + /* 435 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", + /* 436 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP", + /* 437 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", + /* 438 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", + /* 439 */ "sliding_opt ::=", + /* 440 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", + /* 441 */ "fill_opt ::=", + /* 442 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", + /* 443 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", + /* 444 */ "fill_mode ::= NONE", + /* 445 */ "fill_mode ::= PREV", + /* 446 */ "fill_mode ::= NULL", + /* 447 */ "fill_mode ::= LINEAR", + /* 448 */ "fill_mode ::= NEXT", + /* 449 */ "group_by_clause_opt ::=", + /* 450 */ "group_by_clause_opt ::= GROUP BY group_by_list", + /* 451 */ "group_by_list ::= expression", + /* 452 */ "group_by_list ::= group_by_list NK_COMMA expression", + /* 453 */ "having_clause_opt ::=", + /* 454 */ "having_clause_opt ::= HAVING search_condition", + /* 455 */ "range_opt ::=", + /* 456 */ "range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP", + /* 457 */ "every_opt ::=", + /* 458 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", + /* 459 */ "query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt", + /* 460 */ "query_expression_body ::= query_primary", + /* 461 */ "query_expression_body ::= query_expression_body UNION ALL query_expression_body", + /* 462 */ "query_expression_body ::= query_expression_body UNION query_expression_body", + /* 463 */ "query_primary ::= query_specification", + /* 464 */ "query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP", + /* 465 */ "order_by_clause_opt ::=", + /* 466 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", + /* 467 */ "slimit_clause_opt ::=", + /* 468 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", + /* 469 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", + /* 470 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 471 */ "limit_clause_opt ::=", + /* 472 */ "limit_clause_opt ::= LIMIT NK_INTEGER", + /* 473 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", + /* 474 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 475 */ "subquery ::= NK_LP query_expression NK_RP", + /* 476 */ "search_condition ::= common_expression", + /* 477 */ "sort_specification_list ::= sort_specification", + /* 478 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", + /* 479 */ "sort_specification ::= expression ordering_specification_opt null_ordering_opt", + /* 480 */ "ordering_specification_opt ::=", + /* 481 */ "ordering_specification_opt ::= ASC", + /* 482 */ "ordering_specification_opt ::= DESC", + /* 483 */ "null_ordering_opt ::=", + /* 484 */ "null_ordering_opt ::= NULLS FIRST", + /* 485 */ "null_ordering_opt ::= NULLS LAST", }; #endif /* NDEBUG */ @@ -2214,181 +2234,181 @@ static void yy_destructor( */ /********* Begin destructor definitions ***************************************/ /* Default NON-TERMINAL Destructor */ - case 252: /* cmd */ - case 255: /* literal */ - case 266: /* db_options */ - case 268: /* alter_db_options */ - case 273: /* retention */ - case 274: /* full_table_name */ - case 277: /* table_options */ - case 281: /* alter_table_clause */ - case 282: /* alter_table_options */ - case 285: /* signed_literal */ - case 286: /* create_subtable_clause */ - case 289: /* drop_table_clause */ - case 292: /* column_def */ - case 296: /* duration_literal */ - case 297: /* rollup_func_name */ - case 299: /* col_name */ - case 300: /* db_name_cond_opt */ - case 301: /* like_pattern_opt */ - case 302: /* table_name_cond */ - case 303: /* from_db_opt */ - case 305: /* index_options */ - case 307: /* sliding_opt */ - case 308: /* sma_stream_opt */ - case 309: /* func */ - case 310: /* stream_options */ - case 312: /* query_expression */ - case 315: /* explain_options */ - case 319: /* into_opt */ - case 321: /* where_clause_opt */ - case 322: /* signed */ - case 323: /* literal_func */ - case 327: /* expression */ - case 328: /* pseudo_column */ - case 329: /* column_reference */ - case 330: /* function_expression */ - case 331: /* subquery */ - case 336: /* star_func_para */ - case 337: /* predicate */ - case 340: /* in_predicate_value */ - case 341: /* boolean_value_expression */ - case 342: /* boolean_primary */ - case 343: /* common_expression */ - case 344: /* from_clause_opt */ - case 345: /* table_reference_list */ - case 346: /* table_reference */ - case 347: /* table_primary */ - case 348: /* joined_table */ - case 350: /* parenthesized_joined_table */ - case 352: /* search_condition */ - case 353: /* query_specification */ - case 357: /* range_opt */ - case 358: /* every_opt */ - case 359: /* fill_opt */ - case 360: /* twindow_clause_opt */ - case 362: /* having_clause_opt */ - case 363: /* select_item */ - case 366: /* query_expression_body */ - case 368: /* slimit_clause_opt */ - case 369: /* limit_clause_opt */ - case 370: /* query_primary */ - case 372: /* sort_specification */ + case 253: /* cmd */ + case 256: /* literal */ + case 267: /* db_options */ + case 269: /* alter_db_options */ + case 274: /* retention */ + case 275: /* full_table_name */ + case 278: /* table_options */ + case 282: /* alter_table_clause */ + case 283: /* alter_table_options */ + case 286: /* signed_literal */ + case 287: /* create_subtable_clause */ + case 290: /* drop_table_clause */ + case 293: /* column_def */ + case 297: /* duration_literal */ + case 298: /* rollup_func_name */ + case 300: /* col_name */ + case 301: /* db_name_cond_opt */ + case 302: /* like_pattern_opt */ + case 303: /* table_name_cond */ + case 304: /* from_db_opt */ + case 306: /* index_options */ + case 308: /* sliding_opt */ + case 309: /* sma_stream_opt */ + case 310: /* func */ + case 311: /* stream_options */ + case 313: /* query_expression */ + case 316: /* explain_options */ + case 320: /* into_opt */ + case 322: /* where_clause_opt */ + case 323: /* signed */ + case 324: /* literal_func */ + case 328: /* expression */ + case 329: /* pseudo_column */ + case 330: /* column_reference */ + case 331: /* function_expression */ + case 332: /* subquery */ + case 337: /* star_func_para */ + case 338: /* predicate */ + case 341: /* in_predicate_value */ + case 342: /* boolean_value_expression */ + case 343: /* boolean_primary */ + case 344: /* common_expression */ + case 345: /* from_clause_opt */ + case 346: /* table_reference_list */ + case 347: /* table_reference */ + case 348: /* table_primary */ + case 349: /* joined_table */ + case 351: /* parenthesized_joined_table */ + case 353: /* search_condition */ + case 354: /* query_specification */ + case 358: /* range_opt */ + case 359: /* every_opt */ + case 360: /* fill_opt */ + case 361: /* twindow_clause_opt */ + case 363: /* having_clause_opt */ + case 364: /* select_item */ + case 367: /* query_expression_body */ + case 369: /* slimit_clause_opt */ + case 370: /* limit_clause_opt */ + case 371: /* query_primary */ + case 373: /* sort_specification */ { - nodesDestroyNode((yypminor->yy212)); + nodesDestroyNode((yypminor->yy248)); } break; - case 253: /* account_options */ - case 254: /* alter_account_options */ - case 256: /* alter_account_option */ - case 317: /* bufsize_opt */ + case 254: /* account_options */ + case 255: /* alter_account_options */ + case 257: /* alter_account_option */ + case 318: /* bufsize_opt */ { } break; - case 257: /* user_name */ - case 260: /* priv_level */ - case 263: /* db_name */ - case 264: /* dnode_endpoint */ - case 283: /* column_name */ - case 291: /* table_name */ - case 298: /* function_name */ - case 304: /* index_name */ - case 311: /* topic_name */ - case 313: /* cgroup_name */ - case 318: /* stream_name */ - case 325: /* table_alias */ - case 326: /* column_alias */ - case 332: /* star_func */ - case 334: /* noarg_func */ - case 349: /* alias_opt */ + case 258: /* user_name */ + case 261: /* priv_level */ + case 264: /* db_name */ + case 265: /* dnode_endpoint */ + case 284: /* column_name */ + case 292: /* table_name */ + case 299: /* function_name */ + case 305: /* index_name */ + case 312: /* topic_name */ + case 314: /* cgroup_name */ + case 319: /* stream_name */ + case 326: /* table_alias */ + case 327: /* column_alias */ + case 333: /* star_func */ + case 335: /* noarg_func */ + case 350: /* alias_opt */ { } break; - case 258: /* sysinfo_opt */ + case 259: /* sysinfo_opt */ { } break; - case 259: /* privileges */ - case 261: /* priv_type_list */ - case 262: /* priv_type */ + case 260: /* privileges */ + case 262: /* priv_type_list */ + case 263: /* priv_type */ { } break; - case 265: /* not_exists_opt */ - case 267: /* exists_opt */ - case 314: /* analyze_opt */ - case 316: /* agg_func_opt */ - case 354: /* set_quantifier_opt */ + case 266: /* not_exists_opt */ + case 268: /* exists_opt */ + case 315: /* analyze_opt */ + case 317: /* agg_func_opt */ + case 355: /* set_quantifier_opt */ { } break; - case 269: /* integer_list */ - case 270: /* variable_list */ - case 271: /* retention_list */ - case 275: /* column_def_list */ - case 276: /* tags_def_opt */ - case 278: /* multi_create_clause */ - case 279: /* tags_def */ - case 280: /* multi_drop_clause */ - case 287: /* specific_cols_opt */ - case 288: /* expression_list */ - case 290: /* col_name_list */ - case 293: /* duration_list */ - case 294: /* rollup_func_list */ - case 306: /* func_list */ - case 320: /* dnode_list */ - case 324: /* literal_list */ - case 333: /* star_func_para_list */ - case 335: /* other_para_list */ - case 355: /* select_list */ - case 356: /* partition_by_clause_opt */ - case 361: /* group_by_clause_opt */ - case 365: /* group_by_list */ - case 367: /* order_by_clause_opt */ - case 371: /* sort_specification_list */ + case 270: /* integer_list */ + case 271: /* variable_list */ + case 272: /* retention_list */ + case 276: /* column_def_list */ + case 277: /* tags_def_opt */ + case 279: /* multi_create_clause */ + case 280: /* tags_def */ + case 281: /* multi_drop_clause */ + case 288: /* specific_cols_opt */ + case 289: /* expression_list */ + case 291: /* col_name_list */ + case 294: /* duration_list */ + case 295: /* rollup_func_list */ + case 307: /* func_list */ + case 321: /* dnode_list */ + case 325: /* literal_list */ + case 334: /* star_func_para_list */ + case 336: /* other_para_list */ + case 356: /* select_list */ + case 357: /* partition_by_clause_opt */ + case 362: /* group_by_clause_opt */ + case 366: /* group_by_list */ + case 368: /* order_by_clause_opt */ + case 372: /* sort_specification_list */ { - nodesDestroyList((yypminor->yy424)); + nodesDestroyList((yypminor->yy552)); } break; - case 272: /* alter_db_option */ - case 295: /* alter_table_option */ + case 273: /* alter_db_option */ + case 296: /* alter_table_option */ { } break; - case 284: /* type_name */ + case 285: /* type_name */ { } break; - case 338: /* compare_op */ - case 339: /* in_op */ + case 339: /* compare_op */ + case 340: /* in_op */ { } break; - case 351: /* join_type */ + case 352: /* join_type */ { } break; - case 364: /* fill_mode */ + case 365: /* fill_mode */ { } break; - case 373: /* ordering_specification_opt */ + case 374: /* ordering_specification_opt */ { } break; - case 374: /* null_ordering_opt */ + case 375: /* null_ordering_opt */ { } @@ -2687,490 +2707,492 @@ 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[] = { - { 252, -6 }, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ - { 252, -4 }, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ - { 253, 0 }, /* (2) account_options ::= */ - { 253, -3 }, /* (3) account_options ::= account_options PPS literal */ - { 253, -3 }, /* (4) account_options ::= account_options TSERIES literal */ - { 253, -3 }, /* (5) account_options ::= account_options STORAGE literal */ - { 253, -3 }, /* (6) account_options ::= account_options STREAMS literal */ - { 253, -3 }, /* (7) account_options ::= account_options QTIME literal */ - { 253, -3 }, /* (8) account_options ::= account_options DBS literal */ - { 253, -3 }, /* (9) account_options ::= account_options USERS literal */ - { 253, -3 }, /* (10) account_options ::= account_options CONNS literal */ - { 253, -3 }, /* (11) account_options ::= account_options STATE literal */ - { 254, -1 }, /* (12) alter_account_options ::= alter_account_option */ - { 254, -2 }, /* (13) alter_account_options ::= alter_account_options alter_account_option */ - { 256, -2 }, /* (14) alter_account_option ::= PASS literal */ - { 256, -2 }, /* (15) alter_account_option ::= PPS literal */ - { 256, -2 }, /* (16) alter_account_option ::= TSERIES literal */ - { 256, -2 }, /* (17) alter_account_option ::= STORAGE literal */ - { 256, -2 }, /* (18) alter_account_option ::= STREAMS literal */ - { 256, -2 }, /* (19) alter_account_option ::= QTIME literal */ - { 256, -2 }, /* (20) alter_account_option ::= DBS literal */ - { 256, -2 }, /* (21) alter_account_option ::= USERS literal */ - { 256, -2 }, /* (22) alter_account_option ::= CONNS literal */ - { 256, -2 }, /* (23) alter_account_option ::= STATE literal */ - { 252, -6 }, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ - { 252, -5 }, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ - { 252, -5 }, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ - { 252, -5 }, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ - { 252, -3 }, /* (28) cmd ::= DROP USER user_name */ - { 258, 0 }, /* (29) sysinfo_opt ::= */ - { 258, -2 }, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ - { 252, -6 }, /* (31) cmd ::= GRANT privileges ON priv_level TO user_name */ - { 252, -6 }, /* (32) cmd ::= REVOKE privileges ON priv_level FROM user_name */ - { 259, -1 }, /* (33) privileges ::= ALL */ - { 259, -1 }, /* (34) privileges ::= priv_type_list */ - { 261, -1 }, /* (35) priv_type_list ::= priv_type */ - { 261, -3 }, /* (36) priv_type_list ::= priv_type_list NK_COMMA priv_type */ - { 262, -1 }, /* (37) priv_type ::= READ */ - { 262, -1 }, /* (38) priv_type ::= WRITE */ - { 260, -3 }, /* (39) priv_level ::= NK_STAR NK_DOT NK_STAR */ - { 260, -3 }, /* (40) priv_level ::= db_name NK_DOT NK_STAR */ - { 252, -3 }, /* (41) cmd ::= CREATE DNODE dnode_endpoint */ - { 252, -5 }, /* (42) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ - { 252, -3 }, /* (43) cmd ::= DROP DNODE NK_INTEGER */ - { 252, -3 }, /* (44) cmd ::= DROP DNODE dnode_endpoint */ - { 252, -4 }, /* (45) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ - { 252, -5 }, /* (46) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ - { 252, -4 }, /* (47) cmd ::= ALTER ALL DNODES NK_STRING */ - { 252, -5 }, /* (48) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ - { 264, -1 }, /* (49) dnode_endpoint ::= NK_STRING */ - { 264, -1 }, /* (50) dnode_endpoint ::= NK_ID */ - { 264, -1 }, /* (51) dnode_endpoint ::= NK_IPTOKEN */ - { 252, -3 }, /* (52) cmd ::= ALTER LOCAL NK_STRING */ - { 252, -4 }, /* (53) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ - { 252, -5 }, /* (54) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (55) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (56) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (57) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (58) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (59) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (60) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (61) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ - { 252, -5 }, /* (62) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ - { 252, -4 }, /* (63) cmd ::= DROP DATABASE exists_opt db_name */ - { 252, -2 }, /* (64) cmd ::= USE db_name */ - { 252, -4 }, /* (65) cmd ::= ALTER DATABASE db_name alter_db_options */ - { 265, -3 }, /* (66) not_exists_opt ::= IF NOT EXISTS */ - { 265, 0 }, /* (67) not_exists_opt ::= */ - { 267, -2 }, /* (68) exists_opt ::= IF EXISTS */ - { 267, 0 }, /* (69) exists_opt ::= */ - { 266, 0 }, /* (70) db_options ::= */ - { 266, -3 }, /* (71) db_options ::= db_options BUFFER NK_INTEGER */ - { 266, -3 }, /* (72) db_options ::= db_options CACHELAST NK_INTEGER */ - { 266, -3 }, /* (73) db_options ::= db_options COMP NK_INTEGER */ - { 266, -3 }, /* (74) db_options ::= db_options DURATION NK_INTEGER */ - { 266, -3 }, /* (75) db_options ::= db_options DURATION NK_VARIABLE */ - { 266, -3 }, /* (76) db_options ::= db_options FSYNC NK_INTEGER */ - { 266, -3 }, /* (77) db_options ::= db_options MAXROWS NK_INTEGER */ - { 266, -3 }, /* (78) db_options ::= db_options MINROWS NK_INTEGER */ - { 266, -3 }, /* (79) db_options ::= db_options KEEP integer_list */ - { 266, -3 }, /* (80) db_options ::= db_options KEEP variable_list */ - { 266, -3 }, /* (81) db_options ::= db_options PAGES NK_INTEGER */ - { 266, -3 }, /* (82) db_options ::= db_options PAGESIZE NK_INTEGER */ - { 266, -3 }, /* (83) db_options ::= db_options PRECISION NK_STRING */ - { 266, -3 }, /* (84) db_options ::= db_options REPLICA NK_INTEGER */ - { 266, -3 }, /* (85) db_options ::= db_options STRICT NK_INTEGER */ - { 266, -3 }, /* (86) db_options ::= db_options WAL NK_INTEGER */ - { 266, -3 }, /* (87) db_options ::= db_options VGROUPS NK_INTEGER */ - { 266, -3 }, /* (88) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ - { 266, -3 }, /* (89) db_options ::= db_options RETENTIONS retention_list */ - { 266, -3 }, /* (90) db_options ::= db_options SCHEMALESS NK_INTEGER */ - { 268, -1 }, /* (91) alter_db_options ::= alter_db_option */ - { 268, -2 }, /* (92) alter_db_options ::= alter_db_options alter_db_option */ - { 272, -2 }, /* (93) alter_db_option ::= BUFFER NK_INTEGER */ - { 272, -2 }, /* (94) alter_db_option ::= CACHELAST NK_INTEGER */ - { 272, -2 }, /* (95) alter_db_option ::= FSYNC NK_INTEGER */ - { 272, -2 }, /* (96) alter_db_option ::= KEEP integer_list */ - { 272, -2 }, /* (97) alter_db_option ::= KEEP variable_list */ - { 272, -2 }, /* (98) alter_db_option ::= PAGES NK_INTEGER */ - { 272, -2 }, /* (99) alter_db_option ::= REPLICA NK_INTEGER */ - { 272, -2 }, /* (100) alter_db_option ::= STRICT NK_INTEGER */ - { 272, -2 }, /* (101) alter_db_option ::= WAL NK_INTEGER */ - { 269, -1 }, /* (102) integer_list ::= NK_INTEGER */ - { 269, -3 }, /* (103) integer_list ::= integer_list NK_COMMA NK_INTEGER */ - { 270, -1 }, /* (104) variable_list ::= NK_VARIABLE */ - { 270, -3 }, /* (105) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ - { 271, -1 }, /* (106) retention_list ::= retention */ - { 271, -3 }, /* (107) retention_list ::= retention_list NK_COMMA retention */ - { 273, -3 }, /* (108) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ - { 252, -9 }, /* (109) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - { 252, -3 }, /* (110) cmd ::= CREATE TABLE multi_create_clause */ - { 252, -9 }, /* (111) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ - { 252, -3 }, /* (112) cmd ::= DROP TABLE multi_drop_clause */ - { 252, -4 }, /* (113) cmd ::= DROP STABLE exists_opt full_table_name */ - { 252, -3 }, /* (114) cmd ::= ALTER TABLE alter_table_clause */ - { 252, -3 }, /* (115) cmd ::= ALTER STABLE alter_table_clause */ - { 281, -2 }, /* (116) alter_table_clause ::= full_table_name alter_table_options */ - { 281, -5 }, /* (117) alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ - { 281, -4 }, /* (118) alter_table_clause ::= full_table_name DROP COLUMN column_name */ - { 281, -5 }, /* (119) alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ - { 281, -5 }, /* (120) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ - { 281, -5 }, /* (121) alter_table_clause ::= full_table_name ADD TAG column_name type_name */ - { 281, -4 }, /* (122) alter_table_clause ::= full_table_name DROP TAG column_name */ - { 281, -5 }, /* (123) alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ - { 281, -5 }, /* (124) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ - { 281, -6 }, /* (125) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ - { 278, -1 }, /* (126) multi_create_clause ::= create_subtable_clause */ - { 278, -2 }, /* (127) multi_create_clause ::= multi_create_clause create_subtable_clause */ - { 286, -10 }, /* (128) 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 */ - { 280, -1 }, /* (129) multi_drop_clause ::= drop_table_clause */ - { 280, -2 }, /* (130) multi_drop_clause ::= multi_drop_clause drop_table_clause */ - { 289, -2 }, /* (131) drop_table_clause ::= exists_opt full_table_name */ - { 287, 0 }, /* (132) specific_cols_opt ::= */ - { 287, -3 }, /* (133) specific_cols_opt ::= NK_LP col_name_list NK_RP */ - { 274, -1 }, /* (134) full_table_name ::= table_name */ - { 274, -3 }, /* (135) full_table_name ::= db_name NK_DOT table_name */ - { 275, -1 }, /* (136) column_def_list ::= column_def */ - { 275, -3 }, /* (137) column_def_list ::= column_def_list NK_COMMA column_def */ - { 292, -2 }, /* (138) column_def ::= column_name type_name */ - { 292, -4 }, /* (139) column_def ::= column_name type_name COMMENT NK_STRING */ - { 284, -1 }, /* (140) type_name ::= BOOL */ - { 284, -1 }, /* (141) type_name ::= TINYINT */ - { 284, -1 }, /* (142) type_name ::= SMALLINT */ - { 284, -1 }, /* (143) type_name ::= INT */ - { 284, -1 }, /* (144) type_name ::= INTEGER */ - { 284, -1 }, /* (145) type_name ::= BIGINT */ - { 284, -1 }, /* (146) type_name ::= FLOAT */ - { 284, -1 }, /* (147) type_name ::= DOUBLE */ - { 284, -4 }, /* (148) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ - { 284, -1 }, /* (149) type_name ::= TIMESTAMP */ - { 284, -4 }, /* (150) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ - { 284, -2 }, /* (151) type_name ::= TINYINT UNSIGNED */ - { 284, -2 }, /* (152) type_name ::= SMALLINT UNSIGNED */ - { 284, -2 }, /* (153) type_name ::= INT UNSIGNED */ - { 284, -2 }, /* (154) type_name ::= BIGINT UNSIGNED */ - { 284, -1 }, /* (155) type_name ::= JSON */ - { 284, -4 }, /* (156) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ - { 284, -1 }, /* (157) type_name ::= MEDIUMBLOB */ - { 284, -1 }, /* (158) type_name ::= BLOB */ - { 284, -4 }, /* (159) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ - { 284, -1 }, /* (160) type_name ::= DECIMAL */ - { 284, -4 }, /* (161) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ - { 284, -6 }, /* (162) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ - { 276, 0 }, /* (163) tags_def_opt ::= */ - { 276, -1 }, /* (164) tags_def_opt ::= tags_def */ - { 279, -4 }, /* (165) tags_def ::= TAGS NK_LP column_def_list NK_RP */ - { 277, 0 }, /* (166) table_options ::= */ - { 277, -3 }, /* (167) table_options ::= table_options COMMENT NK_STRING */ - { 277, -3 }, /* (168) table_options ::= table_options MAX_DELAY duration_list */ - { 277, -3 }, /* (169) table_options ::= table_options WATERMARK duration_list */ - { 277, -5 }, /* (170) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ - { 277, -3 }, /* (171) table_options ::= table_options TTL NK_INTEGER */ - { 277, -5 }, /* (172) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ - { 282, -1 }, /* (173) alter_table_options ::= alter_table_option */ - { 282, -2 }, /* (174) alter_table_options ::= alter_table_options alter_table_option */ - { 295, -2 }, /* (175) alter_table_option ::= COMMENT NK_STRING */ - { 295, -2 }, /* (176) alter_table_option ::= TTL NK_INTEGER */ - { 293, -1 }, /* (177) duration_list ::= duration_literal */ - { 293, -3 }, /* (178) duration_list ::= duration_list NK_COMMA duration_literal */ - { 294, -1 }, /* (179) rollup_func_list ::= rollup_func_name */ - { 294, -3 }, /* (180) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ - { 297, -1 }, /* (181) rollup_func_name ::= function_name */ - { 297, -1 }, /* (182) rollup_func_name ::= FIRST */ - { 297, -1 }, /* (183) rollup_func_name ::= LAST */ - { 290, -1 }, /* (184) col_name_list ::= col_name */ - { 290, -3 }, /* (185) col_name_list ::= col_name_list NK_COMMA col_name */ - { 299, -1 }, /* (186) col_name ::= column_name */ - { 252, -2 }, /* (187) cmd ::= SHOW DNODES */ - { 252, -2 }, /* (188) cmd ::= SHOW USERS */ - { 252, -2 }, /* (189) cmd ::= SHOW DATABASES */ - { 252, -4 }, /* (190) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ - { 252, -4 }, /* (191) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ - { 252, -3 }, /* (192) cmd ::= SHOW db_name_cond_opt VGROUPS */ - { 252, -2 }, /* (193) cmd ::= SHOW MNODES */ - { 252, -2 }, /* (194) cmd ::= SHOW MODULES */ - { 252, -2 }, /* (195) cmd ::= SHOW QNODES */ - { 252, -2 }, /* (196) cmd ::= SHOW FUNCTIONS */ - { 252, -5 }, /* (197) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ - { 252, -2 }, /* (198) cmd ::= SHOW STREAMS */ - { 252, -2 }, /* (199) cmd ::= SHOW ACCOUNTS */ - { 252, -2 }, /* (200) cmd ::= SHOW APPS */ - { 252, -2 }, /* (201) cmd ::= SHOW CONNECTIONS */ - { 252, -2 }, /* (202) cmd ::= SHOW LICENCE */ - { 252, -2 }, /* (203) cmd ::= SHOW GRANTS */ - { 252, -4 }, /* (204) cmd ::= SHOW CREATE DATABASE db_name */ - { 252, -4 }, /* (205) cmd ::= SHOW CREATE TABLE full_table_name */ - { 252, -4 }, /* (206) cmd ::= SHOW CREATE STABLE full_table_name */ - { 252, -2 }, /* (207) cmd ::= SHOW QUERIES */ - { 252, -2 }, /* (208) cmd ::= SHOW SCORES */ - { 252, -2 }, /* (209) cmd ::= SHOW TOPICS */ - { 252, -2 }, /* (210) cmd ::= SHOW VARIABLES */ - { 252, -3 }, /* (211) cmd ::= SHOW LOCAL VARIABLES */ - { 252, -4 }, /* (212) cmd ::= SHOW DNODE NK_INTEGER VARIABLES */ - { 252, -2 }, /* (213) cmd ::= SHOW BNODES */ - { 252, -2 }, /* (214) cmd ::= SHOW SNODES */ - { 252, -2 }, /* (215) cmd ::= SHOW CLUSTER */ - { 252, -2 }, /* (216) cmd ::= SHOW TRANSACTIONS */ - { 252, -4 }, /* (217) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ - { 252, -2 }, /* (218) cmd ::= SHOW CONSUMERS */ - { 252, -2 }, /* (219) cmd ::= SHOW SUBSCRIPTIONS */ - { 300, 0 }, /* (220) db_name_cond_opt ::= */ - { 300, -2 }, /* (221) db_name_cond_opt ::= db_name NK_DOT */ - { 301, 0 }, /* (222) like_pattern_opt ::= */ - { 301, -2 }, /* (223) like_pattern_opt ::= LIKE NK_STRING */ - { 302, -1 }, /* (224) table_name_cond ::= table_name */ - { 303, 0 }, /* (225) from_db_opt ::= */ - { 303, -2 }, /* (226) from_db_opt ::= FROM db_name */ - { 252, -8 }, /* (227) cmd ::= CREATE SMA INDEX not_exists_opt index_name ON table_name index_options */ - { 252, -4 }, /* (228) cmd ::= DROP INDEX exists_opt index_name */ - { 305, -10 }, /* (229) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ - { 305, -12 }, /* (230) 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 */ - { 306, -1 }, /* (231) func_list ::= func */ - { 306, -3 }, /* (232) func_list ::= func_list NK_COMMA func */ - { 309, -4 }, /* (233) func ::= function_name NK_LP expression_list NK_RP */ - { 308, 0 }, /* (234) sma_stream_opt ::= */ - { 308, -3 }, /* (235) sma_stream_opt ::= stream_options WATERMARK duration_literal */ - { 308, -3 }, /* (236) sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ - { 252, -6 }, /* (237) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression */ - { 252, -7 }, /* (238) cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ - { 252, -9 }, /* (239) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ - { 252, -7 }, /* (240) cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ - { 252, -9 }, /* (241) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ - { 252, -4 }, /* (242) cmd ::= DROP TOPIC exists_opt topic_name */ - { 252, -7 }, /* (243) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ - { 252, -2 }, /* (244) cmd ::= DESC full_table_name */ - { 252, -2 }, /* (245) cmd ::= DESCRIBE full_table_name */ - { 252, -3 }, /* (246) cmd ::= RESET QUERY CACHE */ - { 252, -4 }, /* (247) cmd ::= EXPLAIN analyze_opt explain_options query_expression */ - { 314, 0 }, /* (248) analyze_opt ::= */ - { 314, -1 }, /* (249) analyze_opt ::= ANALYZE */ - { 315, 0 }, /* (250) explain_options ::= */ - { 315, -3 }, /* (251) explain_options ::= explain_options VERBOSE NK_BOOL */ - { 315, -3 }, /* (252) explain_options ::= explain_options RATIO NK_FLOAT */ - { 252, -6 }, /* (253) cmd ::= COMPACT VNODES IN NK_LP integer_list NK_RP */ - { 252, -10 }, /* (254) cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ - { 252, -4 }, /* (255) cmd ::= DROP FUNCTION exists_opt function_name */ - { 316, 0 }, /* (256) agg_func_opt ::= */ - { 316, -1 }, /* (257) agg_func_opt ::= AGGREGATE */ - { 317, 0 }, /* (258) bufsize_opt ::= */ - { 317, -2 }, /* (259) bufsize_opt ::= BUFSIZE NK_INTEGER */ - { 252, -8 }, /* (260) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options into_opt AS query_expression */ - { 252, -4 }, /* (261) cmd ::= DROP STREAM exists_opt stream_name */ - { 319, 0 }, /* (262) into_opt ::= */ - { 319, -2 }, /* (263) into_opt ::= INTO full_table_name */ - { 310, 0 }, /* (264) stream_options ::= */ - { 310, -3 }, /* (265) stream_options ::= stream_options TRIGGER AT_ONCE */ - { 310, -3 }, /* (266) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ - { 310, -4 }, /* (267) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ - { 310, -3 }, /* (268) stream_options ::= stream_options WATERMARK duration_literal */ - { 310, -3 }, /* (269) stream_options ::= stream_options IGNORE EXPIRED */ - { 252, -3 }, /* (270) cmd ::= KILL CONNECTION NK_INTEGER */ - { 252, -3 }, /* (271) cmd ::= KILL QUERY NK_STRING */ - { 252, -3 }, /* (272) cmd ::= KILL TRANSACTION NK_INTEGER */ - { 252, -2 }, /* (273) cmd ::= BALANCE VGROUP */ - { 252, -4 }, /* (274) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ - { 252, -4 }, /* (275) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ - { 252, -3 }, /* (276) cmd ::= SPLIT VGROUP NK_INTEGER */ - { 320, -2 }, /* (277) dnode_list ::= DNODE NK_INTEGER */ - { 320, -3 }, /* (278) dnode_list ::= dnode_list DNODE NK_INTEGER */ - { 252, -3 }, /* (279) cmd ::= SYNCDB db_name REPLICA */ - { 252, -4 }, /* (280) cmd ::= DELETE FROM full_table_name where_clause_opt */ - { 252, -1 }, /* (281) cmd ::= query_expression */ - { 252, -5 }, /* (282) cmd ::= INSERT INTO full_table_name specific_cols_opt query_expression */ - { 255, -1 }, /* (283) literal ::= NK_INTEGER */ - { 255, -1 }, /* (284) literal ::= NK_FLOAT */ - { 255, -1 }, /* (285) literal ::= NK_STRING */ - { 255, -1 }, /* (286) literal ::= NK_BOOL */ - { 255, -2 }, /* (287) literal ::= TIMESTAMP NK_STRING */ - { 255, -1 }, /* (288) literal ::= duration_literal */ - { 255, -1 }, /* (289) literal ::= NULL */ - { 255, -1 }, /* (290) literal ::= NK_QUESTION */ - { 296, -1 }, /* (291) duration_literal ::= NK_VARIABLE */ - { 322, -1 }, /* (292) signed ::= NK_INTEGER */ - { 322, -2 }, /* (293) signed ::= NK_PLUS NK_INTEGER */ - { 322, -2 }, /* (294) signed ::= NK_MINUS NK_INTEGER */ - { 322, -1 }, /* (295) signed ::= NK_FLOAT */ - { 322, -2 }, /* (296) signed ::= NK_PLUS NK_FLOAT */ - { 322, -2 }, /* (297) signed ::= NK_MINUS NK_FLOAT */ - { 285, -1 }, /* (298) signed_literal ::= signed */ - { 285, -1 }, /* (299) signed_literal ::= NK_STRING */ - { 285, -1 }, /* (300) signed_literal ::= NK_BOOL */ - { 285, -2 }, /* (301) signed_literal ::= TIMESTAMP NK_STRING */ - { 285, -1 }, /* (302) signed_literal ::= duration_literal */ - { 285, -1 }, /* (303) signed_literal ::= NULL */ - { 285, -1 }, /* (304) signed_literal ::= literal_func */ - { 324, -1 }, /* (305) literal_list ::= signed_literal */ - { 324, -3 }, /* (306) literal_list ::= literal_list NK_COMMA signed_literal */ - { 263, -1 }, /* (307) db_name ::= NK_ID */ - { 291, -1 }, /* (308) table_name ::= NK_ID */ - { 283, -1 }, /* (309) column_name ::= NK_ID */ - { 298, -1 }, /* (310) function_name ::= NK_ID */ - { 325, -1 }, /* (311) table_alias ::= NK_ID */ - { 326, -1 }, /* (312) column_alias ::= NK_ID */ - { 257, -1 }, /* (313) user_name ::= NK_ID */ - { 304, -1 }, /* (314) index_name ::= NK_ID */ - { 311, -1 }, /* (315) topic_name ::= NK_ID */ - { 318, -1 }, /* (316) stream_name ::= NK_ID */ - { 313, -1 }, /* (317) cgroup_name ::= NK_ID */ - { 327, -1 }, /* (318) expression ::= literal */ - { 327, -1 }, /* (319) expression ::= pseudo_column */ - { 327, -1 }, /* (320) expression ::= column_reference */ - { 327, -1 }, /* (321) expression ::= function_expression */ - { 327, -1 }, /* (322) expression ::= subquery */ - { 327, -3 }, /* (323) expression ::= NK_LP expression NK_RP */ - { 327, -2 }, /* (324) expression ::= NK_PLUS expression */ - { 327, -2 }, /* (325) expression ::= NK_MINUS expression */ - { 327, -3 }, /* (326) expression ::= expression NK_PLUS expression */ - { 327, -3 }, /* (327) expression ::= expression NK_MINUS expression */ - { 327, -3 }, /* (328) expression ::= expression NK_STAR expression */ - { 327, -3 }, /* (329) expression ::= expression NK_SLASH expression */ - { 327, -3 }, /* (330) expression ::= expression NK_REM expression */ - { 327, -3 }, /* (331) expression ::= column_reference NK_ARROW NK_STRING */ - { 327, -3 }, /* (332) expression ::= expression NK_BITAND expression */ - { 327, -3 }, /* (333) expression ::= expression NK_BITOR expression */ - { 288, -1 }, /* (334) expression_list ::= expression */ - { 288, -3 }, /* (335) expression_list ::= expression_list NK_COMMA expression */ - { 329, -1 }, /* (336) column_reference ::= column_name */ - { 329, -3 }, /* (337) column_reference ::= table_name NK_DOT column_name */ - { 328, -1 }, /* (338) pseudo_column ::= ROWTS */ - { 328, -1 }, /* (339) pseudo_column ::= TBNAME */ - { 328, -3 }, /* (340) pseudo_column ::= table_name NK_DOT TBNAME */ - { 328, -1 }, /* (341) pseudo_column ::= QSTARTTS */ - { 328, -1 }, /* (342) pseudo_column ::= QENDTS */ - { 328, -1 }, /* (343) pseudo_column ::= WSTARTTS */ - { 328, -1 }, /* (344) pseudo_column ::= WENDTS */ - { 328, -1 }, /* (345) pseudo_column ::= WDURATION */ - { 330, -4 }, /* (346) function_expression ::= function_name NK_LP expression_list NK_RP */ - { 330, -4 }, /* (347) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ - { 330, -6 }, /* (348) function_expression ::= CAST NK_LP expression AS type_name NK_RP */ - { 330, -1 }, /* (349) function_expression ::= literal_func */ - { 323, -3 }, /* (350) literal_func ::= noarg_func NK_LP NK_RP */ - { 323, -1 }, /* (351) literal_func ::= NOW */ - { 334, -1 }, /* (352) noarg_func ::= NOW */ - { 334, -1 }, /* (353) noarg_func ::= TODAY */ - { 334, -1 }, /* (354) noarg_func ::= TIMEZONE */ - { 334, -1 }, /* (355) noarg_func ::= DATABASE */ - { 334, -1 }, /* (356) noarg_func ::= CLIENT_VERSION */ - { 334, -1 }, /* (357) noarg_func ::= SERVER_VERSION */ - { 334, -1 }, /* (358) noarg_func ::= SERVER_STATUS */ - { 334, -1 }, /* (359) noarg_func ::= CURRENT_USER */ - { 334, -1 }, /* (360) noarg_func ::= USER */ - { 332, -1 }, /* (361) star_func ::= COUNT */ - { 332, -1 }, /* (362) star_func ::= FIRST */ - { 332, -1 }, /* (363) star_func ::= LAST */ - { 332, -1 }, /* (364) star_func ::= LAST_ROW */ - { 333, -1 }, /* (365) star_func_para_list ::= NK_STAR */ - { 333, -1 }, /* (366) star_func_para_list ::= other_para_list */ - { 335, -1 }, /* (367) other_para_list ::= star_func_para */ - { 335, -3 }, /* (368) other_para_list ::= other_para_list NK_COMMA star_func_para */ - { 336, -1 }, /* (369) star_func_para ::= expression */ - { 336, -3 }, /* (370) star_func_para ::= table_name NK_DOT NK_STAR */ - { 337, -3 }, /* (371) predicate ::= expression compare_op expression */ - { 337, -5 }, /* (372) predicate ::= expression BETWEEN expression AND expression */ - { 337, -6 }, /* (373) predicate ::= expression NOT BETWEEN expression AND expression */ - { 337, -3 }, /* (374) predicate ::= expression IS NULL */ - { 337, -4 }, /* (375) predicate ::= expression IS NOT NULL */ - { 337, -3 }, /* (376) predicate ::= expression in_op in_predicate_value */ - { 338, -1 }, /* (377) compare_op ::= NK_LT */ - { 338, -1 }, /* (378) compare_op ::= NK_GT */ - { 338, -1 }, /* (379) compare_op ::= NK_LE */ - { 338, -1 }, /* (380) compare_op ::= NK_GE */ - { 338, -1 }, /* (381) compare_op ::= NK_NE */ - { 338, -1 }, /* (382) compare_op ::= NK_EQ */ - { 338, -1 }, /* (383) compare_op ::= LIKE */ - { 338, -2 }, /* (384) compare_op ::= NOT LIKE */ - { 338, -1 }, /* (385) compare_op ::= MATCH */ - { 338, -1 }, /* (386) compare_op ::= NMATCH */ - { 338, -1 }, /* (387) compare_op ::= CONTAINS */ - { 339, -1 }, /* (388) in_op ::= IN */ - { 339, -2 }, /* (389) in_op ::= NOT IN */ - { 340, -3 }, /* (390) in_predicate_value ::= NK_LP expression_list NK_RP */ - { 341, -1 }, /* (391) boolean_value_expression ::= boolean_primary */ - { 341, -2 }, /* (392) boolean_value_expression ::= NOT boolean_primary */ - { 341, -3 }, /* (393) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ - { 341, -3 }, /* (394) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ - { 342, -1 }, /* (395) boolean_primary ::= predicate */ - { 342, -3 }, /* (396) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ - { 343, -1 }, /* (397) common_expression ::= expression */ - { 343, -1 }, /* (398) common_expression ::= boolean_value_expression */ - { 344, 0 }, /* (399) from_clause_opt ::= */ - { 344, -2 }, /* (400) from_clause_opt ::= FROM table_reference_list */ - { 345, -1 }, /* (401) table_reference_list ::= table_reference */ - { 345, -3 }, /* (402) table_reference_list ::= table_reference_list NK_COMMA table_reference */ - { 346, -1 }, /* (403) table_reference ::= table_primary */ - { 346, -1 }, /* (404) table_reference ::= joined_table */ - { 347, -2 }, /* (405) table_primary ::= table_name alias_opt */ - { 347, -4 }, /* (406) table_primary ::= db_name NK_DOT table_name alias_opt */ - { 347, -2 }, /* (407) table_primary ::= subquery alias_opt */ - { 347, -1 }, /* (408) table_primary ::= parenthesized_joined_table */ - { 349, 0 }, /* (409) alias_opt ::= */ - { 349, -1 }, /* (410) alias_opt ::= table_alias */ - { 349, -2 }, /* (411) alias_opt ::= AS table_alias */ - { 350, -3 }, /* (412) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - { 350, -3 }, /* (413) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ - { 348, -6 }, /* (414) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ - { 351, 0 }, /* (415) join_type ::= */ - { 351, -1 }, /* (416) join_type ::= INNER */ - { 353, -12 }, /* (417) 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 */ - { 354, 0 }, /* (418) set_quantifier_opt ::= */ - { 354, -1 }, /* (419) set_quantifier_opt ::= DISTINCT */ - { 354, -1 }, /* (420) set_quantifier_opt ::= ALL */ - { 355, -1 }, /* (421) select_list ::= select_item */ - { 355, -3 }, /* (422) select_list ::= select_list NK_COMMA select_item */ - { 363, -1 }, /* (423) select_item ::= NK_STAR */ - { 363, -1 }, /* (424) select_item ::= common_expression */ - { 363, -2 }, /* (425) select_item ::= common_expression column_alias */ - { 363, -3 }, /* (426) select_item ::= common_expression AS column_alias */ - { 363, -3 }, /* (427) select_item ::= table_name NK_DOT NK_STAR */ - { 321, 0 }, /* (428) where_clause_opt ::= */ - { 321, -2 }, /* (429) where_clause_opt ::= WHERE search_condition */ - { 356, 0 }, /* (430) partition_by_clause_opt ::= */ - { 356, -3 }, /* (431) partition_by_clause_opt ::= PARTITION BY expression_list */ - { 360, 0 }, /* (432) twindow_clause_opt ::= */ - { 360, -6 }, /* (433) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ - { 360, -4 }, /* (434) twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */ - { 360, -6 }, /* (435) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ - { 360, -8 }, /* (436) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ - { 307, 0 }, /* (437) sliding_opt ::= */ - { 307, -4 }, /* (438) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ - { 359, 0 }, /* (439) fill_opt ::= */ - { 359, -4 }, /* (440) fill_opt ::= FILL NK_LP fill_mode NK_RP */ - { 359, -6 }, /* (441) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ - { 364, -1 }, /* (442) fill_mode ::= NONE */ - { 364, -1 }, /* (443) fill_mode ::= PREV */ - { 364, -1 }, /* (444) fill_mode ::= NULL */ - { 364, -1 }, /* (445) fill_mode ::= LINEAR */ - { 364, -1 }, /* (446) fill_mode ::= NEXT */ - { 361, 0 }, /* (447) group_by_clause_opt ::= */ - { 361, -3 }, /* (448) group_by_clause_opt ::= GROUP BY group_by_list */ - { 365, -1 }, /* (449) group_by_list ::= expression */ - { 365, -3 }, /* (450) group_by_list ::= group_by_list NK_COMMA expression */ - { 362, 0 }, /* (451) having_clause_opt ::= */ - { 362, -2 }, /* (452) having_clause_opt ::= HAVING search_condition */ - { 357, 0 }, /* (453) range_opt ::= */ - { 357, -6 }, /* (454) range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */ - { 358, 0 }, /* (455) every_opt ::= */ - { 358, -4 }, /* (456) every_opt ::= EVERY NK_LP duration_literal NK_RP */ - { 312, -4 }, /* (457) query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */ - { 366, -1 }, /* (458) query_expression_body ::= query_primary */ - { 366, -4 }, /* (459) query_expression_body ::= query_expression_body UNION ALL query_expression_body */ - { 366, -3 }, /* (460) query_expression_body ::= query_expression_body UNION query_expression_body */ - { 370, -1 }, /* (461) query_primary ::= query_specification */ - { 370, -6 }, /* (462) query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */ - { 367, 0 }, /* (463) order_by_clause_opt ::= */ - { 367, -3 }, /* (464) order_by_clause_opt ::= ORDER BY sort_specification_list */ - { 368, 0 }, /* (465) slimit_clause_opt ::= */ - { 368, -2 }, /* (466) slimit_clause_opt ::= SLIMIT NK_INTEGER */ - { 368, -4 }, /* (467) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - { 368, -4 }, /* (468) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 369, 0 }, /* (469) limit_clause_opt ::= */ - { 369, -2 }, /* (470) limit_clause_opt ::= LIMIT NK_INTEGER */ - { 369, -4 }, /* (471) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ - { 369, -4 }, /* (472) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 331, -3 }, /* (473) subquery ::= NK_LP query_expression NK_RP */ - { 352, -1 }, /* (474) search_condition ::= common_expression */ - { 371, -1 }, /* (475) sort_specification_list ::= sort_specification */ - { 371, -3 }, /* (476) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ - { 372, -3 }, /* (477) sort_specification ::= expression ordering_specification_opt null_ordering_opt */ - { 373, 0 }, /* (478) ordering_specification_opt ::= */ - { 373, -1 }, /* (479) ordering_specification_opt ::= ASC */ - { 373, -1 }, /* (480) ordering_specification_opt ::= DESC */ - { 374, 0 }, /* (481) null_ordering_opt ::= */ - { 374, -2 }, /* (482) null_ordering_opt ::= NULLS FIRST */ - { 374, -2 }, /* (483) null_ordering_opt ::= NULLS LAST */ + { 253, -6 }, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ + { 253, -4 }, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ + { 254, 0 }, /* (2) account_options ::= */ + { 254, -3 }, /* (3) account_options ::= account_options PPS literal */ + { 254, -3 }, /* (4) account_options ::= account_options TSERIES literal */ + { 254, -3 }, /* (5) account_options ::= account_options STORAGE literal */ + { 254, -3 }, /* (6) account_options ::= account_options STREAMS literal */ + { 254, -3 }, /* (7) account_options ::= account_options QTIME literal */ + { 254, -3 }, /* (8) account_options ::= account_options DBS literal */ + { 254, -3 }, /* (9) account_options ::= account_options USERS literal */ + { 254, -3 }, /* (10) account_options ::= account_options CONNS literal */ + { 254, -3 }, /* (11) account_options ::= account_options STATE literal */ + { 255, -1 }, /* (12) alter_account_options ::= alter_account_option */ + { 255, -2 }, /* (13) alter_account_options ::= alter_account_options alter_account_option */ + { 257, -2 }, /* (14) alter_account_option ::= PASS literal */ + { 257, -2 }, /* (15) alter_account_option ::= PPS literal */ + { 257, -2 }, /* (16) alter_account_option ::= TSERIES literal */ + { 257, -2 }, /* (17) alter_account_option ::= STORAGE literal */ + { 257, -2 }, /* (18) alter_account_option ::= STREAMS literal */ + { 257, -2 }, /* (19) alter_account_option ::= QTIME literal */ + { 257, -2 }, /* (20) alter_account_option ::= DBS literal */ + { 257, -2 }, /* (21) alter_account_option ::= USERS literal */ + { 257, -2 }, /* (22) alter_account_option ::= CONNS literal */ + { 257, -2 }, /* (23) alter_account_option ::= STATE literal */ + { 253, -6 }, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ + { 253, -5 }, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ + { 253, -5 }, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ + { 253, -5 }, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ + { 253, -3 }, /* (28) cmd ::= DROP USER user_name */ + { 259, 0 }, /* (29) sysinfo_opt ::= */ + { 259, -2 }, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ + { 253, -6 }, /* (31) cmd ::= GRANT privileges ON priv_level TO user_name */ + { 253, -6 }, /* (32) cmd ::= REVOKE privileges ON priv_level FROM user_name */ + { 260, -1 }, /* (33) privileges ::= ALL */ + { 260, -1 }, /* (34) privileges ::= priv_type_list */ + { 262, -1 }, /* (35) priv_type_list ::= priv_type */ + { 262, -3 }, /* (36) priv_type_list ::= priv_type_list NK_COMMA priv_type */ + { 263, -1 }, /* (37) priv_type ::= READ */ + { 263, -1 }, /* (38) priv_type ::= WRITE */ + { 261, -3 }, /* (39) priv_level ::= NK_STAR NK_DOT NK_STAR */ + { 261, -3 }, /* (40) priv_level ::= db_name NK_DOT NK_STAR */ + { 253, -3 }, /* (41) cmd ::= CREATE DNODE dnode_endpoint */ + { 253, -5 }, /* (42) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ + { 253, -3 }, /* (43) cmd ::= DROP DNODE NK_INTEGER */ + { 253, -3 }, /* (44) cmd ::= DROP DNODE dnode_endpoint */ + { 253, -4 }, /* (45) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ + { 253, -5 }, /* (46) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ + { 253, -4 }, /* (47) cmd ::= ALTER ALL DNODES NK_STRING */ + { 253, -5 }, /* (48) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ + { 265, -1 }, /* (49) dnode_endpoint ::= NK_STRING */ + { 265, -1 }, /* (50) dnode_endpoint ::= NK_ID */ + { 265, -1 }, /* (51) dnode_endpoint ::= NK_IPTOKEN */ + { 253, -3 }, /* (52) cmd ::= ALTER LOCAL NK_STRING */ + { 253, -4 }, /* (53) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + { 253, -5 }, /* (54) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (55) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (56) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (57) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (58) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (59) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (60) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (61) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + { 253, -5 }, /* (62) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ + { 253, -4 }, /* (63) cmd ::= DROP DATABASE exists_opt db_name */ + { 253, -2 }, /* (64) cmd ::= USE db_name */ + { 253, -4 }, /* (65) cmd ::= ALTER DATABASE db_name alter_db_options */ + { 266, -3 }, /* (66) not_exists_opt ::= IF NOT EXISTS */ + { 266, 0 }, /* (67) not_exists_opt ::= */ + { 268, -2 }, /* (68) exists_opt ::= IF EXISTS */ + { 268, 0 }, /* (69) exists_opt ::= */ + { 267, 0 }, /* (70) db_options ::= */ + { 267, -3 }, /* (71) db_options ::= db_options BUFFER NK_INTEGER */ + { 267, -3 }, /* (72) db_options ::= db_options CACHELAST NK_INTEGER */ + { 267, -3 }, /* (73) db_options ::= db_options CACHELASTSIZE NK_INTEGER */ + { 267, -3 }, /* (74) db_options ::= db_options COMP NK_INTEGER */ + { 267, -3 }, /* (75) db_options ::= db_options DURATION NK_INTEGER */ + { 267, -3 }, /* (76) db_options ::= db_options DURATION NK_VARIABLE */ + { 267, -3 }, /* (77) db_options ::= db_options FSYNC NK_INTEGER */ + { 267, -3 }, /* (78) db_options ::= db_options MAXROWS NK_INTEGER */ + { 267, -3 }, /* (79) db_options ::= db_options MINROWS NK_INTEGER */ + { 267, -3 }, /* (80) db_options ::= db_options KEEP integer_list */ + { 267, -3 }, /* (81) db_options ::= db_options KEEP variable_list */ + { 267, -3 }, /* (82) db_options ::= db_options PAGES NK_INTEGER */ + { 267, -3 }, /* (83) db_options ::= db_options PAGESIZE NK_INTEGER */ + { 267, -3 }, /* (84) db_options ::= db_options PRECISION NK_STRING */ + { 267, -3 }, /* (85) db_options ::= db_options REPLICA NK_INTEGER */ + { 267, -3 }, /* (86) db_options ::= db_options STRICT NK_INTEGER */ + { 267, -3 }, /* (87) db_options ::= db_options WAL NK_INTEGER */ + { 267, -3 }, /* (88) db_options ::= db_options VGROUPS NK_INTEGER */ + { 267, -3 }, /* (89) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ + { 267, -3 }, /* (90) db_options ::= db_options RETENTIONS retention_list */ + { 267, -3 }, /* (91) db_options ::= db_options SCHEMALESS NK_INTEGER */ + { 269, -1 }, /* (92) alter_db_options ::= alter_db_option */ + { 269, -2 }, /* (93) alter_db_options ::= alter_db_options alter_db_option */ + { 273, -2 }, /* (94) alter_db_option ::= BUFFER NK_INTEGER */ + { 273, -2 }, /* (95) alter_db_option ::= CACHELAST NK_INTEGER */ + { 273, -2 }, /* (96) alter_db_option ::= CACHELASTSIZE NK_INTEGER */ + { 273, -2 }, /* (97) alter_db_option ::= FSYNC NK_INTEGER */ + { 273, -2 }, /* (98) alter_db_option ::= KEEP integer_list */ + { 273, -2 }, /* (99) alter_db_option ::= KEEP variable_list */ + { 273, -2 }, /* (100) alter_db_option ::= PAGES NK_INTEGER */ + { 273, -2 }, /* (101) alter_db_option ::= REPLICA NK_INTEGER */ + { 273, -2 }, /* (102) alter_db_option ::= STRICT NK_INTEGER */ + { 273, -2 }, /* (103) alter_db_option ::= WAL NK_INTEGER */ + { 270, -1 }, /* (104) integer_list ::= NK_INTEGER */ + { 270, -3 }, /* (105) integer_list ::= integer_list NK_COMMA NK_INTEGER */ + { 271, -1 }, /* (106) variable_list ::= NK_VARIABLE */ + { 271, -3 }, /* (107) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ + { 272, -1 }, /* (108) retention_list ::= retention */ + { 272, -3 }, /* (109) retention_list ::= retention_list NK_COMMA retention */ + { 274, -3 }, /* (110) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ + { 253, -9 }, /* (111) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + { 253, -3 }, /* (112) cmd ::= CREATE TABLE multi_create_clause */ + { 253, -9 }, /* (113) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ + { 253, -3 }, /* (114) cmd ::= DROP TABLE multi_drop_clause */ + { 253, -4 }, /* (115) cmd ::= DROP STABLE exists_opt full_table_name */ + { 253, -3 }, /* (116) cmd ::= ALTER TABLE alter_table_clause */ + { 253, -3 }, /* (117) cmd ::= ALTER STABLE alter_table_clause */ + { 282, -2 }, /* (118) alter_table_clause ::= full_table_name alter_table_options */ + { 282, -5 }, /* (119) alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ + { 282, -4 }, /* (120) alter_table_clause ::= full_table_name DROP COLUMN column_name */ + { 282, -5 }, /* (121) alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ + { 282, -5 }, /* (122) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ + { 282, -5 }, /* (123) alter_table_clause ::= full_table_name ADD TAG column_name type_name */ + { 282, -4 }, /* (124) alter_table_clause ::= full_table_name DROP TAG column_name */ + { 282, -5 }, /* (125) alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ + { 282, -5 }, /* (126) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ + { 282, -6 }, /* (127) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ + { 279, -1 }, /* (128) multi_create_clause ::= create_subtable_clause */ + { 279, -2 }, /* (129) multi_create_clause ::= multi_create_clause create_subtable_clause */ + { 287, -10 }, /* (130) 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 */ + { 281, -1 }, /* (131) multi_drop_clause ::= drop_table_clause */ + { 281, -2 }, /* (132) multi_drop_clause ::= multi_drop_clause drop_table_clause */ + { 290, -2 }, /* (133) drop_table_clause ::= exists_opt full_table_name */ + { 288, 0 }, /* (134) specific_cols_opt ::= */ + { 288, -3 }, /* (135) specific_cols_opt ::= NK_LP col_name_list NK_RP */ + { 275, -1 }, /* (136) full_table_name ::= table_name */ + { 275, -3 }, /* (137) full_table_name ::= db_name NK_DOT table_name */ + { 276, -1 }, /* (138) column_def_list ::= column_def */ + { 276, -3 }, /* (139) column_def_list ::= column_def_list NK_COMMA column_def */ + { 293, -2 }, /* (140) column_def ::= column_name type_name */ + { 293, -4 }, /* (141) column_def ::= column_name type_name COMMENT NK_STRING */ + { 285, -1 }, /* (142) type_name ::= BOOL */ + { 285, -1 }, /* (143) type_name ::= TINYINT */ + { 285, -1 }, /* (144) type_name ::= SMALLINT */ + { 285, -1 }, /* (145) type_name ::= INT */ + { 285, -1 }, /* (146) type_name ::= INTEGER */ + { 285, -1 }, /* (147) type_name ::= BIGINT */ + { 285, -1 }, /* (148) type_name ::= FLOAT */ + { 285, -1 }, /* (149) type_name ::= DOUBLE */ + { 285, -4 }, /* (150) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ + { 285, -1 }, /* (151) type_name ::= TIMESTAMP */ + { 285, -4 }, /* (152) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ + { 285, -2 }, /* (153) type_name ::= TINYINT UNSIGNED */ + { 285, -2 }, /* (154) type_name ::= SMALLINT UNSIGNED */ + { 285, -2 }, /* (155) type_name ::= INT UNSIGNED */ + { 285, -2 }, /* (156) type_name ::= BIGINT UNSIGNED */ + { 285, -1 }, /* (157) type_name ::= JSON */ + { 285, -4 }, /* (158) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ + { 285, -1 }, /* (159) type_name ::= MEDIUMBLOB */ + { 285, -1 }, /* (160) type_name ::= BLOB */ + { 285, -4 }, /* (161) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ + { 285, -1 }, /* (162) type_name ::= DECIMAL */ + { 285, -4 }, /* (163) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ + { 285, -6 }, /* (164) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ + { 277, 0 }, /* (165) tags_def_opt ::= */ + { 277, -1 }, /* (166) tags_def_opt ::= tags_def */ + { 280, -4 }, /* (167) tags_def ::= TAGS NK_LP column_def_list NK_RP */ + { 278, 0 }, /* (168) table_options ::= */ + { 278, -3 }, /* (169) table_options ::= table_options COMMENT NK_STRING */ + { 278, -3 }, /* (170) table_options ::= table_options MAX_DELAY duration_list */ + { 278, -3 }, /* (171) table_options ::= table_options WATERMARK duration_list */ + { 278, -5 }, /* (172) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ + { 278, -3 }, /* (173) table_options ::= table_options TTL NK_INTEGER */ + { 278, -5 }, /* (174) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ + { 283, -1 }, /* (175) alter_table_options ::= alter_table_option */ + { 283, -2 }, /* (176) alter_table_options ::= alter_table_options alter_table_option */ + { 296, -2 }, /* (177) alter_table_option ::= COMMENT NK_STRING */ + { 296, -2 }, /* (178) alter_table_option ::= TTL NK_INTEGER */ + { 294, -1 }, /* (179) duration_list ::= duration_literal */ + { 294, -3 }, /* (180) duration_list ::= duration_list NK_COMMA duration_literal */ + { 295, -1 }, /* (181) rollup_func_list ::= rollup_func_name */ + { 295, -3 }, /* (182) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ + { 298, -1 }, /* (183) rollup_func_name ::= function_name */ + { 298, -1 }, /* (184) rollup_func_name ::= FIRST */ + { 298, -1 }, /* (185) rollup_func_name ::= LAST */ + { 291, -1 }, /* (186) col_name_list ::= col_name */ + { 291, -3 }, /* (187) col_name_list ::= col_name_list NK_COMMA col_name */ + { 300, -1 }, /* (188) col_name ::= column_name */ + { 253, -2 }, /* (189) cmd ::= SHOW DNODES */ + { 253, -2 }, /* (190) cmd ::= SHOW USERS */ + { 253, -2 }, /* (191) cmd ::= SHOW DATABASES */ + { 253, -4 }, /* (192) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ + { 253, -4 }, /* (193) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ + { 253, -3 }, /* (194) cmd ::= SHOW db_name_cond_opt VGROUPS */ + { 253, -2 }, /* (195) cmd ::= SHOW MNODES */ + { 253, -2 }, /* (196) cmd ::= SHOW MODULES */ + { 253, -2 }, /* (197) cmd ::= SHOW QNODES */ + { 253, -2 }, /* (198) cmd ::= SHOW FUNCTIONS */ + { 253, -5 }, /* (199) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ + { 253, -2 }, /* (200) cmd ::= SHOW STREAMS */ + { 253, -2 }, /* (201) cmd ::= SHOW ACCOUNTS */ + { 253, -2 }, /* (202) cmd ::= SHOW APPS */ + { 253, -2 }, /* (203) cmd ::= SHOW CONNECTIONS */ + { 253, -2 }, /* (204) cmd ::= SHOW LICENCE */ + { 253, -2 }, /* (205) cmd ::= SHOW GRANTS */ + { 253, -4 }, /* (206) cmd ::= SHOW CREATE DATABASE db_name */ + { 253, -4 }, /* (207) cmd ::= SHOW CREATE TABLE full_table_name */ + { 253, -4 }, /* (208) cmd ::= SHOW CREATE STABLE full_table_name */ + { 253, -2 }, /* (209) cmd ::= SHOW QUERIES */ + { 253, -2 }, /* (210) cmd ::= SHOW SCORES */ + { 253, -2 }, /* (211) cmd ::= SHOW TOPICS */ + { 253, -2 }, /* (212) cmd ::= SHOW VARIABLES */ + { 253, -3 }, /* (213) cmd ::= SHOW LOCAL VARIABLES */ + { 253, -4 }, /* (214) cmd ::= SHOW DNODE NK_INTEGER VARIABLES */ + { 253, -2 }, /* (215) cmd ::= SHOW BNODES */ + { 253, -2 }, /* (216) cmd ::= SHOW SNODES */ + { 253, -2 }, /* (217) cmd ::= SHOW CLUSTER */ + { 253, -2 }, /* (218) cmd ::= SHOW TRANSACTIONS */ + { 253, -4 }, /* (219) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ + { 253, -2 }, /* (220) cmd ::= SHOW CONSUMERS */ + { 253, -2 }, /* (221) cmd ::= SHOW SUBSCRIPTIONS */ + { 301, 0 }, /* (222) db_name_cond_opt ::= */ + { 301, -2 }, /* (223) db_name_cond_opt ::= db_name NK_DOT */ + { 302, 0 }, /* (224) like_pattern_opt ::= */ + { 302, -2 }, /* (225) like_pattern_opt ::= LIKE NK_STRING */ + { 303, -1 }, /* (226) table_name_cond ::= table_name */ + { 304, 0 }, /* (227) from_db_opt ::= */ + { 304, -2 }, /* (228) from_db_opt ::= FROM db_name */ + { 253, -8 }, /* (229) cmd ::= CREATE SMA INDEX not_exists_opt index_name ON table_name index_options */ + { 253, -4 }, /* (230) cmd ::= DROP INDEX exists_opt index_name */ + { 306, -10 }, /* (231) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ + { 306, -12 }, /* (232) 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 */ + { 307, -1 }, /* (233) func_list ::= func */ + { 307, -3 }, /* (234) func_list ::= func_list NK_COMMA func */ + { 310, -4 }, /* (235) func ::= function_name NK_LP expression_list NK_RP */ + { 309, 0 }, /* (236) sma_stream_opt ::= */ + { 309, -3 }, /* (237) sma_stream_opt ::= stream_options WATERMARK duration_literal */ + { 309, -3 }, /* (238) sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ + { 253, -6 }, /* (239) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression */ + { 253, -7 }, /* (240) cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ + { 253, -9 }, /* (241) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ + { 253, -7 }, /* (242) cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ + { 253, -9 }, /* (243) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ + { 253, -4 }, /* (244) cmd ::= DROP TOPIC exists_opt topic_name */ + { 253, -7 }, /* (245) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ + { 253, -2 }, /* (246) cmd ::= DESC full_table_name */ + { 253, -2 }, /* (247) cmd ::= DESCRIBE full_table_name */ + { 253, -3 }, /* (248) cmd ::= RESET QUERY CACHE */ + { 253, -4 }, /* (249) cmd ::= EXPLAIN analyze_opt explain_options query_expression */ + { 315, 0 }, /* (250) analyze_opt ::= */ + { 315, -1 }, /* (251) analyze_opt ::= ANALYZE */ + { 316, 0 }, /* (252) explain_options ::= */ + { 316, -3 }, /* (253) explain_options ::= explain_options VERBOSE NK_BOOL */ + { 316, -3 }, /* (254) explain_options ::= explain_options RATIO NK_FLOAT */ + { 253, -6 }, /* (255) cmd ::= COMPACT VNODES IN NK_LP integer_list NK_RP */ + { 253, -10 }, /* (256) cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ + { 253, -4 }, /* (257) cmd ::= DROP FUNCTION exists_opt function_name */ + { 317, 0 }, /* (258) agg_func_opt ::= */ + { 317, -1 }, /* (259) agg_func_opt ::= AGGREGATE */ + { 318, 0 }, /* (260) bufsize_opt ::= */ + { 318, -2 }, /* (261) bufsize_opt ::= BUFSIZE NK_INTEGER */ + { 253, -8 }, /* (262) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options into_opt AS query_expression */ + { 253, -4 }, /* (263) cmd ::= DROP STREAM exists_opt stream_name */ + { 320, 0 }, /* (264) into_opt ::= */ + { 320, -2 }, /* (265) into_opt ::= INTO full_table_name */ + { 311, 0 }, /* (266) stream_options ::= */ + { 311, -3 }, /* (267) stream_options ::= stream_options TRIGGER AT_ONCE */ + { 311, -3 }, /* (268) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ + { 311, -4 }, /* (269) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ + { 311, -3 }, /* (270) stream_options ::= stream_options WATERMARK duration_literal */ + { 311, -3 }, /* (271) stream_options ::= stream_options IGNORE EXPIRED */ + { 253, -3 }, /* (272) cmd ::= KILL CONNECTION NK_INTEGER */ + { 253, -3 }, /* (273) cmd ::= KILL QUERY NK_STRING */ + { 253, -3 }, /* (274) cmd ::= KILL TRANSACTION NK_INTEGER */ + { 253, -2 }, /* (275) cmd ::= BALANCE VGROUP */ + { 253, -4 }, /* (276) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + { 253, -4 }, /* (277) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ + { 253, -3 }, /* (278) cmd ::= SPLIT VGROUP NK_INTEGER */ + { 321, -2 }, /* (279) dnode_list ::= DNODE NK_INTEGER */ + { 321, -3 }, /* (280) dnode_list ::= dnode_list DNODE NK_INTEGER */ + { 253, -3 }, /* (281) cmd ::= SYNCDB db_name REPLICA */ + { 253, -4 }, /* (282) cmd ::= DELETE FROM full_table_name where_clause_opt */ + { 253, -1 }, /* (283) cmd ::= query_expression */ + { 253, -5 }, /* (284) cmd ::= INSERT INTO full_table_name specific_cols_opt query_expression */ + { 256, -1 }, /* (285) literal ::= NK_INTEGER */ + { 256, -1 }, /* (286) literal ::= NK_FLOAT */ + { 256, -1 }, /* (287) literal ::= NK_STRING */ + { 256, -1 }, /* (288) literal ::= NK_BOOL */ + { 256, -2 }, /* (289) literal ::= TIMESTAMP NK_STRING */ + { 256, -1 }, /* (290) literal ::= duration_literal */ + { 256, -1 }, /* (291) literal ::= NULL */ + { 256, -1 }, /* (292) literal ::= NK_QUESTION */ + { 297, -1 }, /* (293) duration_literal ::= NK_VARIABLE */ + { 323, -1 }, /* (294) signed ::= NK_INTEGER */ + { 323, -2 }, /* (295) signed ::= NK_PLUS NK_INTEGER */ + { 323, -2 }, /* (296) signed ::= NK_MINUS NK_INTEGER */ + { 323, -1 }, /* (297) signed ::= NK_FLOAT */ + { 323, -2 }, /* (298) signed ::= NK_PLUS NK_FLOAT */ + { 323, -2 }, /* (299) signed ::= NK_MINUS NK_FLOAT */ + { 286, -1 }, /* (300) signed_literal ::= signed */ + { 286, -1 }, /* (301) signed_literal ::= NK_STRING */ + { 286, -1 }, /* (302) signed_literal ::= NK_BOOL */ + { 286, -2 }, /* (303) signed_literal ::= TIMESTAMP NK_STRING */ + { 286, -1 }, /* (304) signed_literal ::= duration_literal */ + { 286, -1 }, /* (305) signed_literal ::= NULL */ + { 286, -1 }, /* (306) signed_literal ::= literal_func */ + { 325, -1 }, /* (307) literal_list ::= signed_literal */ + { 325, -3 }, /* (308) literal_list ::= literal_list NK_COMMA signed_literal */ + { 264, -1 }, /* (309) db_name ::= NK_ID */ + { 292, -1 }, /* (310) table_name ::= NK_ID */ + { 284, -1 }, /* (311) column_name ::= NK_ID */ + { 299, -1 }, /* (312) function_name ::= NK_ID */ + { 326, -1 }, /* (313) table_alias ::= NK_ID */ + { 327, -1 }, /* (314) column_alias ::= NK_ID */ + { 258, -1 }, /* (315) user_name ::= NK_ID */ + { 305, -1 }, /* (316) index_name ::= NK_ID */ + { 312, -1 }, /* (317) topic_name ::= NK_ID */ + { 319, -1 }, /* (318) stream_name ::= NK_ID */ + { 314, -1 }, /* (319) cgroup_name ::= NK_ID */ + { 328, -1 }, /* (320) expression ::= literal */ + { 328, -1 }, /* (321) expression ::= pseudo_column */ + { 328, -1 }, /* (322) expression ::= column_reference */ + { 328, -1 }, /* (323) expression ::= function_expression */ + { 328, -1 }, /* (324) expression ::= subquery */ + { 328, -3 }, /* (325) expression ::= NK_LP expression NK_RP */ + { 328, -2 }, /* (326) expression ::= NK_PLUS expression */ + { 328, -2 }, /* (327) expression ::= NK_MINUS expression */ + { 328, -3 }, /* (328) expression ::= expression NK_PLUS expression */ + { 328, -3 }, /* (329) expression ::= expression NK_MINUS expression */ + { 328, -3 }, /* (330) expression ::= expression NK_STAR expression */ + { 328, -3 }, /* (331) expression ::= expression NK_SLASH expression */ + { 328, -3 }, /* (332) expression ::= expression NK_REM expression */ + { 328, -3 }, /* (333) expression ::= column_reference NK_ARROW NK_STRING */ + { 328, -3 }, /* (334) expression ::= expression NK_BITAND expression */ + { 328, -3 }, /* (335) expression ::= expression NK_BITOR expression */ + { 289, -1 }, /* (336) expression_list ::= expression */ + { 289, -3 }, /* (337) expression_list ::= expression_list NK_COMMA expression */ + { 330, -1 }, /* (338) column_reference ::= column_name */ + { 330, -3 }, /* (339) column_reference ::= table_name NK_DOT column_name */ + { 329, -1 }, /* (340) pseudo_column ::= ROWTS */ + { 329, -1 }, /* (341) pseudo_column ::= TBNAME */ + { 329, -3 }, /* (342) pseudo_column ::= table_name NK_DOT TBNAME */ + { 329, -1 }, /* (343) pseudo_column ::= QSTARTTS */ + { 329, -1 }, /* (344) pseudo_column ::= QENDTS */ + { 329, -1 }, /* (345) pseudo_column ::= WSTARTTS */ + { 329, -1 }, /* (346) pseudo_column ::= WENDTS */ + { 329, -1 }, /* (347) pseudo_column ::= WDURATION */ + { 331, -4 }, /* (348) function_expression ::= function_name NK_LP expression_list NK_RP */ + { 331, -4 }, /* (349) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ + { 331, -6 }, /* (350) function_expression ::= CAST NK_LP expression AS type_name NK_RP */ + { 331, -1 }, /* (351) function_expression ::= literal_func */ + { 324, -3 }, /* (352) literal_func ::= noarg_func NK_LP NK_RP */ + { 324, -1 }, /* (353) literal_func ::= NOW */ + { 335, -1 }, /* (354) noarg_func ::= NOW */ + { 335, -1 }, /* (355) noarg_func ::= TODAY */ + { 335, -1 }, /* (356) noarg_func ::= TIMEZONE */ + { 335, -1 }, /* (357) noarg_func ::= DATABASE */ + { 335, -1 }, /* (358) noarg_func ::= CLIENT_VERSION */ + { 335, -1 }, /* (359) noarg_func ::= SERVER_VERSION */ + { 335, -1 }, /* (360) noarg_func ::= SERVER_STATUS */ + { 335, -1 }, /* (361) noarg_func ::= CURRENT_USER */ + { 335, -1 }, /* (362) noarg_func ::= USER */ + { 333, -1 }, /* (363) star_func ::= COUNT */ + { 333, -1 }, /* (364) star_func ::= FIRST */ + { 333, -1 }, /* (365) star_func ::= LAST */ + { 333, -1 }, /* (366) star_func ::= LAST_ROW */ + { 334, -1 }, /* (367) star_func_para_list ::= NK_STAR */ + { 334, -1 }, /* (368) star_func_para_list ::= other_para_list */ + { 336, -1 }, /* (369) other_para_list ::= star_func_para */ + { 336, -3 }, /* (370) other_para_list ::= other_para_list NK_COMMA star_func_para */ + { 337, -1 }, /* (371) star_func_para ::= expression */ + { 337, -3 }, /* (372) star_func_para ::= table_name NK_DOT NK_STAR */ + { 338, -3 }, /* (373) predicate ::= expression compare_op expression */ + { 338, -5 }, /* (374) predicate ::= expression BETWEEN expression AND expression */ + { 338, -6 }, /* (375) predicate ::= expression NOT BETWEEN expression AND expression */ + { 338, -3 }, /* (376) predicate ::= expression IS NULL */ + { 338, -4 }, /* (377) predicate ::= expression IS NOT NULL */ + { 338, -3 }, /* (378) predicate ::= expression in_op in_predicate_value */ + { 339, -1 }, /* (379) compare_op ::= NK_LT */ + { 339, -1 }, /* (380) compare_op ::= NK_GT */ + { 339, -1 }, /* (381) compare_op ::= NK_LE */ + { 339, -1 }, /* (382) compare_op ::= NK_GE */ + { 339, -1 }, /* (383) compare_op ::= NK_NE */ + { 339, -1 }, /* (384) compare_op ::= NK_EQ */ + { 339, -1 }, /* (385) compare_op ::= LIKE */ + { 339, -2 }, /* (386) compare_op ::= NOT LIKE */ + { 339, -1 }, /* (387) compare_op ::= MATCH */ + { 339, -1 }, /* (388) compare_op ::= NMATCH */ + { 339, -1 }, /* (389) compare_op ::= CONTAINS */ + { 340, -1 }, /* (390) in_op ::= IN */ + { 340, -2 }, /* (391) in_op ::= NOT IN */ + { 341, -3 }, /* (392) in_predicate_value ::= NK_LP expression_list NK_RP */ + { 342, -1 }, /* (393) boolean_value_expression ::= boolean_primary */ + { 342, -2 }, /* (394) boolean_value_expression ::= NOT boolean_primary */ + { 342, -3 }, /* (395) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + { 342, -3 }, /* (396) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + { 343, -1 }, /* (397) boolean_primary ::= predicate */ + { 343, -3 }, /* (398) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ + { 344, -1 }, /* (399) common_expression ::= expression */ + { 344, -1 }, /* (400) common_expression ::= boolean_value_expression */ + { 345, 0 }, /* (401) from_clause_opt ::= */ + { 345, -2 }, /* (402) from_clause_opt ::= FROM table_reference_list */ + { 346, -1 }, /* (403) table_reference_list ::= table_reference */ + { 346, -3 }, /* (404) table_reference_list ::= table_reference_list NK_COMMA table_reference */ + { 347, -1 }, /* (405) table_reference ::= table_primary */ + { 347, -1 }, /* (406) table_reference ::= joined_table */ + { 348, -2 }, /* (407) table_primary ::= table_name alias_opt */ + { 348, -4 }, /* (408) table_primary ::= db_name NK_DOT table_name alias_opt */ + { 348, -2 }, /* (409) table_primary ::= subquery alias_opt */ + { 348, -1 }, /* (410) table_primary ::= parenthesized_joined_table */ + { 350, 0 }, /* (411) alias_opt ::= */ + { 350, -1 }, /* (412) alias_opt ::= table_alias */ + { 350, -2 }, /* (413) alias_opt ::= AS table_alias */ + { 351, -3 }, /* (414) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + { 351, -3 }, /* (415) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ + { 349, -6 }, /* (416) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ + { 352, 0 }, /* (417) join_type ::= */ + { 352, -1 }, /* (418) join_type ::= INNER */ + { 354, -12 }, /* (419) 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 */ + { 355, 0 }, /* (420) set_quantifier_opt ::= */ + { 355, -1 }, /* (421) set_quantifier_opt ::= DISTINCT */ + { 355, -1 }, /* (422) set_quantifier_opt ::= ALL */ + { 356, -1 }, /* (423) select_list ::= select_item */ + { 356, -3 }, /* (424) select_list ::= select_list NK_COMMA select_item */ + { 364, -1 }, /* (425) select_item ::= NK_STAR */ + { 364, -1 }, /* (426) select_item ::= common_expression */ + { 364, -2 }, /* (427) select_item ::= common_expression column_alias */ + { 364, -3 }, /* (428) select_item ::= common_expression AS column_alias */ + { 364, -3 }, /* (429) select_item ::= table_name NK_DOT NK_STAR */ + { 322, 0 }, /* (430) where_clause_opt ::= */ + { 322, -2 }, /* (431) where_clause_opt ::= WHERE search_condition */ + { 357, 0 }, /* (432) partition_by_clause_opt ::= */ + { 357, -3 }, /* (433) partition_by_clause_opt ::= PARTITION BY expression_list */ + { 361, 0 }, /* (434) twindow_clause_opt ::= */ + { 361, -6 }, /* (435) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ + { 361, -4 }, /* (436) twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */ + { 361, -6 }, /* (437) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ + { 361, -8 }, /* (438) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ + { 308, 0 }, /* (439) sliding_opt ::= */ + { 308, -4 }, /* (440) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ + { 360, 0 }, /* (441) fill_opt ::= */ + { 360, -4 }, /* (442) fill_opt ::= FILL NK_LP fill_mode NK_RP */ + { 360, -6 }, /* (443) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ + { 365, -1 }, /* (444) fill_mode ::= NONE */ + { 365, -1 }, /* (445) fill_mode ::= PREV */ + { 365, -1 }, /* (446) fill_mode ::= NULL */ + { 365, -1 }, /* (447) fill_mode ::= LINEAR */ + { 365, -1 }, /* (448) fill_mode ::= NEXT */ + { 362, 0 }, /* (449) group_by_clause_opt ::= */ + { 362, -3 }, /* (450) group_by_clause_opt ::= GROUP BY group_by_list */ + { 366, -1 }, /* (451) group_by_list ::= expression */ + { 366, -3 }, /* (452) group_by_list ::= group_by_list NK_COMMA expression */ + { 363, 0 }, /* (453) having_clause_opt ::= */ + { 363, -2 }, /* (454) having_clause_opt ::= HAVING search_condition */ + { 358, 0 }, /* (455) range_opt ::= */ + { 358, -6 }, /* (456) range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */ + { 359, 0 }, /* (457) every_opt ::= */ + { 359, -4 }, /* (458) every_opt ::= EVERY NK_LP duration_literal NK_RP */ + { 313, -4 }, /* (459) query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */ + { 367, -1 }, /* (460) query_expression_body ::= query_primary */ + { 367, -4 }, /* (461) query_expression_body ::= query_expression_body UNION ALL query_expression_body */ + { 367, -3 }, /* (462) query_expression_body ::= query_expression_body UNION query_expression_body */ + { 371, -1 }, /* (463) query_primary ::= query_specification */ + { 371, -6 }, /* (464) query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */ + { 368, 0 }, /* (465) order_by_clause_opt ::= */ + { 368, -3 }, /* (466) order_by_clause_opt ::= ORDER BY sort_specification_list */ + { 369, 0 }, /* (467) slimit_clause_opt ::= */ + { 369, -2 }, /* (468) slimit_clause_opt ::= SLIMIT NK_INTEGER */ + { 369, -4 }, /* (469) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + { 369, -4 }, /* (470) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 370, 0 }, /* (471) limit_clause_opt ::= */ + { 370, -2 }, /* (472) limit_clause_opt ::= LIMIT NK_INTEGER */ + { 370, -4 }, /* (473) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ + { 370, -4 }, /* (474) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 332, -3 }, /* (475) subquery ::= NK_LP query_expression NK_RP */ + { 353, -1 }, /* (476) search_condition ::= common_expression */ + { 372, -1 }, /* (477) sort_specification_list ::= sort_specification */ + { 372, -3 }, /* (478) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ + { 373, -3 }, /* (479) sort_specification ::= expression ordering_specification_opt null_ordering_opt */ + { 374, 0 }, /* (480) ordering_specification_opt ::= */ + { 374, -1 }, /* (481) ordering_specification_opt ::= ASC */ + { 374, -1 }, /* (482) ordering_specification_opt ::= DESC */ + { 375, 0 }, /* (483) null_ordering_opt ::= */ + { 375, -2 }, /* (484) null_ordering_opt ::= NULLS FIRST */ + { 375, -2 }, /* (485) null_ordering_opt ::= NULLS LAST */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -3259,11 +3281,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,253,&yymsp[0].minor); + yy_destructor(yypParser,254,&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,254,&yymsp[0].minor); + yy_destructor(yypParser,255,&yymsp[0].minor); break; case 2: /* account_options ::= */ { } @@ -3277,20 +3299,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,253,&yymsp[-2].minor); +{ yy_destructor(yypParser,254,&yymsp[-2].minor); { } - yy_destructor(yypParser,255,&yymsp[0].minor); + yy_destructor(yypParser,256,&yymsp[0].minor); } break; case 12: /* alter_account_options ::= alter_account_option */ -{ yy_destructor(yypParser,256,&yymsp[0].minor); +{ yy_destructor(yypParser,257,&yymsp[0].minor); { } } break; case 13: /* alter_account_options ::= alter_account_options alter_account_option */ -{ yy_destructor(yypParser,254,&yymsp[-1].minor); +{ yy_destructor(yypParser,255,&yymsp[-1].minor); { } - yy_destructor(yypParser,256,&yymsp[0].minor); + yy_destructor(yypParser,257,&yymsp[0].minor); } break; case 14: /* alter_account_option ::= PASS literal */ @@ -3304,72 +3326,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,255,&yymsp[0].minor); + yy_destructor(yypParser,256,&yymsp[0].minor); break; case 24: /* cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ -{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy329, &yymsp[-1].minor.yy0, yymsp[0].minor.yy653); } +{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy401, &yymsp[-1].minor.yy0, yymsp[0].minor.yy695); } break; case 25: /* cmd ::= ALTER USER user_name PASS NK_STRING */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy329, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy401, 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.yy329, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy401, 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.yy329, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy401, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } break; case 28: /* cmd ::= DROP USER user_name */ -{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy329); } +{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy401); } break; case 29: /* sysinfo_opt ::= */ -{ yymsp[1].minor.yy653 = 1; } +{ yymsp[1].minor.yy695 = 1; } break; case 30: /* sysinfo_opt ::= SYSINFO NK_INTEGER */ -{ yymsp[-1].minor.yy653 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); } +{ yymsp[-1].minor.yy695 = 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.yy609, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy329); } +{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-4].minor.yy525, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy401); } break; case 32: /* cmd ::= REVOKE privileges ON priv_level FROM user_name */ -{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy609, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy329); } +{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy525, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy401); } break; case 33: /* privileges ::= ALL */ -{ yymsp[0].minor.yy609 = PRIVILEGE_TYPE_ALL; } +{ yymsp[0].minor.yy525 = PRIVILEGE_TYPE_ALL; } break; case 34: /* privileges ::= priv_type_list */ case 35: /* priv_type_list ::= priv_type */ yytestcase(yyruleno==35); -{ yylhsminor.yy609 = yymsp[0].minor.yy609; } - yymsp[0].minor.yy609 = yylhsminor.yy609; +{ yylhsminor.yy525 = yymsp[0].minor.yy525; } + yymsp[0].minor.yy525 = yylhsminor.yy525; break; case 36: /* priv_type_list ::= priv_type_list NK_COMMA priv_type */ -{ yylhsminor.yy609 = yymsp[-2].minor.yy609 | yymsp[0].minor.yy609; } - yymsp[-2].minor.yy609 = yylhsminor.yy609; +{ yylhsminor.yy525 = yymsp[-2].minor.yy525 | yymsp[0].minor.yy525; } + yymsp[-2].minor.yy525 = yylhsminor.yy525; break; case 37: /* priv_type ::= READ */ -{ yymsp[0].minor.yy609 = PRIVILEGE_TYPE_READ; } +{ yymsp[0].minor.yy525 = PRIVILEGE_TYPE_READ; } break; case 38: /* priv_type ::= WRITE */ -{ yymsp[0].minor.yy609 = PRIVILEGE_TYPE_WRITE; } +{ yymsp[0].minor.yy525 = PRIVILEGE_TYPE_WRITE; } break; case 39: /* priv_level ::= NK_STAR NK_DOT NK_STAR */ -{ yylhsminor.yy329 = yymsp[-2].minor.yy0; } - yymsp[-2].minor.yy329 = yylhsminor.yy329; +{ yylhsminor.yy401 = yymsp[-2].minor.yy0; } + yymsp[-2].minor.yy401 = yylhsminor.yy401; break; case 40: /* priv_level ::= db_name NK_DOT NK_STAR */ -{ yylhsminor.yy329 = yymsp[-2].minor.yy329; } - yymsp[-2].minor.yy329 = yylhsminor.yy329; +{ yylhsminor.yy401 = yymsp[-2].minor.yy401; } + yymsp[-2].minor.yy401 = yylhsminor.yy401; break; case 41: /* cmd ::= CREATE DNODE dnode_endpoint */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy329, NULL); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy401, NULL); } break; case 42: /* cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy0); } break; case 43: /* cmd ::= DROP DNODE NK_INTEGER */ { pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy0); } break; case 44: /* cmd ::= DROP DNODE dnode_endpoint */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy329); } +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy401); } break; case 45: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, NULL); } @@ -3386,32 +3408,32 @@ 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 307: /* db_name ::= NK_ID */ yytestcase(yyruleno==307); - case 308: /* table_name ::= NK_ID */ yytestcase(yyruleno==308); - case 309: /* column_name ::= NK_ID */ yytestcase(yyruleno==309); - case 310: /* function_name ::= NK_ID */ yytestcase(yyruleno==310); - case 311: /* table_alias ::= NK_ID */ yytestcase(yyruleno==311); - case 312: /* column_alias ::= NK_ID */ yytestcase(yyruleno==312); - case 313: /* user_name ::= NK_ID */ yytestcase(yyruleno==313); - case 314: /* index_name ::= NK_ID */ yytestcase(yyruleno==314); - case 315: /* topic_name ::= NK_ID */ yytestcase(yyruleno==315); - case 316: /* stream_name ::= NK_ID */ yytestcase(yyruleno==316); - case 317: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==317); - case 352: /* noarg_func ::= NOW */ yytestcase(yyruleno==352); - case 353: /* noarg_func ::= TODAY */ yytestcase(yyruleno==353); - case 354: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==354); - case 355: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==355); - case 356: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==356); - case 357: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==357); - case 358: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==358); - case 359: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==359); - case 360: /* noarg_func ::= USER */ yytestcase(yyruleno==360); - case 361: /* star_func ::= COUNT */ yytestcase(yyruleno==361); - case 362: /* star_func ::= FIRST */ yytestcase(yyruleno==362); - case 363: /* star_func ::= LAST */ yytestcase(yyruleno==363); - case 364: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==364); -{ yylhsminor.yy329 = yymsp[0].minor.yy0; } - yymsp[0].minor.yy329 = yylhsminor.yy329; + case 309: /* db_name ::= NK_ID */ yytestcase(yyruleno==309); + case 310: /* table_name ::= NK_ID */ yytestcase(yyruleno==310); + case 311: /* column_name ::= NK_ID */ yytestcase(yyruleno==311); + case 312: /* function_name ::= NK_ID */ yytestcase(yyruleno==312); + case 313: /* table_alias ::= NK_ID */ yytestcase(yyruleno==313); + case 314: /* column_alias ::= NK_ID */ yytestcase(yyruleno==314); + case 315: /* user_name ::= NK_ID */ yytestcase(yyruleno==315); + case 316: /* index_name ::= NK_ID */ yytestcase(yyruleno==316); + case 317: /* topic_name ::= NK_ID */ yytestcase(yyruleno==317); + case 318: /* stream_name ::= NK_ID */ yytestcase(yyruleno==318); + case 319: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==319); + case 354: /* noarg_func ::= NOW */ yytestcase(yyruleno==354); + case 355: /* noarg_func ::= TODAY */ yytestcase(yyruleno==355); + case 356: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==356); + case 357: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==357); + case 358: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==358); + case 359: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==359); + case 360: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==360); + case 361: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==361); + case 362: /* noarg_func ::= USER */ yytestcase(yyruleno==362); + case 363: /* star_func ::= COUNT */ yytestcase(yyruleno==363); + case 364: /* star_func ::= FIRST */ yytestcase(yyruleno==364); + case 365: /* star_func ::= LAST */ yytestcase(yyruleno==365); + case 366: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==366); +{ yylhsminor.yy401 = yymsp[0].minor.yy0; } + yymsp[0].minor.yy401 = yylhsminor.yy401; break; case 52: /* cmd ::= ALTER LOCAL NK_STRING */ { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[0].minor.yy0, NULL); } @@ -3444,1224 +3466,1231 @@ static YYACTIONTYPE yy_reduce( { 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.yy737, &yymsp[-1].minor.yy329, yymsp[0].minor.yy212); } +{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy89, &yymsp[-1].minor.yy401, yymsp[0].minor.yy248); } break; case 63: /* cmd ::= DROP DATABASE exists_opt db_name */ -{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy737, &yymsp[0].minor.yy329); } +{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy89, &yymsp[0].minor.yy401); } break; case 64: /* cmd ::= USE db_name */ -{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy329); } +{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy401); } break; case 65: /* cmd ::= ALTER DATABASE db_name alter_db_options */ -{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy329, yymsp[0].minor.yy212); } +{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy401, yymsp[0].minor.yy248); } break; case 66: /* not_exists_opt ::= IF NOT EXISTS */ -{ yymsp[-2].minor.yy737 = true; } +{ yymsp[-2].minor.yy89 = true; } break; case 67: /* not_exists_opt ::= */ case 69: /* exists_opt ::= */ yytestcase(yyruleno==69); - case 248: /* analyze_opt ::= */ yytestcase(yyruleno==248); - case 256: /* agg_func_opt ::= */ yytestcase(yyruleno==256); - case 418: /* set_quantifier_opt ::= */ yytestcase(yyruleno==418); -{ yymsp[1].minor.yy737 = false; } + case 250: /* analyze_opt ::= */ yytestcase(yyruleno==250); + case 258: /* agg_func_opt ::= */ yytestcase(yyruleno==258); + case 420: /* set_quantifier_opt ::= */ yytestcase(yyruleno==420); +{ yymsp[1].minor.yy89 = false; } break; case 68: /* exists_opt ::= IF EXISTS */ -{ yymsp[-1].minor.yy737 = true; } +{ yymsp[-1].minor.yy89 = true; } break; case 70: /* db_options ::= */ -{ yymsp[1].minor.yy212 = createDefaultDatabaseOptions(pCxt); } +{ yymsp[1].minor.yy248 = createDefaultDatabaseOptions(pCxt); } break; case 71: /* db_options ::= db_options BUFFER NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; case 72: /* db_options ::= db_options CACHELAST NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_CACHELAST, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_CACHELAST, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 73: /* db_options ::= db_options COMP NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_COMP, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 73: /* db_options ::= db_options CACHELASTSIZE NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_CACHELASTSIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 74: /* db_options ::= db_options DURATION NK_INTEGER */ - case 75: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==75); -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 74: /* db_options ::= db_options COMP NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_COMP, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 76: /* db_options ::= db_options FSYNC NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 75: /* db_options ::= db_options DURATION NK_INTEGER */ + case 76: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==76); +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 77: /* db_options ::= db_options MAXROWS NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 77: /* db_options ::= db_options FSYNC NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 78: /* db_options ::= db_options MINROWS NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 78: /* db_options ::= db_options MAXROWS NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 79: /* db_options ::= db_options KEEP integer_list */ - case 80: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==80); -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_KEEP, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 81: /* db_options ::= db_options PAGES NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 82: /* db_options ::= db_options PAGESIZE NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 83: /* db_options ::= db_options PRECISION NK_STRING */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 84: /* db_options ::= db_options REPLICA NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 85: /* db_options ::= db_options STRICT NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 86: /* db_options ::= db_options WAL NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_WAL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 87: /* db_options ::= db_options VGROUPS NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 88: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 89: /* db_options ::= db_options RETENTIONS retention_list */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_RETENTIONS, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 90: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ -{ yylhsminor.yy212 = setDatabaseOption(pCxt, yymsp[-2].minor.yy212, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 91: /* alter_db_options ::= alter_db_option */ -{ yylhsminor.yy212 = createAlterDatabaseOptions(pCxt); yylhsminor.yy212 = setAlterDatabaseOption(pCxt, yylhsminor.yy212, &yymsp[0].minor.yy245); } - yymsp[0].minor.yy212 = yylhsminor.yy212; - break; - case 92: /* alter_db_options ::= alter_db_options alter_db_option */ -{ yylhsminor.yy212 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy212, &yymsp[0].minor.yy245); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; - break; - case 93: /* 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 94: /* alter_db_option ::= CACHELAST NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_CACHELAST; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 95: /* alter_db_option ::= FSYNC NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 96: /* alter_db_option ::= KEEP integer_list */ - case 97: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==97); -{ yymsp[-1].minor.yy245.type = DB_OPTION_KEEP; yymsp[-1].minor.yy245.pList = yymsp[0].minor.yy424; } - break; - case 98: /* 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 99: /* 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 100: /* alter_db_option ::= STRICT NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_STRICT; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 101: /* alter_db_option ::= WAL NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_WAL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 102: /* 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 103: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ - case 278: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==278); -{ 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 104: /* variable_list ::= NK_VARIABLE */ -{ yylhsminor.yy424 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 105: /* 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 106: /* retention_list ::= retention */ - case 126: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==126); - case 129: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==129); - case 136: /* column_def_list ::= column_def */ yytestcase(yyruleno==136); - case 179: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==179); - case 184: /* col_name_list ::= col_name */ yytestcase(yyruleno==184); - case 231: /* func_list ::= func */ yytestcase(yyruleno==231); - case 305: /* literal_list ::= signed_literal */ yytestcase(yyruleno==305); - case 367: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==367); - case 421: /* select_list ::= select_item */ yytestcase(yyruleno==421); - case 475: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==475); -{ yylhsminor.yy424 = createNodeList(pCxt, yymsp[0].minor.yy212); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 107: /* retention_list ::= retention_list NK_COMMA retention */ - case 137: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==137); - case 180: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==180); - case 185: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==185); - case 232: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==232); - case 306: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==306); - case 368: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==368); - case 422: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==422); - case 476: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==476); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, yymsp[0].minor.yy212); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; - break; - case 108: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ -{ yylhsminor.yy212 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; - break; - case 109: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - case 111: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==111); -{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy737, yymsp[-5].minor.yy212, yymsp[-3].minor.yy424, yymsp[-1].minor.yy424, yymsp[0].minor.yy212); } - break; - case 110: /* cmd ::= CREATE TABLE multi_create_clause */ -{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy424); } - break; - case 112: /* cmd ::= DROP TABLE multi_drop_clause */ -{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy424); } - break; - case 113: /* cmd ::= DROP STABLE exists_opt full_table_name */ -{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy737, yymsp[0].minor.yy212); } - break; - case 114: /* cmd ::= ALTER TABLE alter_table_clause */ - case 281: /* cmd ::= query_expression */ yytestcase(yyruleno==281); -{ pCxt->pRootNode = yymsp[0].minor.yy212; } - break; - case 115: /* cmd ::= ALTER STABLE alter_table_clause */ -{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy212); } - break; - case 116: /* alter_table_clause ::= full_table_name alter_table_options */ -{ yylhsminor.yy212 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy212, yymsp[0].minor.yy212); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 79: /* db_options ::= db_options MINROWS NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 117: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ -{ yylhsminor.yy212 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy212, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy329, yymsp[0].minor.yy34); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 80: /* db_options ::= db_options KEEP integer_list */ + case 81: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==81); +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_KEEP, yymsp[0].minor.yy552); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 118: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ -{ yylhsminor.yy212 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy212, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy329); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; - break; - case 119: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ -{ yylhsminor.yy212 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy212, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy329, yymsp[0].minor.yy34); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 82: /* db_options ::= db_options PAGES NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 83: /* db_options ::= db_options PAGESIZE NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 84: /* db_options ::= db_options PRECISION NK_STRING */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 85: /* db_options ::= db_options REPLICA NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 86: /* db_options ::= db_options STRICT NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 87: /* db_options ::= db_options WAL NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_WAL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 88: /* db_options ::= db_options VGROUPS NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 89: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 90: /* db_options ::= db_options RETENTIONS retention_list */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_RETENTIONS, yymsp[0].minor.yy552); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 91: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ +{ yylhsminor.yy248 = setDatabaseOption(pCxt, yymsp[-2].minor.yy248, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 92: /* alter_db_options ::= alter_db_option */ +{ yylhsminor.yy248 = createAlterDatabaseOptions(pCxt); yylhsminor.yy248 = setAlterDatabaseOption(pCxt, yylhsminor.yy248, &yymsp[0].minor.yy301); } + yymsp[0].minor.yy248 = yylhsminor.yy248; + break; + case 93: /* alter_db_options ::= alter_db_options alter_db_option */ +{ yylhsminor.yy248 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy248, &yymsp[0].minor.yy301); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; + break; + case 94: /* alter_db_option ::= BUFFER NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 95: /* alter_db_option ::= CACHELAST NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_CACHELAST; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 96: /* alter_db_option ::= CACHELASTSIZE NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_CACHELASTSIZE; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 97: /* alter_db_option ::= FSYNC NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 98: /* alter_db_option ::= KEEP integer_list */ + case 99: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==99); +{ yymsp[-1].minor.yy301.type = DB_OPTION_KEEP; yymsp[-1].minor.yy301.pList = yymsp[0].minor.yy552; } + break; + case 100: /* alter_db_option ::= PAGES NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_PAGES; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 101: /* alter_db_option ::= REPLICA NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 102: /* alter_db_option ::= STRICT NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_STRICT; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 103: /* alter_db_option ::= WAL NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = DB_OPTION_WAL; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } + break; + case 104: /* integer_list ::= NK_INTEGER */ +{ yylhsminor.yy552 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy552 = yylhsminor.yy552; + break; + case 105: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ + case 280: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==280); +{ yylhsminor.yy552 = addNodeToList(pCxt, yymsp[-2].minor.yy552, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy552 = yylhsminor.yy552; + break; + case 106: /* variable_list ::= NK_VARIABLE */ +{ yylhsminor.yy552 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy552 = yylhsminor.yy552; + break; + case 107: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ +{ yylhsminor.yy552 = addNodeToList(pCxt, yymsp[-2].minor.yy552, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy552 = yylhsminor.yy552; + break; + case 108: /* retention_list ::= retention */ + case 128: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==128); + case 131: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==131); + case 138: /* column_def_list ::= column_def */ yytestcase(yyruleno==138); + case 181: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==181); + case 186: /* col_name_list ::= col_name */ yytestcase(yyruleno==186); + case 233: /* func_list ::= func */ yytestcase(yyruleno==233); + case 307: /* literal_list ::= signed_literal */ yytestcase(yyruleno==307); + case 369: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==369); + case 423: /* select_list ::= select_item */ yytestcase(yyruleno==423); + case 477: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==477); +{ yylhsminor.yy552 = createNodeList(pCxt, yymsp[0].minor.yy248); } + yymsp[0].minor.yy552 = yylhsminor.yy552; + break; + case 109: /* retention_list ::= retention_list NK_COMMA retention */ + case 139: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==139); + case 182: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==182); + case 187: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==187); + case 234: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==234); + case 308: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==308); + case 370: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==370); + case 424: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==424); + case 478: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==478); +{ yylhsminor.yy552 = addNodeToList(pCxt, yymsp[-2].minor.yy552, yymsp[0].minor.yy248); } + yymsp[-2].minor.yy552 = yylhsminor.yy552; + break; + case 110: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ +{ yylhsminor.yy248 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; + break; + case 111: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + case 113: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==113); +{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy89, yymsp[-5].minor.yy248, yymsp[-3].minor.yy552, yymsp[-1].minor.yy552, yymsp[0].minor.yy248); } + break; + case 112: /* cmd ::= CREATE TABLE multi_create_clause */ +{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy552); } + break; + case 114: /* cmd ::= DROP TABLE multi_drop_clause */ +{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy552); } + break; + case 115: /* cmd ::= DROP STABLE exists_opt full_table_name */ +{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy89, yymsp[0].minor.yy248); } + break; + case 116: /* cmd ::= ALTER TABLE alter_table_clause */ + case 283: /* cmd ::= query_expression */ yytestcase(yyruleno==283); +{ pCxt->pRootNode = yymsp[0].minor.yy248; } + break; + case 117: /* cmd ::= ALTER STABLE alter_table_clause */ +{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy248); } + break; + case 118: /* alter_table_clause ::= full_table_name alter_table_options */ +{ yylhsminor.yy248 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy248, yymsp[0].minor.yy248); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 120: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ -{ yylhsminor.yy212 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy212, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy329, &yymsp[0].minor.yy329); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 119: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ +{ yylhsminor.yy248 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy248, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy401, yymsp[0].minor.yy224); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 121: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */ -{ yylhsminor.yy212 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy212, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy329, yymsp[0].minor.yy34); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 120: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ +{ yylhsminor.yy248 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy248, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy401); } + yymsp[-3].minor.yy248 = yylhsminor.yy248; + break; + case 121: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ +{ yylhsminor.yy248 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy248, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy401, yymsp[0].minor.yy224); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 122: /* alter_table_clause ::= full_table_name DROP TAG column_name */ -{ yylhsminor.yy212 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy212, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy329); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + case 122: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ +{ yylhsminor.yy248 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy248, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy401, &yymsp[0].minor.yy401); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 123: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ -{ yylhsminor.yy212 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy212, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy329, yymsp[0].minor.yy34); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 123: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */ +{ yylhsminor.yy248 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy248, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy401, yymsp[0].minor.yy224); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 124: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ -{ yylhsminor.yy212 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy212, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy329, &yymsp[0].minor.yy329); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 124: /* alter_table_clause ::= full_table_name DROP TAG column_name */ +{ yylhsminor.yy248 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy248, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy401); } + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 125: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ -{ yylhsminor.yy212 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy212, &yymsp[-2].minor.yy329, yymsp[0].minor.yy212); } - yymsp[-5].minor.yy212 = yylhsminor.yy212; + case 125: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ +{ yylhsminor.yy248 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy248, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy401, yymsp[0].minor.yy224); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 127: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ - case 130: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==130); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-1].minor.yy424, yymsp[0].minor.yy212); } - yymsp[-1].minor.yy424 = yylhsminor.yy424; + case 126: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ +{ yylhsminor.yy248 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy248, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy401, &yymsp[0].minor.yy401); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 128: /* 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.yy212 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy737, yymsp[-8].minor.yy212, yymsp[-6].minor.yy212, yymsp[-5].minor.yy424, yymsp[-2].minor.yy424, yymsp[0].minor.yy212); } - yymsp[-9].minor.yy212 = yylhsminor.yy212; + case 127: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ +{ yylhsminor.yy248 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy248, &yymsp[-2].minor.yy401, yymsp[0].minor.yy248); } + yymsp[-5].minor.yy248 = yylhsminor.yy248; break; - case 131: /* drop_table_clause ::= exists_opt full_table_name */ -{ yylhsminor.yy212 = createDropTableClause(pCxt, yymsp[-1].minor.yy737, yymsp[0].minor.yy212); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 129: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ + case 132: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==132); +{ yylhsminor.yy552 = addNodeToList(pCxt, yymsp[-1].minor.yy552, yymsp[0].minor.yy248); } + yymsp[-1].minor.yy552 = yylhsminor.yy552; break; - case 132: /* specific_cols_opt ::= */ - case 163: /* tags_def_opt ::= */ yytestcase(yyruleno==163); - case 430: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==430); - case 447: /* group_by_clause_opt ::= */ yytestcase(yyruleno==447); - case 463: /* order_by_clause_opt ::= */ yytestcase(yyruleno==463); -{ yymsp[1].minor.yy424 = NULL; } + case 130: /* 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.yy248 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy89, yymsp[-8].minor.yy248, yymsp[-6].minor.yy248, yymsp[-5].minor.yy552, yymsp[-2].minor.yy552, yymsp[0].minor.yy248); } + yymsp[-9].minor.yy248 = yylhsminor.yy248; break; - case 133: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ -{ yymsp[-2].minor.yy424 = yymsp[-1].minor.yy424; } + case 133: /* drop_table_clause ::= exists_opt full_table_name */ +{ yylhsminor.yy248 = createDropTableClause(pCxt, yymsp[-1].minor.yy89, yymsp[0].minor.yy248); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 134: /* full_table_name ::= table_name */ -{ yylhsminor.yy212 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy329, NULL); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 134: /* specific_cols_opt ::= */ + case 165: /* tags_def_opt ::= */ yytestcase(yyruleno==165); + case 432: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==432); + case 449: /* group_by_clause_opt ::= */ yytestcase(yyruleno==449); + case 465: /* order_by_clause_opt ::= */ yytestcase(yyruleno==465); +{ yymsp[1].minor.yy552 = NULL; } break; - case 135: /* full_table_name ::= db_name NK_DOT table_name */ -{ yylhsminor.yy212 = createRealTableNode(pCxt, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy329, NULL); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 135: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ +{ yymsp[-2].minor.yy552 = yymsp[-1].minor.yy552; } break; - case 138: /* column_def ::= column_name type_name */ -{ yylhsminor.yy212 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy329, yymsp[0].minor.yy34, NULL); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 136: /* full_table_name ::= table_name */ +{ yylhsminor.yy248 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy401, NULL); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 139: /* column_def ::= column_name type_name COMMENT NK_STRING */ -{ yylhsminor.yy212 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy329, yymsp[-2].minor.yy34, &yymsp[0].minor.yy0); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + case 137: /* full_table_name ::= db_name NK_DOT table_name */ +{ yylhsminor.yy248 = createRealTableNode(pCxt, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy401, NULL); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 140: /* type_name ::= BOOL */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_BOOL); } + case 140: /* column_def ::= column_name type_name */ +{ yylhsminor.yy248 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy401, yymsp[0].minor.yy224, NULL); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 141: /* type_name ::= TINYINT */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_TINYINT); } + case 141: /* column_def ::= column_name type_name COMMENT NK_STRING */ +{ yylhsminor.yy248 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy401, yymsp[-2].minor.yy224, &yymsp[0].minor.yy0); } + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 142: /* type_name ::= SMALLINT */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_SMALLINT); } + case 142: /* type_name ::= BOOL */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_BOOL); } break; - case 143: /* type_name ::= INT */ - case 144: /* type_name ::= INTEGER */ yytestcase(yyruleno==144); -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_INT); } + case 143: /* type_name ::= TINYINT */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_TINYINT); } break; - case 145: /* type_name ::= BIGINT */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_BIGINT); } + case 144: /* type_name ::= SMALLINT */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_SMALLINT); } break; - case 146: /* type_name ::= FLOAT */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_FLOAT); } + case 145: /* type_name ::= INT */ + case 146: /* type_name ::= INTEGER */ yytestcase(yyruleno==146); +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_INT); } break; - case 147: /* type_name ::= DOUBLE */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_DOUBLE); } + case 147: /* type_name ::= BIGINT */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_BIGINT); } break; - case 148: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy34 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } + case 148: /* type_name ::= FLOAT */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_FLOAT); } break; - case 149: /* type_name ::= TIMESTAMP */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } + case 149: /* type_name ::= DOUBLE */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_DOUBLE); } break; - case 150: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy34 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } + case 150: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy224 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } break; - case 151: /* type_name ::= TINYINT UNSIGNED */ -{ yymsp[-1].minor.yy34 = createDataType(TSDB_DATA_TYPE_UTINYINT); } + case 151: /* type_name ::= TIMESTAMP */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } break; - case 152: /* type_name ::= SMALLINT UNSIGNED */ -{ yymsp[-1].minor.yy34 = createDataType(TSDB_DATA_TYPE_USMALLINT); } + case 152: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy224 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } break; - case 153: /* type_name ::= INT UNSIGNED */ -{ yymsp[-1].minor.yy34 = createDataType(TSDB_DATA_TYPE_UINT); } + case 153: /* type_name ::= TINYINT UNSIGNED */ +{ yymsp[-1].minor.yy224 = createDataType(TSDB_DATA_TYPE_UTINYINT); } break; - case 154: /* type_name ::= BIGINT UNSIGNED */ -{ yymsp[-1].minor.yy34 = createDataType(TSDB_DATA_TYPE_UBIGINT); } + case 154: /* type_name ::= SMALLINT UNSIGNED */ +{ yymsp[-1].minor.yy224 = createDataType(TSDB_DATA_TYPE_USMALLINT); } break; - case 155: /* type_name ::= JSON */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_JSON); } + case 155: /* type_name ::= INT UNSIGNED */ +{ yymsp[-1].minor.yy224 = createDataType(TSDB_DATA_TYPE_UINT); } break; - case 156: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy34 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } + case 156: /* type_name ::= BIGINT UNSIGNED */ +{ yymsp[-1].minor.yy224 = createDataType(TSDB_DATA_TYPE_UBIGINT); } break; - case 157: /* type_name ::= MEDIUMBLOB */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } + case 157: /* type_name ::= JSON */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_JSON); } break; - case 158: /* type_name ::= BLOB */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_BLOB); } + case 158: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy224 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } break; - case 159: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy34 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } + case 159: /* type_name ::= MEDIUMBLOB */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } break; - case 160: /* type_name ::= DECIMAL */ -{ yymsp[0].minor.yy34 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 160: /* type_name ::= BLOB */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_BLOB); } break; - case 161: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy34 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 161: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy224 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } break; - case 162: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ -{ yymsp[-5].minor.yy34 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 162: /* type_name ::= DECIMAL */ +{ yymsp[0].minor.yy224 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 164: /* tags_def_opt ::= tags_def */ - case 366: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==366); -{ yylhsminor.yy424 = yymsp[0].minor.yy424; } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 163: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy224 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 165: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ -{ yymsp[-3].minor.yy424 = yymsp[-1].minor.yy424; } + case 164: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ +{ yymsp[-5].minor.yy224 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 166: /* table_options ::= */ -{ yymsp[1].minor.yy212 = createDefaultTableOptions(pCxt); } + case 166: /* tags_def_opt ::= tags_def */ + case 368: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==368); +{ yylhsminor.yy552 = yymsp[0].minor.yy552; } + yymsp[0].minor.yy552 = yylhsminor.yy552; break; - case 167: /* table_options ::= table_options COMMENT NK_STRING */ -{ yylhsminor.yy212 = setTableOption(pCxt, yymsp[-2].minor.yy212, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 167: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ +{ yymsp[-3].minor.yy552 = yymsp[-1].minor.yy552; } break; - case 168: /* table_options ::= table_options MAX_DELAY duration_list */ -{ yylhsminor.yy212 = setTableOption(pCxt, yymsp[-2].minor.yy212, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 168: /* table_options ::= */ +{ yymsp[1].minor.yy248 = createDefaultTableOptions(pCxt); } break; - case 169: /* table_options ::= table_options WATERMARK duration_list */ -{ yylhsminor.yy212 = setTableOption(pCxt, yymsp[-2].minor.yy212, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 169: /* table_options ::= table_options COMMENT NK_STRING */ +{ yylhsminor.yy248 = setTableOption(pCxt, yymsp[-2].minor.yy248, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 170: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ -{ yylhsminor.yy212 = setTableOption(pCxt, yymsp[-4].minor.yy212, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy424); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 170: /* table_options ::= table_options MAX_DELAY duration_list */ +{ yylhsminor.yy248 = setTableOption(pCxt, yymsp[-2].minor.yy248, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy552); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 171: /* table_options ::= table_options TTL NK_INTEGER */ -{ yylhsminor.yy212 = setTableOption(pCxt, yymsp[-2].minor.yy212, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 171: /* table_options ::= table_options WATERMARK duration_list */ +{ yylhsminor.yy248 = setTableOption(pCxt, yymsp[-2].minor.yy248, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy552); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 172: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ -{ yylhsminor.yy212 = setTableOption(pCxt, yymsp[-4].minor.yy212, TABLE_OPTION_SMA, yymsp[-1].minor.yy424); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + case 172: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ +{ yylhsminor.yy248 = setTableOption(pCxt, yymsp[-4].minor.yy248, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy552); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 173: /* alter_table_options ::= alter_table_option */ -{ yylhsminor.yy212 = createAlterTableOptions(pCxt); yylhsminor.yy212 = setTableOption(pCxt, yylhsminor.yy212, yymsp[0].minor.yy245.type, &yymsp[0].minor.yy245.val); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 173: /* table_options ::= table_options TTL NK_INTEGER */ +{ yylhsminor.yy248 = setTableOption(pCxt, yymsp[-2].minor.yy248, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 174: /* alter_table_options ::= alter_table_options alter_table_option */ -{ yylhsminor.yy212 = setTableOption(pCxt, yymsp[-1].minor.yy212, yymsp[0].minor.yy245.type, &yymsp[0].minor.yy245.val); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 174: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ +{ yylhsminor.yy248 = setTableOption(pCxt, yymsp[-4].minor.yy248, TABLE_OPTION_SMA, yymsp[-1].minor.yy552); } + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 175: /* alter_table_option ::= COMMENT NK_STRING */ -{ yymsp[-1].minor.yy245.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } + case 175: /* alter_table_options ::= alter_table_option */ +{ yylhsminor.yy248 = createAlterTableOptions(pCxt); yylhsminor.yy248 = setTableOption(pCxt, yylhsminor.yy248, yymsp[0].minor.yy301.type, &yymsp[0].minor.yy301.val); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 176: /* alter_table_option ::= TTL NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } + case 176: /* alter_table_options ::= alter_table_options alter_table_option */ +{ yylhsminor.yy248 = setTableOption(pCxt, yymsp[-1].minor.yy248, yymsp[0].minor.yy301.type, &yymsp[0].minor.yy301.val); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 177: /* duration_list ::= duration_literal */ - case 334: /* expression_list ::= expression */ yytestcase(yyruleno==334); -{ yylhsminor.yy424 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy212)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 177: /* alter_table_option ::= COMMENT NK_STRING */ +{ yymsp[-1].minor.yy301.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } break; - case 178: /* duration_list ::= duration_list NK_COMMA duration_literal */ - case 335: /* expression_list ::= expression_list NK_COMMA expression */ yytestcase(yyruleno==335); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, releaseRawExprNode(pCxt, yymsp[0].minor.yy212)); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; + case 178: /* alter_table_option ::= TTL NK_INTEGER */ +{ yymsp[-1].minor.yy301.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy301.val = yymsp[0].minor.yy0; } break; - case 181: /* rollup_func_name ::= function_name */ -{ yylhsminor.yy212 = createFunctionNode(pCxt, &yymsp[0].minor.yy329, NULL); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 179: /* duration_list ::= duration_literal */ + case 336: /* expression_list ::= expression */ yytestcase(yyruleno==336); +{ yylhsminor.yy552 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy248)); } + yymsp[0].minor.yy552 = yylhsminor.yy552; break; - case 182: /* rollup_func_name ::= FIRST */ - case 183: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==183); -{ yylhsminor.yy212 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 180: /* duration_list ::= duration_list NK_COMMA duration_literal */ + case 337: /* expression_list ::= expression_list NK_COMMA expression */ yytestcase(yyruleno==337); +{ yylhsminor.yy552 = addNodeToList(pCxt, yymsp[-2].minor.yy552, releaseRawExprNode(pCxt, yymsp[0].minor.yy248)); } + yymsp[-2].minor.yy552 = yylhsminor.yy552; break; - case 186: /* col_name ::= column_name */ -{ yylhsminor.yy212 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy329); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 183: /* rollup_func_name ::= function_name */ +{ yylhsminor.yy248 = createFunctionNode(pCxt, &yymsp[0].minor.yy401, NULL); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 187: /* cmd ::= SHOW DNODES */ + case 184: /* rollup_func_name ::= FIRST */ + case 185: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==185); +{ yylhsminor.yy248 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } + yymsp[0].minor.yy248 = yylhsminor.yy248; + break; + case 188: /* col_name ::= column_name */ +{ yylhsminor.yy248 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy401); } + yymsp[0].minor.yy248 = yylhsminor.yy248; + break; + case 189: /* cmd ::= SHOW DNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); } break; - case 188: /* cmd ::= SHOW USERS */ + case 190: /* cmd ::= SHOW USERS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); } break; - case 189: /* cmd ::= SHOW DATABASES */ + case 191: /* cmd ::= SHOW DATABASES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT); } break; - case 190: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy212, yymsp[0].minor.yy212, OP_TYPE_LIKE); } + case 192: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy248, yymsp[0].minor.yy248, OP_TYPE_LIKE); } break; - case 191: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy212, yymsp[0].minor.yy212, OP_TYPE_LIKE); } + case 193: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy248, yymsp[0].minor.yy248, OP_TYPE_LIKE); } break; - case 192: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy212, NULL, OP_TYPE_LIKE); } + case 194: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy248, NULL, OP_TYPE_LIKE); } break; - case 193: /* cmd ::= SHOW MNODES */ + case 195: /* cmd ::= SHOW MNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); } break; - case 194: /* cmd ::= SHOW MODULES */ + case 196: /* cmd ::= SHOW MODULES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MODULES_STMT); } break; - case 195: /* cmd ::= SHOW QNODES */ + case 197: /* cmd ::= SHOW QNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); } break; - case 196: /* cmd ::= SHOW FUNCTIONS */ + case 198: /* cmd ::= SHOW FUNCTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); } break; - case 197: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy212, yymsp[-1].minor.yy212, OP_TYPE_EQUAL); } + case 199: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy248, yymsp[-1].minor.yy248, OP_TYPE_EQUAL); } break; - case 198: /* cmd ::= SHOW STREAMS */ + case 200: /* cmd ::= SHOW STREAMS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT); } break; - case 199: /* cmd ::= SHOW ACCOUNTS */ + case 201: /* cmd ::= SHOW ACCOUNTS */ { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } break; - case 200: /* cmd ::= SHOW APPS */ + case 202: /* cmd ::= SHOW APPS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); } break; - case 201: /* cmd ::= SHOW CONNECTIONS */ + case 203: /* cmd ::= SHOW CONNECTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); } break; - case 202: /* cmd ::= SHOW LICENCE */ - case 203: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==203); + case 204: /* cmd ::= SHOW LICENCE */ + case 205: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==205); { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT); } break; - case 204: /* cmd ::= SHOW CREATE DATABASE db_name */ -{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy329); } + case 206: /* cmd ::= SHOW CREATE DATABASE db_name */ +{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy401); } break; - case 205: /* cmd ::= SHOW CREATE TABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy212); } + case 207: /* cmd ::= SHOW CREATE TABLE full_table_name */ +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy248); } break; - case 206: /* cmd ::= SHOW CREATE STABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy212); } + case 208: /* cmd ::= SHOW CREATE STABLE full_table_name */ +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy248); } break; - case 207: /* cmd ::= SHOW QUERIES */ + case 209: /* cmd ::= SHOW QUERIES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); } break; - case 208: /* cmd ::= SHOW SCORES */ + case 210: /* cmd ::= SHOW SCORES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); } break; - case 209: /* cmd ::= SHOW TOPICS */ + case 211: /* cmd ::= SHOW TOPICS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); } break; - case 210: /* cmd ::= SHOW VARIABLES */ + case 212: /* cmd ::= SHOW VARIABLES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); } break; - case 211: /* cmd ::= SHOW LOCAL VARIABLES */ + case 213: /* cmd ::= SHOW LOCAL VARIABLES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT); } break; - case 212: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES */ + case 214: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES */ { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[-1].minor.yy0)); } break; - case 213: /* cmd ::= SHOW BNODES */ + case 215: /* cmd ::= SHOW BNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); } break; - case 214: /* cmd ::= SHOW SNODES */ + case 216: /* cmd ::= SHOW SNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); } break; - case 215: /* cmd ::= SHOW CLUSTER */ + case 217: /* cmd ::= SHOW CLUSTER */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); } break; - case 216: /* cmd ::= SHOW TRANSACTIONS */ + case 218: /* cmd ::= SHOW TRANSACTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); } break; - case 217: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ -{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy212); } + case 219: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ +{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy248); } break; - case 218: /* cmd ::= SHOW CONSUMERS */ + case 220: /* cmd ::= SHOW CONSUMERS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); } break; - case 219: /* cmd ::= SHOW SUBSCRIPTIONS */ + case 221: /* cmd ::= SHOW SUBSCRIPTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); } break; - case 220: /* db_name_cond_opt ::= */ - case 225: /* from_db_opt ::= */ yytestcase(yyruleno==225); -{ yymsp[1].minor.yy212 = createDefaultDatabaseCondValue(pCxt); } + case 222: /* db_name_cond_opt ::= */ + case 227: /* from_db_opt ::= */ yytestcase(yyruleno==227); +{ yymsp[1].minor.yy248 = createDefaultDatabaseCondValue(pCxt); } break; - case 221: /* db_name_cond_opt ::= db_name NK_DOT */ -{ yylhsminor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy329); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 223: /* db_name_cond_opt ::= db_name NK_DOT */ +{ yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy401); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 222: /* like_pattern_opt ::= */ - case 262: /* into_opt ::= */ yytestcase(yyruleno==262); - case 399: /* from_clause_opt ::= */ yytestcase(yyruleno==399); - case 428: /* where_clause_opt ::= */ yytestcase(yyruleno==428); - case 432: /* twindow_clause_opt ::= */ yytestcase(yyruleno==432); - case 437: /* sliding_opt ::= */ yytestcase(yyruleno==437); - case 439: /* fill_opt ::= */ yytestcase(yyruleno==439); - case 451: /* having_clause_opt ::= */ yytestcase(yyruleno==451); - case 453: /* range_opt ::= */ yytestcase(yyruleno==453); - case 455: /* every_opt ::= */ yytestcase(yyruleno==455); - case 465: /* slimit_clause_opt ::= */ yytestcase(yyruleno==465); - case 469: /* limit_clause_opt ::= */ yytestcase(yyruleno==469); -{ yymsp[1].minor.yy212 = NULL; } + case 224: /* like_pattern_opt ::= */ + case 264: /* into_opt ::= */ yytestcase(yyruleno==264); + case 401: /* from_clause_opt ::= */ yytestcase(yyruleno==401); + case 430: /* where_clause_opt ::= */ yytestcase(yyruleno==430); + case 434: /* twindow_clause_opt ::= */ yytestcase(yyruleno==434); + case 439: /* sliding_opt ::= */ yytestcase(yyruleno==439); + case 441: /* fill_opt ::= */ yytestcase(yyruleno==441); + case 453: /* having_clause_opt ::= */ yytestcase(yyruleno==453); + case 455: /* range_opt ::= */ yytestcase(yyruleno==455); + case 457: /* every_opt ::= */ yytestcase(yyruleno==457); + case 467: /* slimit_clause_opt ::= */ yytestcase(yyruleno==467); + case 471: /* limit_clause_opt ::= */ yytestcase(yyruleno==471); +{ yymsp[1].minor.yy248 = NULL; } break; - case 223: /* like_pattern_opt ::= LIKE NK_STRING */ -{ yymsp[-1].minor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + case 225: /* like_pattern_opt ::= LIKE NK_STRING */ +{ yymsp[-1].minor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } break; - case 224: /* table_name_cond ::= table_name */ -{ yylhsminor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy329); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 226: /* table_name_cond ::= table_name */ +{ yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy401); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 226: /* from_db_opt ::= FROM db_name */ -{ yymsp[-1].minor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy329); } + case 228: /* from_db_opt ::= FROM db_name */ +{ yymsp[-1].minor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy401); } break; - case 227: /* cmd ::= CREATE SMA INDEX not_exists_opt index_name ON table_name index_options */ -{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy737, &yymsp[-3].minor.yy329, &yymsp[-1].minor.yy329, NULL, yymsp[0].minor.yy212); } + case 229: /* cmd ::= CREATE SMA INDEX not_exists_opt index_name ON table_name index_options */ +{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy89, &yymsp[-3].minor.yy401, &yymsp[-1].minor.yy401, NULL, yymsp[0].minor.yy248); } break; - case 228: /* cmd ::= DROP INDEX exists_opt index_name */ -{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy737, &yymsp[0].minor.yy329); } + case 230: /* cmd ::= DROP INDEX exists_opt index_name */ +{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy89, &yymsp[0].minor.yy401); } break; - case 229: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ -{ yymsp[-9].minor.yy212 = createIndexOption(pCxt, yymsp[-7].minor.yy424, releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), NULL, yymsp[-1].minor.yy212, yymsp[0].minor.yy212); } + case 231: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ +{ yymsp[-9].minor.yy248 = createIndexOption(pCxt, yymsp[-7].minor.yy552, releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), NULL, yymsp[-1].minor.yy248, yymsp[0].minor.yy248); } break; - case 230: /* 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.yy212 = createIndexOption(pCxt, yymsp[-9].minor.yy424, releaseRawExprNode(pCxt, yymsp[-5].minor.yy212), releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), yymsp[-1].minor.yy212, yymsp[0].minor.yy212); } + case 232: /* 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.yy248 = createIndexOption(pCxt, yymsp[-9].minor.yy552, releaseRawExprNode(pCxt, yymsp[-5].minor.yy248), releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), yymsp[-1].minor.yy248, yymsp[0].minor.yy248); } break; - case 233: /* func ::= function_name NK_LP expression_list NK_RP */ -{ yylhsminor.yy212 = createFunctionNode(pCxt, &yymsp[-3].minor.yy329, yymsp[-1].minor.yy424); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + case 235: /* func ::= function_name NK_LP expression_list NK_RP */ +{ yylhsminor.yy248 = createFunctionNode(pCxt, &yymsp[-3].minor.yy401, yymsp[-1].minor.yy552); } + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 234: /* sma_stream_opt ::= */ - case 264: /* stream_options ::= */ yytestcase(yyruleno==264); -{ yymsp[1].minor.yy212 = createStreamOptions(pCxt); } + case 236: /* sma_stream_opt ::= */ + case 266: /* stream_options ::= */ yytestcase(yyruleno==266); +{ yymsp[1].minor.yy248 = createStreamOptions(pCxt); } break; - case 235: /* sma_stream_opt ::= stream_options WATERMARK duration_literal */ - case 268: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==268); -{ ((SStreamOptions*)yymsp[-2].minor.yy212)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy212); yylhsminor.yy212 = yymsp[-2].minor.yy212; } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 237: /* sma_stream_opt ::= stream_options WATERMARK duration_literal */ + case 270: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==270); +{ ((SStreamOptions*)yymsp[-2].minor.yy248)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy248); yylhsminor.yy248 = yymsp[-2].minor.yy248; } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 236: /* sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-2].minor.yy212)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy212); yylhsminor.yy212 = yymsp[-2].minor.yy212; } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 238: /* sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ +{ ((SStreamOptions*)yymsp[-2].minor.yy248)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy248); yylhsminor.yy248 = yymsp[-2].minor.yy248; } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 237: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression */ -{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy737, &yymsp[-2].minor.yy329, yymsp[0].minor.yy212); } + case 239: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression */ +{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy89, &yymsp[-2].minor.yy401, yymsp[0].minor.yy248); } break; - case 238: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy737, &yymsp[-3].minor.yy329, &yymsp[0].minor.yy329, false); } + case 240: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy89, &yymsp[-3].minor.yy401, &yymsp[0].minor.yy401, false); } break; - case 239: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy737, &yymsp[-5].minor.yy329, &yymsp[0].minor.yy329, true); } + case 241: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy89, &yymsp[-5].minor.yy401, &yymsp[0].minor.yy401, true); } break; - case 240: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy737, &yymsp[-3].minor.yy329, yymsp[0].minor.yy212, false); } + case 242: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy89, &yymsp[-3].minor.yy401, yymsp[0].minor.yy248, false); } break; - case 241: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy737, &yymsp[-5].minor.yy329, yymsp[0].minor.yy212, true); } + case 243: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy89, &yymsp[-5].minor.yy401, yymsp[0].minor.yy248, true); } break; - case 242: /* cmd ::= DROP TOPIC exists_opt topic_name */ -{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy737, &yymsp[0].minor.yy329); } + case 244: /* cmd ::= DROP TOPIC exists_opt topic_name */ +{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy89, &yymsp[0].minor.yy401); } break; - case 243: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ -{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy737, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy329); } + case 245: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ +{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy89, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy401); } break; - case 244: /* cmd ::= DESC full_table_name */ - case 245: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==245); -{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy212); } + case 246: /* cmd ::= DESC full_table_name */ + case 247: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==247); +{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy248); } break; - case 246: /* cmd ::= RESET QUERY CACHE */ + case 248: /* cmd ::= RESET QUERY CACHE */ { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); } break; - case 247: /* cmd ::= EXPLAIN analyze_opt explain_options query_expression */ -{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy737, yymsp[-1].minor.yy212, yymsp[0].minor.yy212); } + case 249: /* cmd ::= EXPLAIN analyze_opt explain_options query_expression */ +{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy89, yymsp[-1].minor.yy248, yymsp[0].minor.yy248); } break; - case 249: /* analyze_opt ::= ANALYZE */ - case 257: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==257); - case 419: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==419); -{ yymsp[0].minor.yy737 = true; } + case 251: /* analyze_opt ::= ANALYZE */ + case 259: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==259); + case 421: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==421); +{ yymsp[0].minor.yy89 = true; } break; - case 250: /* explain_options ::= */ -{ yymsp[1].minor.yy212 = createDefaultExplainOptions(pCxt); } + case 252: /* explain_options ::= */ +{ yymsp[1].minor.yy248 = createDefaultExplainOptions(pCxt); } break; - case 251: /* explain_options ::= explain_options VERBOSE NK_BOOL */ -{ yylhsminor.yy212 = setExplainVerbose(pCxt, yymsp[-2].minor.yy212, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 253: /* explain_options ::= explain_options VERBOSE NK_BOOL */ +{ yylhsminor.yy248 = setExplainVerbose(pCxt, yymsp[-2].minor.yy248, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 252: /* explain_options ::= explain_options RATIO NK_FLOAT */ -{ yylhsminor.yy212 = setExplainRatio(pCxt, yymsp[-2].minor.yy212, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 254: /* explain_options ::= explain_options RATIO NK_FLOAT */ +{ yylhsminor.yy248 = setExplainRatio(pCxt, yymsp[-2].minor.yy248, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 253: /* cmd ::= COMPACT VNODES IN NK_LP integer_list NK_RP */ -{ pCxt->pRootNode = createCompactStmt(pCxt, yymsp[-1].minor.yy424); } + case 255: /* cmd ::= COMPACT VNODES IN NK_LP integer_list NK_RP */ +{ pCxt->pRootNode = createCompactStmt(pCxt, yymsp[-1].minor.yy552); } break; - case 254: /* 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.yy737, yymsp[-8].minor.yy737, &yymsp[-5].minor.yy329, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy34, yymsp[0].minor.yy610); } + case 256: /* 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.yy89, yymsp[-8].minor.yy89, &yymsp[-5].minor.yy401, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy224, yymsp[0].minor.yy228); } break; - case 255: /* cmd ::= DROP FUNCTION exists_opt function_name */ -{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy737, &yymsp[0].minor.yy329); } + case 257: /* cmd ::= DROP FUNCTION exists_opt function_name */ +{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy89, &yymsp[0].minor.yy401); } break; - case 258: /* bufsize_opt ::= */ -{ yymsp[1].minor.yy610 = 0; } + case 260: /* bufsize_opt ::= */ +{ yymsp[1].minor.yy228 = 0; } break; - case 259: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ -{ yymsp[-1].minor.yy610 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } + case 261: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ +{ yymsp[-1].minor.yy228 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } break; - case 260: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options into_opt AS query_expression */ -{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-5].minor.yy737, &yymsp[-4].minor.yy329, yymsp[-2].minor.yy212, yymsp[-3].minor.yy212, yymsp[0].minor.yy212); } + case 262: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options into_opt AS query_expression */ +{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-5].minor.yy89, &yymsp[-4].minor.yy401, yymsp[-2].minor.yy248, yymsp[-3].minor.yy248, yymsp[0].minor.yy248); } break; - case 261: /* cmd ::= DROP STREAM exists_opt stream_name */ -{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy737, &yymsp[0].minor.yy329); } + case 263: /* cmd ::= DROP STREAM exists_opt stream_name */ +{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy89, &yymsp[0].minor.yy401); } break; - case 263: /* into_opt ::= INTO full_table_name */ - case 400: /* from_clause_opt ::= FROM table_reference_list */ yytestcase(yyruleno==400); - case 429: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==429); - case 452: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==452); -{ yymsp[-1].minor.yy212 = yymsp[0].minor.yy212; } + case 265: /* into_opt ::= INTO full_table_name */ + case 402: /* from_clause_opt ::= FROM table_reference_list */ yytestcase(yyruleno==402); + case 431: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==431); + case 454: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==454); +{ yymsp[-1].minor.yy248 = yymsp[0].minor.yy248; } break; - case 265: /* stream_options ::= stream_options TRIGGER AT_ONCE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy212)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy212 = yymsp[-2].minor.yy212; } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 267: /* stream_options ::= stream_options TRIGGER AT_ONCE */ +{ ((SStreamOptions*)yymsp[-2].minor.yy248)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy248 = yymsp[-2].minor.yy248; } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 266: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy212)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy212 = yymsp[-2].minor.yy212; } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 268: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ +{ ((SStreamOptions*)yymsp[-2].minor.yy248)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy248 = yymsp[-2].minor.yy248; } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 267: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-3].minor.yy212)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy212)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy212); yylhsminor.yy212 = yymsp[-3].minor.yy212; } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + case 269: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ +{ ((SStreamOptions*)yymsp[-3].minor.yy248)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy248)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy248); yylhsminor.yy248 = yymsp[-3].minor.yy248; } + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 269: /* stream_options ::= stream_options IGNORE EXPIRED */ -{ ((SStreamOptions*)yymsp[-2].minor.yy212)->ignoreExpired = true; yylhsminor.yy212 = yymsp[-2].minor.yy212; } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 271: /* stream_options ::= stream_options IGNORE EXPIRED */ +{ ((SStreamOptions*)yymsp[-2].minor.yy248)->ignoreExpired = true; yylhsminor.yy248 = yymsp[-2].minor.yy248; } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 270: /* cmd ::= KILL CONNECTION NK_INTEGER */ + case 272: /* cmd ::= KILL CONNECTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &yymsp[0].minor.yy0); } break; - case 271: /* cmd ::= KILL QUERY NK_STRING */ + case 273: /* cmd ::= KILL QUERY NK_STRING */ { pCxt->pRootNode = createKillQueryStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 272: /* cmd ::= KILL TRANSACTION NK_INTEGER */ + case 274: /* cmd ::= KILL TRANSACTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &yymsp[0].minor.yy0); } break; - case 273: /* cmd ::= BALANCE VGROUP */ + case 275: /* cmd ::= BALANCE VGROUP */ { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); } break; - case 274: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + case 276: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; - case 275: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ -{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy424); } + case 277: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ +{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy552); } break; - case 276: /* cmd ::= SPLIT VGROUP NK_INTEGER */ + case 278: /* cmd ::= SPLIT VGROUP NK_INTEGER */ { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 277: /* dnode_list ::= DNODE NK_INTEGER */ -{ yymsp[-1].minor.yy424 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + case 279: /* dnode_list ::= DNODE NK_INTEGER */ +{ yymsp[-1].minor.yy552 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } break; - case 279: /* cmd ::= SYNCDB db_name REPLICA */ -{ pCxt->pRootNode = createSyncdbStmt(pCxt, &yymsp[-1].minor.yy329); } + case 281: /* cmd ::= SYNCDB db_name REPLICA */ +{ pCxt->pRootNode = createSyncdbStmt(pCxt, &yymsp[-1].minor.yy401); } break; - case 280: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ -{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy212, yymsp[0].minor.yy212); } + case 282: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ +{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy248, yymsp[0].minor.yy248); } break; - case 282: /* cmd ::= INSERT INTO full_table_name specific_cols_opt query_expression */ -{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-2].minor.yy212, yymsp[-1].minor.yy424, yymsp[0].minor.yy212); } + case 284: /* cmd ::= INSERT INTO full_table_name specific_cols_opt query_expression */ +{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-2].minor.yy248, yymsp[-1].minor.yy552, yymsp[0].minor.yy248); } break; - case 283: /* literal ::= NK_INTEGER */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 285: /* literal ::= NK_INTEGER */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 284: /* literal ::= NK_FLOAT */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 286: /* literal ::= NK_FLOAT */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 285: /* literal ::= NK_STRING */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 287: /* literal ::= NK_STRING */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 286: /* literal ::= NK_BOOL */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 288: /* literal ::= NK_BOOL */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 287: /* literal ::= TIMESTAMP NK_STRING */ -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 289: /* literal ::= TIMESTAMP NK_STRING */ +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 288: /* literal ::= duration_literal */ - case 298: /* signed_literal ::= signed */ yytestcase(yyruleno==298); - case 318: /* expression ::= literal */ yytestcase(yyruleno==318); - case 319: /* expression ::= pseudo_column */ yytestcase(yyruleno==319); - case 320: /* expression ::= column_reference */ yytestcase(yyruleno==320); - case 321: /* expression ::= function_expression */ yytestcase(yyruleno==321); - case 322: /* expression ::= subquery */ yytestcase(yyruleno==322); - case 349: /* function_expression ::= literal_func */ yytestcase(yyruleno==349); - case 391: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==391); - case 395: /* boolean_primary ::= predicate */ yytestcase(yyruleno==395); - case 397: /* common_expression ::= expression */ yytestcase(yyruleno==397); - case 398: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==398); - case 401: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==401); - case 403: /* table_reference ::= table_primary */ yytestcase(yyruleno==403); - case 404: /* table_reference ::= joined_table */ yytestcase(yyruleno==404); - case 408: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==408); - case 458: /* query_expression_body ::= query_primary */ yytestcase(yyruleno==458); - case 461: /* query_primary ::= query_specification */ yytestcase(yyruleno==461); -{ yylhsminor.yy212 = yymsp[0].minor.yy212; } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 290: /* literal ::= duration_literal */ + case 300: /* signed_literal ::= signed */ yytestcase(yyruleno==300); + case 320: /* expression ::= literal */ yytestcase(yyruleno==320); + case 321: /* expression ::= pseudo_column */ yytestcase(yyruleno==321); + case 322: /* expression ::= column_reference */ yytestcase(yyruleno==322); + case 323: /* expression ::= function_expression */ yytestcase(yyruleno==323); + case 324: /* expression ::= subquery */ yytestcase(yyruleno==324); + case 351: /* function_expression ::= literal_func */ yytestcase(yyruleno==351); + case 393: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==393); + case 397: /* boolean_primary ::= predicate */ yytestcase(yyruleno==397); + case 399: /* common_expression ::= expression */ yytestcase(yyruleno==399); + case 400: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==400); + case 403: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==403); + case 405: /* table_reference ::= table_primary */ yytestcase(yyruleno==405); + case 406: /* table_reference ::= joined_table */ yytestcase(yyruleno==406); + case 410: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==410); + case 460: /* query_expression_body ::= query_primary */ yytestcase(yyruleno==460); + case 463: /* query_primary ::= query_specification */ yytestcase(yyruleno==463); +{ yylhsminor.yy248 = yymsp[0].minor.yy248; } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 289: /* literal ::= NULL */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 291: /* literal ::= NULL */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 290: /* literal ::= NK_QUESTION */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 292: /* literal ::= NK_QUESTION */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 291: /* duration_literal ::= NK_VARIABLE */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 293: /* duration_literal ::= NK_VARIABLE */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 292: /* signed ::= NK_INTEGER */ -{ yylhsminor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 294: /* signed ::= NK_INTEGER */ +{ yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 293: /* signed ::= NK_PLUS NK_INTEGER */ -{ yymsp[-1].minor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0); } + case 295: /* signed ::= NK_PLUS NK_INTEGER */ +{ yymsp[-1].minor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0); } break; - case 294: /* signed ::= NK_MINUS NK_INTEGER */ + case 296: /* 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.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); + yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 295: /* signed ::= NK_FLOAT */ -{ yylhsminor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 297: /* signed ::= NK_FLOAT */ +{ yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 296: /* signed ::= NK_PLUS NK_FLOAT */ -{ yymsp[-1].minor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + case 298: /* signed ::= NK_PLUS NK_FLOAT */ +{ yymsp[-1].minor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } break; - case 297: /* signed ::= NK_MINUS NK_FLOAT */ + case 299: /* 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.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); + yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 299: /* signed_literal ::= NK_STRING */ -{ yylhsminor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 301: /* signed_literal ::= NK_STRING */ +{ yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 300: /* signed_literal ::= NK_BOOL */ -{ yylhsminor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 302: /* signed_literal ::= NK_BOOL */ +{ yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 301: /* signed_literal ::= TIMESTAMP NK_STRING */ -{ yymsp[-1].minor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } + case 303: /* signed_literal ::= TIMESTAMP NK_STRING */ +{ yymsp[-1].minor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } break; - case 302: /* signed_literal ::= duration_literal */ - case 304: /* signed_literal ::= literal_func */ yytestcase(yyruleno==304); - case 369: /* star_func_para ::= expression */ yytestcase(yyruleno==369); - case 424: /* select_item ::= common_expression */ yytestcase(yyruleno==424); - case 474: /* search_condition ::= common_expression */ yytestcase(yyruleno==474); -{ yylhsminor.yy212 = releaseRawExprNode(pCxt, yymsp[0].minor.yy212); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 304: /* signed_literal ::= duration_literal */ + case 306: /* signed_literal ::= literal_func */ yytestcase(yyruleno==306); + case 371: /* star_func_para ::= expression */ yytestcase(yyruleno==371); + case 426: /* select_item ::= common_expression */ yytestcase(yyruleno==426); + case 476: /* search_condition ::= common_expression */ yytestcase(yyruleno==476); +{ yylhsminor.yy248 = releaseRawExprNode(pCxt, yymsp[0].minor.yy248); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 303: /* signed_literal ::= NULL */ -{ yylhsminor.yy212 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 305: /* signed_literal ::= NULL */ +{ yylhsminor.yy248 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 323: /* expression ::= NK_LP expression NK_RP */ - case 396: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==396); -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy212)); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 325: /* expression ::= NK_LP expression NK_RP */ + case 398: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==398); +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy248)); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 324: /* expression ::= NK_PLUS expression */ + case 326: /* expression ::= NK_PLUS expression */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy212)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy248)); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 325: /* expression ::= NK_MINUS expression */ + case 327: /* expression ::= NK_MINUS expression */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy212), NULL)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy248), NULL)); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 326: /* expression ::= expression NK_PLUS expression */ + case 328: /* expression ::= expression NK_PLUS expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 327: /* expression ::= expression NK_MINUS expression */ + case 329: /* expression ::= expression NK_MINUS expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 328: /* expression ::= expression NK_STAR expression */ + case 330: /* expression ::= expression NK_STAR expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 329: /* expression ::= expression NK_SLASH expression */ + case 331: /* expression ::= expression NK_SLASH expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 330: /* expression ::= expression NK_REM expression */ + case 332: /* expression ::= expression NK_REM expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 331: /* expression ::= column_reference NK_ARROW NK_STRING */ + case 333: /* expression ::= column_reference NK_ARROW NK_STRING */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 332: /* expression ::= expression NK_BITAND expression */ + case 334: /* expression ::= expression NK_BITAND expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 333: /* expression ::= expression NK_BITOR expression */ + case 335: /* expression ::= expression NK_BITOR expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 336: /* column_reference ::= column_name */ -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy329, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy329)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 338: /* column_reference ::= column_name */ +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy401, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy401)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 337: /* column_reference ::= table_name NK_DOT column_name */ -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy329, createColumnNode(pCxt, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy329)); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 339: /* column_reference ::= table_name NK_DOT column_name */ +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy401, createColumnNode(pCxt, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy401)); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 338: /* pseudo_column ::= ROWTS */ - case 339: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==339); - case 341: /* pseudo_column ::= QSTARTTS */ yytestcase(yyruleno==341); - case 342: /* pseudo_column ::= QENDTS */ yytestcase(yyruleno==342); - case 343: /* pseudo_column ::= WSTARTTS */ yytestcase(yyruleno==343); - case 344: /* pseudo_column ::= WENDTS */ yytestcase(yyruleno==344); - case 345: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==345); - case 351: /* literal_func ::= NOW */ yytestcase(yyruleno==351); -{ yylhsminor.yy212 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 340: /* pseudo_column ::= ROWTS */ + case 341: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==341); + case 343: /* pseudo_column ::= QSTARTTS */ yytestcase(yyruleno==343); + case 344: /* pseudo_column ::= QENDTS */ yytestcase(yyruleno==344); + case 345: /* pseudo_column ::= WSTARTTS */ yytestcase(yyruleno==345); + case 346: /* pseudo_column ::= WENDTS */ yytestcase(yyruleno==346); + case 347: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==347); + case 353: /* literal_func ::= NOW */ yytestcase(yyruleno==353); +{ yylhsminor.yy248 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 340: /* pseudo_column ::= table_name NK_DOT TBNAME */ -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy329)))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 342: /* pseudo_column ::= table_name NK_DOT TBNAME */ +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy401)))); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 346: /* function_expression ::= function_name NK_LP expression_list NK_RP */ - case 347: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==347); -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy329, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy329, yymsp[-1].minor.yy424)); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + case 348: /* function_expression ::= function_name NK_LP expression_list NK_RP */ + case 349: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==349); +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy401, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy401, yymsp[-1].minor.yy552)); } + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 348: /* function_expression ::= CAST NK_LP expression AS type_name NK_RP */ -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), yymsp[-1].minor.yy34)); } - yymsp[-5].minor.yy212 = yylhsminor.yy212; + case 350: /* function_expression ::= CAST NK_LP expression AS type_name NK_RP */ +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), yymsp[-1].minor.yy224)); } + yymsp[-5].minor.yy248 = yylhsminor.yy248; break; - case 350: /* literal_func ::= noarg_func NK_LP NK_RP */ -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy329, NULL)); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 352: /* literal_func ::= noarg_func NK_LP NK_RP */ +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy401, NULL)); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 365: /* star_func_para_list ::= NK_STAR */ -{ yylhsminor.yy424 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 367: /* star_func_para_list ::= NK_STAR */ +{ yylhsminor.yy552 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy552 = yylhsminor.yy552; break; - case 370: /* star_func_para ::= table_name NK_DOT NK_STAR */ - case 427: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==427); -{ yylhsminor.yy212 = createColumnNode(pCxt, &yymsp[-2].minor.yy329, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 372: /* star_func_para ::= table_name NK_DOT NK_STAR */ + case 429: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==429); +{ yylhsminor.yy248 = createColumnNode(pCxt, &yymsp[-2].minor.yy401, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 371: /* predicate ::= expression compare_op expression */ - case 376: /* predicate ::= expression in_op in_predicate_value */ yytestcase(yyruleno==376); + case 373: /* predicate ::= expression compare_op expression */ + case 378: /* predicate ::= expression in_op in_predicate_value */ yytestcase(yyruleno==378); { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy290, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy716, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 372: /* predicate ::= expression BETWEEN expression AND expression */ + case 374: /* predicate ::= expression BETWEEN expression AND expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy212), releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy248), releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-4].minor.yy212 = yylhsminor.yy212; + yymsp[-4].minor.yy248 = yylhsminor.yy248; break; - case 373: /* predicate ::= expression NOT BETWEEN expression AND expression */ + case 375: /* predicate ::= expression NOT BETWEEN expression AND expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy212), releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy248), releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-5].minor.yy212 = yylhsminor.yy212; + yymsp[-5].minor.yy248 = yylhsminor.yy248; break; - case 374: /* predicate ::= expression IS NULL */ + case 376: /* predicate ::= expression IS NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), NULL)); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 375: /* predicate ::= expression IS NOT NULL */ + case 377: /* predicate ::= expression IS NOT NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), NULL)); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 377: /* compare_op ::= NK_LT */ -{ yymsp[0].minor.yy290 = OP_TYPE_LOWER_THAN; } + case 379: /* compare_op ::= NK_LT */ +{ yymsp[0].minor.yy716 = OP_TYPE_LOWER_THAN; } break; - case 378: /* compare_op ::= NK_GT */ -{ yymsp[0].minor.yy290 = OP_TYPE_GREATER_THAN; } + case 380: /* compare_op ::= NK_GT */ +{ yymsp[0].minor.yy716 = OP_TYPE_GREATER_THAN; } break; - case 379: /* compare_op ::= NK_LE */ -{ yymsp[0].minor.yy290 = OP_TYPE_LOWER_EQUAL; } + case 381: /* compare_op ::= NK_LE */ +{ yymsp[0].minor.yy716 = OP_TYPE_LOWER_EQUAL; } break; - case 380: /* compare_op ::= NK_GE */ -{ yymsp[0].minor.yy290 = OP_TYPE_GREATER_EQUAL; } + case 382: /* compare_op ::= NK_GE */ +{ yymsp[0].minor.yy716 = OP_TYPE_GREATER_EQUAL; } break; - case 381: /* compare_op ::= NK_NE */ -{ yymsp[0].minor.yy290 = OP_TYPE_NOT_EQUAL; } + case 383: /* compare_op ::= NK_NE */ +{ yymsp[0].minor.yy716 = OP_TYPE_NOT_EQUAL; } break; - case 382: /* compare_op ::= NK_EQ */ -{ yymsp[0].minor.yy290 = OP_TYPE_EQUAL; } + case 384: /* compare_op ::= NK_EQ */ +{ yymsp[0].minor.yy716 = OP_TYPE_EQUAL; } break; - case 383: /* compare_op ::= LIKE */ -{ yymsp[0].minor.yy290 = OP_TYPE_LIKE; } + case 385: /* compare_op ::= LIKE */ +{ yymsp[0].minor.yy716 = OP_TYPE_LIKE; } break; - case 384: /* compare_op ::= NOT LIKE */ -{ yymsp[-1].minor.yy290 = OP_TYPE_NOT_LIKE; } + case 386: /* compare_op ::= NOT LIKE */ +{ yymsp[-1].minor.yy716 = OP_TYPE_NOT_LIKE; } break; - case 385: /* compare_op ::= MATCH */ -{ yymsp[0].minor.yy290 = OP_TYPE_MATCH; } + case 387: /* compare_op ::= MATCH */ +{ yymsp[0].minor.yy716 = OP_TYPE_MATCH; } break; - case 386: /* compare_op ::= NMATCH */ -{ yymsp[0].minor.yy290 = OP_TYPE_NMATCH; } + case 388: /* compare_op ::= NMATCH */ +{ yymsp[0].minor.yy716 = OP_TYPE_NMATCH; } break; - case 387: /* compare_op ::= CONTAINS */ -{ yymsp[0].minor.yy290 = OP_TYPE_JSON_CONTAINS; } + case 389: /* compare_op ::= CONTAINS */ +{ yymsp[0].minor.yy716 = OP_TYPE_JSON_CONTAINS; } break; - case 388: /* in_op ::= IN */ -{ yymsp[0].minor.yy290 = OP_TYPE_IN; } + case 390: /* in_op ::= IN */ +{ yymsp[0].minor.yy716 = OP_TYPE_IN; } break; - case 389: /* in_op ::= NOT IN */ -{ yymsp[-1].minor.yy290 = OP_TYPE_NOT_IN; } + case 391: /* in_op ::= NOT IN */ +{ yymsp[-1].minor.yy716 = OP_TYPE_NOT_IN; } break; - case 390: /* in_predicate_value ::= NK_LP expression_list NK_RP */ -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy424)); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 392: /* in_predicate_value ::= NK_LP expression_list NK_RP */ +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy552)); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 392: /* boolean_value_expression ::= NOT boolean_primary */ + case 394: /* boolean_value_expression ::= NOT boolean_primary */ { - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy212), NULL)); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy248), NULL)); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 393: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + case 395: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 394: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + case 396: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy212); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy212); - yylhsminor.yy212 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy248); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy248); + yylhsminor.yy248 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 402: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ -{ yylhsminor.yy212 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy212, yymsp[0].minor.yy212, NULL); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 404: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ +{ yylhsminor.yy248 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy248, yymsp[0].minor.yy248, NULL); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 405: /* table_primary ::= table_name alias_opt */ -{ yylhsminor.yy212 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy329, &yymsp[0].minor.yy329); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 407: /* table_primary ::= table_name alias_opt */ +{ yylhsminor.yy248 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy401, &yymsp[0].minor.yy401); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 406: /* table_primary ::= db_name NK_DOT table_name alias_opt */ -{ yylhsminor.yy212 = createRealTableNode(pCxt, &yymsp[-3].minor.yy329, &yymsp[-1].minor.yy329, &yymsp[0].minor.yy329); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + case 408: /* table_primary ::= db_name NK_DOT table_name alias_opt */ +{ yylhsminor.yy248 = createRealTableNode(pCxt, &yymsp[-3].minor.yy401, &yymsp[-1].minor.yy401, &yymsp[0].minor.yy401); } + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 407: /* table_primary ::= subquery alias_opt */ -{ yylhsminor.yy212 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy212), &yymsp[0].minor.yy329); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 409: /* table_primary ::= subquery alias_opt */ +{ yylhsminor.yy248 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy248), &yymsp[0].minor.yy401); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 409: /* alias_opt ::= */ -{ yymsp[1].minor.yy329 = nil_token; } + case 411: /* alias_opt ::= */ +{ yymsp[1].minor.yy401 = nil_token; } break; - case 410: /* alias_opt ::= table_alias */ -{ yylhsminor.yy329 = yymsp[0].minor.yy329; } - yymsp[0].minor.yy329 = yylhsminor.yy329; + case 412: /* alias_opt ::= table_alias */ +{ yylhsminor.yy401 = yymsp[0].minor.yy401; } + yymsp[0].minor.yy401 = yylhsminor.yy401; break; - case 411: /* alias_opt ::= AS table_alias */ -{ yymsp[-1].minor.yy329 = yymsp[0].minor.yy329; } + case 413: /* alias_opt ::= AS table_alias */ +{ yymsp[-1].minor.yy401 = yymsp[0].minor.yy401; } break; - case 412: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - case 413: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==413); -{ yymsp[-2].minor.yy212 = yymsp[-1].minor.yy212; } + case 414: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + case 415: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==415); +{ yymsp[-2].minor.yy248 = yymsp[-1].minor.yy248; } break; - case 414: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ -{ yylhsminor.yy212 = createJoinTableNode(pCxt, yymsp[-4].minor.yy162, yymsp[-5].minor.yy212, yymsp[-2].minor.yy212, yymsp[0].minor.yy212); } - yymsp[-5].minor.yy212 = yylhsminor.yy212; + case 416: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ +{ yylhsminor.yy248 = createJoinTableNode(pCxt, yymsp[-4].minor.yy52, yymsp[-5].minor.yy248, yymsp[-2].minor.yy248, yymsp[0].minor.yy248); } + yymsp[-5].minor.yy248 = yylhsminor.yy248; break; - case 415: /* join_type ::= */ -{ yymsp[1].minor.yy162 = JOIN_TYPE_INNER; } + case 417: /* join_type ::= */ +{ yymsp[1].minor.yy52 = JOIN_TYPE_INNER; } break; - case 416: /* join_type ::= INNER */ -{ yymsp[0].minor.yy162 = JOIN_TYPE_INNER; } + case 418: /* join_type ::= INNER */ +{ yymsp[0].minor.yy52 = JOIN_TYPE_INNER; } break; - case 417: /* 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 419: /* 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.yy212 = createSelectStmt(pCxt, yymsp[-10].minor.yy737, yymsp[-9].minor.yy424, yymsp[-8].minor.yy212); - yymsp[-11].minor.yy212 = addWhereClause(pCxt, yymsp[-11].minor.yy212, yymsp[-7].minor.yy212); - yymsp[-11].minor.yy212 = addPartitionByClause(pCxt, yymsp[-11].minor.yy212, yymsp[-6].minor.yy424); - yymsp[-11].minor.yy212 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy212, yymsp[-2].minor.yy212); - yymsp[-11].minor.yy212 = addGroupByClause(pCxt, yymsp[-11].minor.yy212, yymsp[-1].minor.yy424); - yymsp[-11].minor.yy212 = addHavingClause(pCxt, yymsp[-11].minor.yy212, yymsp[0].minor.yy212); - yymsp[-11].minor.yy212 = addRangeClause(pCxt, yymsp[-11].minor.yy212, yymsp[-5].minor.yy212); - yymsp[-11].minor.yy212 = addEveryClause(pCxt, yymsp[-11].minor.yy212, yymsp[-4].minor.yy212); - yymsp[-11].minor.yy212 = addFillClause(pCxt, yymsp[-11].minor.yy212, yymsp[-3].minor.yy212); + yymsp[-11].minor.yy248 = createSelectStmt(pCxt, yymsp[-10].minor.yy89, yymsp[-9].minor.yy552, yymsp[-8].minor.yy248); + yymsp[-11].minor.yy248 = addWhereClause(pCxt, yymsp[-11].minor.yy248, yymsp[-7].minor.yy248); + yymsp[-11].minor.yy248 = addPartitionByClause(pCxt, yymsp[-11].minor.yy248, yymsp[-6].minor.yy552); + yymsp[-11].minor.yy248 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy248, yymsp[-2].minor.yy248); + yymsp[-11].minor.yy248 = addGroupByClause(pCxt, yymsp[-11].minor.yy248, yymsp[-1].minor.yy552); + yymsp[-11].minor.yy248 = addHavingClause(pCxt, yymsp[-11].minor.yy248, yymsp[0].minor.yy248); + yymsp[-11].minor.yy248 = addRangeClause(pCxt, yymsp[-11].minor.yy248, yymsp[-5].minor.yy248); + yymsp[-11].minor.yy248 = addEveryClause(pCxt, yymsp[-11].minor.yy248, yymsp[-4].minor.yy248); + yymsp[-11].minor.yy248 = addFillClause(pCxt, yymsp[-11].minor.yy248, yymsp[-3].minor.yy248); } break; - case 420: /* set_quantifier_opt ::= ALL */ -{ yymsp[0].minor.yy737 = false; } + case 422: /* set_quantifier_opt ::= ALL */ +{ yymsp[0].minor.yy89 = false; } break; - case 423: /* select_item ::= NK_STAR */ -{ yylhsminor.yy212 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy212 = yylhsminor.yy212; + case 425: /* select_item ::= NK_STAR */ +{ yylhsminor.yy248 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy248 = yylhsminor.yy248; break; - case 425: /* select_item ::= common_expression column_alias */ -{ yylhsminor.yy212 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy212), &yymsp[0].minor.yy329); } - yymsp[-1].minor.yy212 = yylhsminor.yy212; + case 427: /* select_item ::= common_expression column_alias */ +{ yylhsminor.yy248 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy248), &yymsp[0].minor.yy401); } + yymsp[-1].minor.yy248 = yylhsminor.yy248; break; - case 426: /* select_item ::= common_expression AS column_alias */ -{ yylhsminor.yy212 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), &yymsp[0].minor.yy329); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 428: /* select_item ::= common_expression AS column_alias */ +{ yylhsminor.yy248 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), &yymsp[0].minor.yy401); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 431: /* partition_by_clause_opt ::= PARTITION BY expression_list */ - case 448: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==448); - case 464: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==464); -{ yymsp[-2].minor.yy424 = yymsp[0].minor.yy424; } + case 433: /* partition_by_clause_opt ::= PARTITION BY expression_list */ + case 450: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==450); + case 466: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==466); +{ yymsp[-2].minor.yy552 = yymsp[0].minor.yy552; } break; - case 433: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ -{ yymsp[-5].minor.yy212 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), releaseRawExprNode(pCxt, yymsp[-1].minor.yy212)); } + case 435: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ +{ yymsp[-5].minor.yy248 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), releaseRawExprNode(pCxt, yymsp[-1].minor.yy248)); } break; - case 434: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */ -{ yymsp[-3].minor.yy212 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy212)); } + case 436: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */ +{ yymsp[-3].minor.yy248 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy248)); } break; - case 435: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-5].minor.yy212 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), NULL, yymsp[-1].minor.yy212, yymsp[0].minor.yy212); } + case 437: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ +{ yymsp[-5].minor.yy248 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), NULL, yymsp[-1].minor.yy248, yymsp[0].minor.yy248); } break; - case 436: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-7].minor.yy212 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy212), releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), yymsp[-1].minor.yy212, yymsp[0].minor.yy212); } + case 438: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ +{ yymsp[-7].minor.yy248 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy248), releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), yymsp[-1].minor.yy248, yymsp[0].minor.yy248); } break; - case 438: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ - case 456: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==456); -{ yymsp[-3].minor.yy212 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy212); } + case 440: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ + case 458: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==458); +{ yymsp[-3].minor.yy248 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy248); } break; - case 440: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ -{ yymsp[-3].minor.yy212 = createFillNode(pCxt, yymsp[-1].minor.yy294, NULL); } + case 442: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ +{ yymsp[-3].minor.yy248 = createFillNode(pCxt, yymsp[-1].minor.yy582, NULL); } break; - case 441: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ -{ yymsp[-5].minor.yy212 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy424)); } + case 443: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ +{ yymsp[-5].minor.yy248 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy552)); } break; - case 442: /* fill_mode ::= NONE */ -{ yymsp[0].minor.yy294 = FILL_MODE_NONE; } + case 444: /* fill_mode ::= NONE */ +{ yymsp[0].minor.yy582 = FILL_MODE_NONE; } break; - case 443: /* fill_mode ::= PREV */ -{ yymsp[0].minor.yy294 = FILL_MODE_PREV; } + case 445: /* fill_mode ::= PREV */ +{ yymsp[0].minor.yy582 = FILL_MODE_PREV; } break; - case 444: /* fill_mode ::= NULL */ -{ yymsp[0].minor.yy294 = FILL_MODE_NULL; } + case 446: /* fill_mode ::= NULL */ +{ yymsp[0].minor.yy582 = FILL_MODE_NULL; } break; - case 445: /* fill_mode ::= LINEAR */ -{ yymsp[0].minor.yy294 = FILL_MODE_LINEAR; } + case 447: /* fill_mode ::= LINEAR */ +{ yymsp[0].minor.yy582 = FILL_MODE_LINEAR; } break; - case 446: /* fill_mode ::= NEXT */ -{ yymsp[0].minor.yy294 = FILL_MODE_NEXT; } + case 448: /* fill_mode ::= NEXT */ +{ yymsp[0].minor.yy582 = FILL_MODE_NEXT; } break; - case 449: /* group_by_list ::= expression */ -{ yylhsminor.yy424 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 451: /* group_by_list ::= expression */ +{ yylhsminor.yy552 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } + yymsp[0].minor.yy552 = yylhsminor.yy552; break; - case 450: /* group_by_list ::= group_by_list NK_COMMA expression */ -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy212))); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; + case 452: /* group_by_list ::= group_by_list NK_COMMA expression */ +{ yylhsminor.yy552 = addNodeToList(pCxt, yymsp[-2].minor.yy552, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy248))); } + yymsp[-2].minor.yy552 = yylhsminor.yy552; break; - case 454: /* range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */ -{ yymsp[-5].minor.yy212 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy212), releaseRawExprNode(pCxt, yymsp[-1].minor.yy212)); } + case 456: /* range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */ +{ yymsp[-5].minor.yy248 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy248), releaseRawExprNode(pCxt, yymsp[-1].minor.yy248)); } break; - case 457: /* query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */ + case 459: /* query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */ { - yylhsminor.yy212 = addOrderByClause(pCxt, yymsp[-3].minor.yy212, yymsp[-2].minor.yy424); - yylhsminor.yy212 = addSlimitClause(pCxt, yylhsminor.yy212, yymsp[-1].minor.yy212); - yylhsminor.yy212 = addLimitClause(pCxt, yylhsminor.yy212, yymsp[0].minor.yy212); + yylhsminor.yy248 = addOrderByClause(pCxt, yymsp[-3].minor.yy248, yymsp[-2].minor.yy552); + yylhsminor.yy248 = addSlimitClause(pCxt, yylhsminor.yy248, yymsp[-1].minor.yy248); + yylhsminor.yy248 = addLimitClause(pCxt, yylhsminor.yy248, yymsp[0].minor.yy248); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 459: /* query_expression_body ::= query_expression_body UNION ALL query_expression_body */ -{ yylhsminor.yy212 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy212, yymsp[0].minor.yy212); } - yymsp[-3].minor.yy212 = yylhsminor.yy212; + case 461: /* query_expression_body ::= query_expression_body UNION ALL query_expression_body */ +{ yylhsminor.yy248 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy248, yymsp[0].minor.yy248); } + yymsp[-3].minor.yy248 = yylhsminor.yy248; break; - case 460: /* query_expression_body ::= query_expression_body UNION query_expression_body */ -{ yylhsminor.yy212 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy212, yymsp[0].minor.yy212); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 462: /* query_expression_body ::= query_expression_body UNION query_expression_body */ +{ yylhsminor.yy248 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy248, yymsp[0].minor.yy248); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 462: /* query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */ -{ yymsp[-5].minor.yy212 = yymsp[-4].minor.yy212; } - yy_destructor(yypParser,367,&yymsp[-3].minor); - yy_destructor(yypParser,368,&yymsp[-2].minor); - yy_destructor(yypParser,369,&yymsp[-1].minor); + case 464: /* query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */ +{ yymsp[-5].minor.yy248 = yymsp[-4].minor.yy248; } + yy_destructor(yypParser,368,&yymsp[-3].minor); + yy_destructor(yypParser,369,&yymsp[-2].minor); + yy_destructor(yypParser,370,&yymsp[-1].minor); break; - case 466: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ - case 470: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==470); -{ yymsp[-1].minor.yy212 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } + case 468: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ + case 472: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==472); +{ yymsp[-1].minor.yy248 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } break; - case 467: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - case 471: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==471); -{ yymsp[-3].minor.yy212 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } + case 469: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + case 473: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==473); +{ yymsp[-3].minor.yy248 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; - case 468: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - case 472: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==472); -{ yymsp[-3].minor.yy212 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } + case 470: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + case 474: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==474); +{ yymsp[-3].minor.yy248 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } break; - case 473: /* subquery ::= NK_LP query_expression NK_RP */ -{ yylhsminor.yy212 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy212); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 475: /* subquery ::= NK_LP query_expression NK_RP */ +{ yylhsminor.yy248 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy248); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 477: /* sort_specification ::= expression ordering_specification_opt null_ordering_opt */ -{ yylhsminor.yy212 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy212), yymsp[-1].minor.yy188, yymsp[0].minor.yy607); } - yymsp[-2].minor.yy212 = yylhsminor.yy212; + case 479: /* sort_specification ::= expression ordering_specification_opt null_ordering_opt */ +{ yylhsminor.yy248 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy248), yymsp[-1].minor.yy482, yymsp[0].minor.yy345); } + yymsp[-2].minor.yy248 = yylhsminor.yy248; break; - case 478: /* ordering_specification_opt ::= */ -{ yymsp[1].minor.yy188 = ORDER_ASC; } + case 480: /* ordering_specification_opt ::= */ +{ yymsp[1].minor.yy482 = ORDER_ASC; } break; - case 479: /* ordering_specification_opt ::= ASC */ -{ yymsp[0].minor.yy188 = ORDER_ASC; } + case 481: /* ordering_specification_opt ::= ASC */ +{ yymsp[0].minor.yy482 = ORDER_ASC; } break; - case 480: /* ordering_specification_opt ::= DESC */ -{ yymsp[0].minor.yy188 = ORDER_DESC; } + case 482: /* ordering_specification_opt ::= DESC */ +{ yymsp[0].minor.yy482 = ORDER_DESC; } break; - case 481: /* null_ordering_opt ::= */ -{ yymsp[1].minor.yy607 = NULL_ORDER_DEFAULT; } + case 483: /* null_ordering_opt ::= */ +{ yymsp[1].minor.yy345 = NULL_ORDER_DEFAULT; } break; - case 482: /* null_ordering_opt ::= NULLS FIRST */ -{ yymsp[-1].minor.yy607 = NULL_ORDER_FIRST; } + case 484: /* null_ordering_opt ::= NULLS FIRST */ +{ yymsp[-1].minor.yy345 = NULL_ORDER_FIRST; } break; - case 483: /* null_ordering_opt ::= NULLS LAST */ -{ yymsp[-1].minor.yy607 = NULL_ORDER_LAST; } + case 485: /* null_ordering_opt ::= NULLS LAST */ +{ yymsp[-1].minor.yy345 = NULL_ORDER_LAST; } break; default: break; diff --git a/source/libs/parser/test/parInitialCTest.cpp b/source/libs/parser/test/parInitialCTest.cpp index 10921a2082..b39a066ba1 100644 --- a/source/libs/parser/test/parInitialCTest.cpp +++ b/source/libs/parser/test/parInitialCTest.cpp @@ -77,6 +77,7 @@ TEST_F(ParserInitialCTest, createDatabase) { expect.ignoreExist = igExists; expect.buffer = TSDB_DEFAULT_BUFFER_PER_VNODE; expect.cacheLastRow = TSDB_DEFAULT_CACHE_LAST_ROW; + expect.lastRowMem = TSDB_DEFAULT_LAST_ROW_MEM; expect.compression = TSDB_DEFAULT_COMP_LEVEL; expect.daysPerFile = TSDB_DEFAULT_DAYS_PER_FILE; expect.fsyncPeriod = TSDB_DEFAULT_FSYNC_PERIOD; @@ -97,7 +98,8 @@ TEST_F(ParserInitialCTest, createDatabase) { }; auto setDbBufferFunc = [&](int32_t buffer) { expect.buffer = buffer; }; - auto setDbCachelastFunc = [&](int8_t CACHELAST) { expect.cacheLastRow = CACHELAST; }; + auto setDbCachelastFunc = [&](int8_t cachelast) { expect.cacheLastRow = cachelast; }; + auto setDbCachelastSize = [&](int8_t cachelastSize) { expect.lastRowMem = cachelastSize; }; auto setDbCompressionFunc = [&](int8_t compressionLevel) { expect.compression = compressionLevel; }; auto setDbDaysFunc = [&](int32_t daysPerFile) { expect.daysPerFile = daysPerFile; }; auto setDbFsyncFunc = [&](int32_t fsyncPeriod) { expect.fsyncPeriod = fsyncPeriod; }; @@ -154,6 +156,7 @@ TEST_F(ParserInitialCTest, createDatabase) { ASSERT_EQ(req.replications, expect.replications); ASSERT_EQ(req.strict, expect.strict); ASSERT_EQ(req.cacheLastRow, expect.cacheLastRow); + ASSERT_EQ(req.lastRowMem, expect.lastRowMem); // ASSERT_EQ(req.schemaless, expect.schemaless); ASSERT_EQ(req.ignoreExist, expect.ignoreExist); ASSERT_EQ(req.numOfRetensions, expect.numOfRetensions); @@ -179,6 +182,7 @@ TEST_F(ParserInitialCTest, createDatabase) { setCreateDbReqFunc("wxy_db", 1); setDbBufferFunc(64); setDbCachelastFunc(2); + setDbCachelastSize(20); setDbCompressionFunc(1); setDbDaysFunc(100 * 1440); setDbFsyncFunc(100); @@ -200,6 +204,7 @@ TEST_F(ParserInitialCTest, createDatabase) { run("CREATE DATABASE IF NOT EXISTS wxy_db " "BUFFER 64 " "CACHELAST 2 " + "CACHELASTSIZE 20 " "COMP 1 " "DURATION 100 " "FSYNC 100 " From d625cc2e4784476f27b34d27b18c57ec47788974 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 6 Jul 2022 21:00:31 +0800 Subject: [PATCH 04/27] feat: insert from query --- include/common/tdatablock.h | 2 - include/common/tmsg.h | 1 + include/libs/executor/dataSinkMgt.h | 2 +- source/common/src/tdatablock.c | 72 ----------------------- source/dnode/vnode/src/vnd/vnodeSvr.c | 2 +- source/libs/executor/src/dataInserter.c | 71 ++++++++++++++++++++++ source/libs/executor/src/dataSinkMgt.c | 2 +- source/libs/qworker/inc/qwInt.h | 1 + source/libs/qworker/inc/qwMsg.h | 2 +- source/libs/qworker/src/qwMsg.c | 11 ++-- source/libs/qworker/src/qworker.c | 10 +++- source/libs/qworker/test/qworkerTests.cpp | 2 +- 12 files changed, 92 insertions(+), 86 deletions(-) diff --git a/include/common/tdatablock.h b/include/common/tdatablock.h index 1c822c6c05..8b64287033 100644 --- a/include/common/tdatablock.h +++ b/include/common/tdatablock.h @@ -246,8 +246,6 @@ int32_t buildSubmitReqFromDataBlock(SSubmitReq** pReq, const SArray* pDataBlocks char* buildCtbNameByGroupId(const char* stbName, uint64_t groupId); -SSubmitReq* dataBlockToSubmit(const SArray* pBlocks, const STSchema* pTSchema, int64_t uid, int64_t suid, int32_t vgId); - static FORCE_INLINE int32_t blockGetEncodeSize(const SSDataBlock* pBlock) { return blockDataGetSerialMetaSize(taosArrayGetSize(pBlock->pDataBlock)) + blockDataGetSize(pBlock); } diff --git a/include/common/tmsg.h b/include/common/tmsg.h index aedf0680ee..9f067db7ba 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -665,6 +665,7 @@ typedef struct { char tbFName[TSDB_TABLE_FNAME_LEN]; int32_t sversion; int32_t tversion; + int64_t affectedRows; } SQueryTableRsp; int32_t tSerializeSQueryTableRsp(void* buf, int32_t bufLen, SQueryTableRsp* pRsp); diff --git a/include/libs/executor/dataSinkMgt.h b/include/libs/executor/dataSinkMgt.h index ca2c49bfb5..8d5a8abcb4 100644 --- a/include/libs/executor/dataSinkMgt.h +++ b/include/libs/executor/dataSinkMgt.h @@ -100,7 +100,7 @@ void dsEndPut(DataSinkHandle handle, uint64_t useconds); * @param handle * @param pLen data length */ -void dsGetDataLength(DataSinkHandle handle, int32_t* pLen, bool* pQueryEnd); +void dsGetDataLength(DataSinkHandle handle, int64_t* pLen, bool* pQueryEnd); /** * Get data, the caller needs to allocate data memory. diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 757235e5aa..20e4b5b084 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -2106,75 +2106,3 @@ const char* blockDecode(SSDataBlock* pBlock, int32_t numOfCols, int32_t numOfRow return pStart; } - -SSubmitReq* dataBlockToSubmit(const SArray* pBlocks, const STSchema* pTSchema, int64_t uid, int64_t suid, int32_t vgId) { - SSubmitReq* ret = NULL; - int32_t sz = taosArrayGetSize(pBlocks); - - // cal size - int32_t cap = sizeof(SSubmitReq); - for (int32_t i = 0; i < sz; i++) { - SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); - int32_t rows = pDataBlock->info.rows; - // TODO min - int32_t rowSize = pDataBlock->info.rowSize; - int32_t maxLen = TD_ROW_MAX_BYTES_FROM_SCHEMA(pTSchema); - - cap += sizeof(SSubmitBlk) + rows * maxLen; - } - - // assign data - // TODO - ret = rpcMallocCont(cap); - ret->header.vgId = vgId; - ret->version = htonl(1); - ret->length = sizeof(SSubmitReq); - ret->numOfBlocks = htonl(sz); - - SSubmitBlk* blkHead = POINTER_SHIFT(ret, sizeof(SSubmitReq)); - for (int32_t i = 0; i < sz; i++) { - SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); - - blkHead->numOfRows = htons(pDataBlock->info.rows); - blkHead->sversion = htonl(pTSchema->version); - // TODO - blkHead->suid = htobe64(suid); - blkHead->uid = htobe64(uid); - blkHead->schemaLen = htonl(0); - - int32_t rows = pDataBlock->info.rows; - int32_t dataLen = 0; - STSRow* rowData = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk)); - for (int32_t j = 0; j < rows; j++) { - SRowBuilder rb = {0}; - tdSRowInit(&rb, pTSchema->version); - tdSRowSetTpInfo(&rb, pTSchema->numOfCols, pTSchema->flen); - tdSRowResetBuf(&rb, rowData); - - for (int32_t k = 0; k < pTSchema->numOfCols; k++) { - const STColumn* pColumn = &pTSchema->columns[k]; - SColumnInfoData* pColData = taosArrayGet(pDataBlock->pDataBlock, k); - if (colDataIsNull_s(pColData, j)) { - tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NONE, NULL, false, pColumn->offset, k); - } else { - void* data = colDataGetData(pColData, j); - tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NORM, data, true, pColumn->offset, k); - } - } - int32_t rowLen = TD_ROW_LEN(rowData); - rowData = POINTER_SHIFT(rowData, rowLen); - dataLen += rowLen; - } - - blkHead->dataLen = htonl(dataLen); - - ret->length += sizeof(SSubmitBlk) + dataLen; - blkHead = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk) + dataLen); - } - - ret->length = htonl(ret->length); - - return ret; -} - - diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index e92dad3c6d..023c98a7ed 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -247,7 +247,7 @@ int32_t vnodeProcessFetchMsg(SVnode *pVnode, SRpcMsg *pMsg, SQueueInfo *pInfo) { case TDMT_SCH_FETCH: return qWorkerProcessFetchMsg(pVnode, pVnode->pQuery, pMsg, 0); case TDMT_SCH_FETCH_RSP: - return qWorkerProcessFetchRsp(pVnode, pVnode->pQuery, pMsg, 0); + return qWorkerProcessRspMsg(pVnode, pVnode->pQuery, pMsg, 0); case TDMT_SCH_CANCEL_TASK: return qWorkerProcessCancelMsg(pVnode, pVnode->pQuery, pMsg, 0); case TDMT_SCH_DROP_TASK: diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index 26c8d9ede6..5f7ebde4c9 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -136,6 +136,77 @@ static int32_t sendSubmitRequest(SDataInserterHandle* pInserter, SSubmitReq* pMs } +SSubmitReq* dataBlockToSubmit(const SArray* pBlocks, const STSchema* pTSchema, int64_t uid, int64_t suid, int32_t vgId) { + SSubmitReq* ret = NULL; + int32_t sz = taosArrayGetSize(pBlocks); + + // cal size + int32_t cap = sizeof(SSubmitReq); + for (int32_t i = 0; i < sz; i++) { + SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); + int32_t rows = pDataBlock->info.rows; + // TODO min + int32_t rowSize = pDataBlock->info.rowSize; + int32_t maxLen = TD_ROW_MAX_BYTES_FROM_SCHEMA(pTSchema); + + cap += sizeof(SSubmitBlk) + rows * maxLen; + } + + // assign data + // TODO + ret = rpcMallocCont(cap); + ret->header.vgId = vgId; + ret->version = htonl(1); + ret->length = sizeof(SSubmitReq); + ret->numOfBlocks = htonl(sz); + + SSubmitBlk* blkHead = POINTER_SHIFT(ret, sizeof(SSubmitReq)); + for (int32_t i = 0; i < sz; i++) { + SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); + + blkHead->numOfRows = htons(pDataBlock->info.rows); + blkHead->sversion = htonl(pTSchema->version); + // TODO + blkHead->suid = htobe64(suid); + blkHead->uid = htobe64(uid); + blkHead->schemaLen = htonl(0); + + int32_t rows = pDataBlock->info.rows; + int32_t dataLen = 0; + STSRow* rowData = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk)); + for (int32_t j = 0; j < rows; j++) { + SRowBuilder rb = {0}; + tdSRowInit(&rb, pTSchema->version); + tdSRowSetTpInfo(&rb, pTSchema->numOfCols, pTSchema->flen); + tdSRowResetBuf(&rb, rowData); + + for (int32_t k = 0; k < pTSchema->numOfCols; k++) { + const STColumn* pColumn = &pTSchema->columns[k]; + SColumnInfoData* pColData = taosArrayGet(pDataBlock->pDataBlock, k); + if (colDataIsNull_s(pColData, j)) { + tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NONE, NULL, false, pColumn->offset, k); + } else { + void* data = colDataGetData(pColData, j); + tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NORM, data, true, pColumn->offset, k); + } + } + int32_t rowLen = TD_ROW_LEN(rowData); + rowData = POINTER_SHIFT(rowData, rowLen); + dataLen += rowLen; + } + + blkHead->dataLen = htonl(dataLen); + + ret->length += sizeof(SSubmitBlk) + dataLen; + blkHead = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk) + dataLen); + } + + ret->length = htonl(ret->length); + + return ret; +} + + static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue) { SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; taosArrayPush(pInserter->pDataBlocks, pInput->pData); diff --git a/source/libs/executor/src/dataSinkMgt.c b/source/libs/executor/src/dataSinkMgt.c index 21f4ca24f1..0aa5e6266c 100644 --- a/source/libs/executor/src/dataSinkMgt.c +++ b/source/libs/executor/src/dataSinkMgt.c @@ -56,7 +56,7 @@ void dsEndPut(DataSinkHandle handle, uint64_t useconds) { return pHandleImpl->fEndPut(pHandleImpl, useconds); } -void dsGetDataLength(DataSinkHandle handle, int32_t* pLen, bool* pQueryEnd) { +void dsGetDataLength(DataSinkHandle handle, int64_t* pLen, bool* pQueryEnd) { SDataSinkHandle* pHandleImpl = (SDataSinkHandle*)handle; pHandleImpl->fGetLen(pHandleImpl, pLen, pQueryEnd); } diff --git a/source/libs/qworker/inc/qwInt.h b/source/libs/qworker/inc/qwInt.h index 4c92611a54..977547c9cd 100644 --- a/source/libs/qworker/inc/qwInt.h +++ b/source/libs/qworker/inc/qwInt.h @@ -139,6 +139,7 @@ typedef struct SQWTaskCtx { bool queryContinue; bool queryInQueue; int32_t rspCode; + int64_t affectedRows; // for insert ...select stmt SRpcHandleInfo ctrlConnInfo; SRpcHandleInfo dataConnInfo; diff --git a/source/libs/qworker/inc/qwMsg.h b/source/libs/qworker/inc/qwMsg.h index b2205a46f1..f15dba5291 100644 --- a/source/libs/qworker/inc/qwMsg.h +++ b/source/libs/qworker/inc/qwMsg.h @@ -39,7 +39,7 @@ int32_t qwBuildAndSendFetchRsp(SRpcHandleInfo *pConn, SRetrieveTableRsp *pRsp, i int32_t code); void qwBuildFetchRsp(void *msg, SOutputData *input, int32_t len, bool qComplete); int32_t qwBuildAndSendCQueryMsg(QW_FPARAMS_DEF, SRpcHandleInfo *pConn); -int32_t qwBuildAndSendQueryRsp(int32_t rspType, SRpcHandleInfo *pConn, int32_t code, STbVerInfo* tbInfo); +int32_t qwBuildAndSendQueryRsp(int32_t rspType, SRpcHandleInfo *pConn, int32_t code, SQWTaskCtx *ctx); int32_t qwBuildAndSendExplainRsp(SRpcHandleInfo *pConn, SExplainExecInfo *execInfo, int32_t num); void qwFreeFetchRsp(void *msg); int32_t qwMallocFetchRsp(int32_t length, SRetrieveTableRsp **rsp); diff --git a/source/libs/qworker/src/qwMsg.c b/source/libs/qworker/src/qwMsg.c index 94b6ddd6a2..326f1b2935 100644 --- a/source/libs/qworker/src/qwMsg.c +++ b/source/libs/qworker/src/qwMsg.c @@ -43,13 +43,16 @@ void qwFreeFetchRsp(void *msg) { } } -int32_t qwBuildAndSendQueryRsp(int32_t rspType, SRpcHandleInfo *pConn, int32_t code, STbVerInfo* tbInfo) { +int32_t qwBuildAndSendQueryRsp(int32_t rspType, SRpcHandleInfo *pConn, int32_t code, SQWTaskCtx *ctx) { + STbVerInfo* tbInfo = ctx ? &ctx->tbInfo : NULL; + int64_t affectedRows = ctx ? ctx->affectedRows : 0; SQueryTableRsp *pRsp = (SQueryTableRsp *)rpcMallocCont(sizeof(SQueryTableRsp)); - pRsp->code = code; + pRsp->code = htonl(code); + pRsp->affectedRows = htobe64(affectedRows); if (tbInfo) { strcpy(pRsp->tbFName, tbInfo->tbFName); - pRsp->sversion = tbInfo->sversion; - pRsp->tversion = tbInfo->tversion; + pRsp->sversion = htonl(tbInfo->sversion); + pRsp->tversion = htonl(tbInfo->tversion); } SRpcMsg rpcRsp = { diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c index ea12ca55d4..9b5d8c294c 100644 --- a/source/libs/qworker/src/qworker.c +++ b/source/libs/qworker/src/qworker.c @@ -57,6 +57,10 @@ int32_t qwHandleTaskComplete(QW_FPARAMS_DEF, SQWTaskCtx *ctx) { connInfo.ahandle = NULL; QW_ERR_RET(qwBuildAndSendExplainRsp(&connInfo, execInfo, resNum)); } + + if (!ctx->needFetch) { + dsGetDataLength(ctx->sinkHandle, &ctx->affectedRows, NULL); + } } return TSDB_CODE_SUCCESS; @@ -184,7 +188,7 @@ int32_t qwGenerateSchHbRsp(SQWorker *mgmt, SQWSchStatus *sch, SQWHbInfo *hbInfo) } int32_t qwGetQueryResFromSink(QW_FPARAMS_DEF, SQWTaskCtx *ctx, int32_t *dataLen, void **rspMsg, SOutputData *pOutput) { - int32_t len = 0; + int64_t len = 0; SRetrieveTableRsp *rsp = NULL; bool queryEnd = false; int32_t code = 0; @@ -243,7 +247,7 @@ int32_t qwGetQueryResFromSink(QW_FPARAMS_DEF, SQWTaskCtx *ctx, int32_t *dataLen, } int32_t qwGetDeleteResFromSink(QW_FPARAMS_DEF, SQWTaskCtx *ctx, int32_t *dataLen, void **rspMsg, SDeleteRes *pRes) { - int32_t len = 0; + int64_t len = 0; SVDeleteRsp rsp = {0}; bool queryEnd = false; int32_t code = 0; @@ -445,7 +449,7 @@ _return: } if (rspConnection) { - qwBuildAndSendQueryRsp(input->msgType + 1, rspConnection, code, ctx ? &ctx->tbInfo : NULL); + qwBuildAndSendQueryRsp(input->msgType + 1, rspConnection, code, ctx); QW_TASK_DLOG("query msg rsped, handle:%p, code:%x - %s", rspConnection->handle, code, tstrerror(code)); } diff --git a/source/libs/qworker/test/qworkerTests.cpp b/source/libs/qworker/test/qworkerTests.cpp index bc37400249..a76d5085cd 100644 --- a/source/libs/qworker/test/qworkerTests.cpp +++ b/source/libs/qworker/test/qworkerTests.cpp @@ -331,7 +331,7 @@ void qwtEndPut(DataSinkHandle handle, uint64_t useconds) { qwtTestSinkQueryEnd = true; } -void qwtGetDataLength(DataSinkHandle handle, int32_t* pLen, bool* pQueryEnd) { +void qwtGetDataLength(DataSinkHandle handle, int64_t* pLen, bool* pQueryEnd) { static int32_t in = 0; if (in > 0) { From e1ed9317d4c34337b47ea23b769da8b9db649a3e Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Thu, 7 Jul 2022 08:53:23 +0800 Subject: [PATCH 05/27] feat: insert from query --- source/client/src/clientImpl.c | 2 +- source/libs/executor/inc/dataSinkInt.h | 3 ++- source/libs/executor/src/dataDeleter.c | 4 ++-- source/libs/executor/src/dataDispatcher.c | 4 ++-- source/libs/executor/src/dataInserter.c | 27 +++++++---------------- source/libs/scheduler/src/schRemote.c | 11 +++++++-- 6 files changed, 24 insertions(+), 27 deletions(-) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 671f04089c..7dd5d68209 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -657,7 +657,7 @@ int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList } if (TDMT_VND_SUBMIT == pRequest->type || TDMT_VND_DELETE == pRequest->type || - TDMT_VND_CREATE_TABLE == pRequest->type) { + TDMT_VND_CREATE_TABLE == pRequest->type || TDMT_SCH_MERGE_QUERY == pRequest->type) { pRequest->body.resInfo.numOfRows = res.numOfRows; schedulerFreeJob(&pRequest->body.queryJob, 0); diff --git a/source/libs/executor/inc/dataSinkInt.h b/source/libs/executor/inc/dataSinkInt.h index dead1aff73..9426c99a0f 100644 --- a/source/libs/executor/inc/dataSinkInt.h +++ b/source/libs/executor/inc/dataSinkInt.h @@ -34,7 +34,7 @@ typedef struct SDataSinkManager { typedef int32_t (*FPutDataBlock)(struct SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue); typedef void (*FEndPut)(struct SDataSinkHandle* pHandle, uint64_t useconds); -typedef void (*FGetDataLength)(struct SDataSinkHandle* pHandle, int32_t* pLen, bool* pQueryEnd); +typedef void (*FGetDataLength)(struct SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryEnd); typedef int32_t (*FGetDataBlock)(struct SDataSinkHandle* pHandle, SOutputData* pOutput); typedef int32_t (*FDestroyDataSinker)(struct SDataSinkHandle* pHandle); typedef int32_t (*FGetCacheSize)(struct SDataSinkHandle* pHandle, uint64_t* size); @@ -50,6 +50,7 @@ typedef struct SDataSinkHandle { int32_t createDataDispatcher(SDataSinkManager* pManager, const SDataSinkNode* pDataSink, DataSinkHandle* pHandle); int32_t createDataDeleter(SDataSinkManager* pManager, const SDataSinkNode* pDataSink, DataSinkHandle* pHandle, void *pParam); +int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDataSink, DataSinkHandle* pHandle, void *pParam); #ifdef __cplusplus } diff --git a/source/libs/executor/src/dataDeleter.c b/source/libs/executor/src/dataDeleter.c index 8c220134f0..3c56abbd15 100644 --- a/source/libs/executor/src/dataDeleter.c +++ b/source/libs/executor/src/dataDeleter.c @@ -154,7 +154,7 @@ static void endPut(struct SDataSinkHandle* pHandle, uint64_t useconds) { taosThreadMutexUnlock(&pDeleter->mutex); } -static void getDataLength(SDataSinkHandle* pHandle, int32_t* pLen, bool* pQueryEnd) { +static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryEnd) { SDataDeleterHandle* pDeleter = (SDataDeleterHandle*)pHandle; if (taosQueueEmpty(pDeleter->pDataBlocks)) { *pQueryEnd = pDeleter->queryEnd; @@ -168,7 +168,7 @@ static void getDataLength(SDataSinkHandle* pHandle, int32_t* pLen, bool* pQueryE taosFreeQitem(pBuf); *pLen = ((SDataCacheEntry*)(pDeleter->nextOutput.pData))->dataLen; *pQueryEnd = pDeleter->queryEnd; - qDebug("got data len %d, row num %d in sink", *pLen, ((SDataCacheEntry*)(pDeleter->nextOutput.pData))->numOfRows); + qDebug("got data len %" PRId64 ", row num %d in sink", *pLen, ((SDataCacheEntry*)(pDeleter->nextOutput.pData))->numOfRows); } static int32_t getDataBlock(SDataSinkHandle* pHandle, SOutputData* pOutput) { diff --git a/source/libs/executor/src/dataDispatcher.c b/source/libs/executor/src/dataDispatcher.c index 5ee222efb7..b8495faffd 100644 --- a/source/libs/executor/src/dataDispatcher.c +++ b/source/libs/executor/src/dataDispatcher.c @@ -156,7 +156,7 @@ static void endPut(struct SDataSinkHandle* pHandle, uint64_t useconds) { taosThreadMutexUnlock(&pDispatcher->mutex); } -static void getDataLength(SDataSinkHandle* pHandle, int32_t* pLen, bool* pQueryEnd) { +static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryEnd) { SDataDispatchHandle* pDispatcher = (SDataDispatchHandle*)pHandle; if (taosQueueEmpty(pDispatcher->pDataBlocks)) { *pQueryEnd = pDispatcher->queryEnd; @@ -170,7 +170,7 @@ static void getDataLength(SDataSinkHandle* pHandle, int32_t* pLen, bool* pQueryE taosFreeQitem(pBuf); *pLen = ((SDataCacheEntry*)(pDispatcher->nextOutput.pData))->dataLen; *pQueryEnd = pDispatcher->queryEnd; - qDebug("got data len %d, row num %d in sink", *pLen, ((SDataCacheEntry*)(pDispatcher->nextOutput.pData))->numOfRows); + qDebug("got data len %" PRId64 ", row num %d in sink", *pLen, ((SDataCacheEntry*)(pDispatcher->nextOutput.pData))->numOfRows); } static int32_t getDataBlock(SDataSinkHandle* pHandle, SOutputData* pOutput) { diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index 5f7ebde4c9..891bc0e4b9 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -50,24 +50,6 @@ typedef struct SSubmitRspParam { SDataInserterHandle* pInserter; } SSubmitRspParam; -static int32_t updateStatus(SDataInserterHandle* pInserter) { - taosThreadMutexLock(&pInserter->mutex); - int32_t blockNums = taosQueueItemSize(pInserter->pDataBlocks); - int32_t status = - (0 == blockNums ? DS_BUF_EMPTY - : (blockNums < pInserter->pManager->cfg.maxDataBlockNumPerQuery ? DS_BUF_LOW : DS_BUF_FULL)); - pInserter->status = status; - taosThreadMutexUnlock(&pInserter->mutex); - return status; -} - -static int32_t getStatus(SDataInserterHandle* pInserter) { - taosThreadMutexLock(&pInserter->mutex); - int32_t status = pInserter->status; - taosThreadMutexUnlock(&pInserter->mutex); - return status; -} - int32_t inserterCallback(void* param, SDataBuf* pMsg, int32_t code) { SSubmitRspParam* pParam = (SSubmitRspParam*)param; SDataInserterHandle* pInserter = pParam->pInserter; @@ -236,6 +218,13 @@ static void endPut(struct SDataSinkHandle* pHandle, uint64_t useconds) { taosThreadMutexUnlock(&pInserter->mutex); } +static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryEnd) { + SDataInserterHandle* pDispatcher = (SDataInserterHandle*)pHandle; + *pLen = pDispatcher->submitRes.affectedRows; + qDebug("got total affectedRows %" PRId64 , *pLen); +} + + static int32_t destroyDataSinker(SDataSinkHandle* pHandle) { SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pInserter->cachedSize); @@ -262,7 +251,7 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat SDataDeleterNode* pInserterNode = (SQueryInserterNode *)pDataSink; inserter->sink.fPut = putDataBlock; inserter->sink.fEndPut = endPut; - inserter->sink.fGetLen = NULL; + inserter->sink.fGetLen = getDataLength; inserter->sink.fGetData = NULL; inserter->sink.fDestroy = destroyDataSinker; inserter->sink.fGetCacheSize = getCacheSize; diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c index 263401d20e..f84f51affa 100644 --- a/source/libs/scheduler/src/schRemote.c +++ b/source/libs/scheduler/src/schRemote.c @@ -236,16 +236,23 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t execId, SDa } case TDMT_SCH_QUERY_RSP: case TDMT_SCH_MERGE_QUERY_RSP: { - SQueryTableRsp *rsp = (SQueryTableRsp *)msg; - SCH_ERR_JRET(rspCode); if (NULL == msg) { SCH_ERR_JRET(TSDB_CODE_QRY_INVALID_INPUT); } + + SQueryTableRsp *rsp = (SQueryTableRsp *)msg; + rsp->code = ntohl(rsp->code); + rsp->sversion = ntohl(rsp->sversion); + rsp->tversion = ntohl(rsp->tversion); + rsp->affectedRows = be64toh(rsp->affectedRows); + SCH_ERR_JRET(rsp->code); SCH_ERR_JRET(schSaveJobQueryRes(pJob, rsp)); + atomic_add_fetch_32(&pJob->resNumOfRows, rsp->affectedRows); + taosMemoryFreeClear(msg); SCH_ERR_RET(schProcessOnTaskSuccess(pJob, pTask)); From f3c8bcb9531064534c79b0ea7ac9bd104cad445b Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Thu, 7 Jul 2022 09:42:20 +0800 Subject: [PATCH 06/27] feat: insert from query --- source/dnode/qnode/src/qnode.c | 3 --- source/libs/executor/src/dataInserter.c | 14 ++++++++++---- source/libs/parser/src/parser.c | 3 +++ source/libs/qworker/src/qworker.c | 4 ++-- source/libs/scheduler/inc/schInt.h | 2 +- source/libs/scheduler/src/schRemote.c | 1 + 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/source/dnode/qnode/src/qnode.c b/source/dnode/qnode/src/qnode.c index 723402e639..b65189153e 100644 --- a/source/dnode/qnode/src/qnode.c +++ b/source/dnode/qnode/src/qnode.c @@ -89,9 +89,6 @@ int32_t qndProcessQueryMsg(SQnode *pQnode, int64_t ts, SRpcMsg *pMsg) { case TDMT_SCH_MERGE_FETCH: code = qWorkerProcessFetchMsg(pQnode, pQnode->pQuery, pMsg, ts); break; - case TDMT_SCH_FETCH_RSP: - code = qWorkerProcessFetchRsp(pQnode, pQnode->pQuery, pMsg, ts); - break; case TDMT_SCH_CANCEL_TASK: code = qWorkerProcessCancelMsg(pQnode, pQnode->pQuery, pMsg, ts); break; diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index 891bc0e4b9..0616f4b12f 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -118,7 +118,13 @@ static int32_t sendSubmitRequest(SDataInserterHandle* pInserter, SSubmitReq* pMs } -SSubmitReq* dataBlockToSubmit(const SArray* pBlocks, const STSchema* pTSchema, int64_t uid, int64_t suid, int32_t vgId) { +SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { + const SArray* pBlocks = pInserter->pDataBlocks; + const STSchema* pTSchema = pInserter->pSchema; + int64_t uid = pInserter->pNode->tableId; + int64_t suid = pInserter->pNode->stableId; + int32_t vgId = pInserter->pNode->vgId; + SSubmitReq* ret = NULL; int32_t sz = taosArrayGetSize(pBlocks); @@ -192,7 +198,7 @@ SSubmitReq* dataBlockToSubmit(const SArray* pBlocks, const STSchema* pTSchema, i static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue) { SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; taosArrayPush(pInserter->pDataBlocks, pInput->pData); - SSubmitReq* pMsg = dataBlockToSubmit(pInserter->pDataBlocks, pInserter->pSchema, pInserter->pNode->tableId, pInserter->pNode->suid, pInserter->pNode->vgId); + SSubmitReq* pMsg = dataBlockToSubmit(pInserter); int32_t code = sendSubmitRequest(pInserter, pMsg, pInserter->pParam->readHandle->pMsgCb->clientRpc, &pInserter->pNode->epSet); if (code) { @@ -248,7 +254,7 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat return TSDB_CODE_QRY_OUT_OF_MEMORY; } - SDataDeleterNode* pInserterNode = (SQueryInserterNode *)pDataSink; + SQueryInserterNode* pInserterNode = (SQueryInserterNode *)pDataSink; inserter->sink.fPut = putDataBlock; inserter->sink.fEndPut = endPut; inserter->sink.fGetLen = getDataLength; @@ -267,7 +273,7 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat return code; } - if (pInserterNode->suid != suid) { + if (pInserterNode->stableId != suid) { terrno = TSDB_CODE_TDB_INVALID_TABLE_ID; return terrno; } diff --git a/source/libs/parser/src/parser.c b/source/libs/parser/src/parser.c index 4f8ea00271..b36adbe5d4 100644 --- a/source/libs/parser/src/parser.c +++ b/source/libs/parser/src/parser.c @@ -39,6 +39,9 @@ bool qIsInsertValuesSql(const char* pStr, size_t length) { if (TK_USING == t.type || TK_VALUES == t.type) { return true; } + if (0 == t.type) { + break; + } } while (pStr - pSql < length); return false; } diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c index 335a37fdb0..4db8d3dca7 100644 --- a/source/libs/qworker/src/qworker.c +++ b/source/libs/qworker/src/qworker.c @@ -247,7 +247,7 @@ int32_t qwGetQueryResFromSink(QW_FPARAMS_DEF, SQWTaskCtx *ctx, int32_t *dataLen, } int32_t qwGetDeleteResFromSink(QW_FPARAMS_DEF, SQWTaskCtx *ctx, SDeleteRes *pRes) { - int32_t len = 0; + int64_t len = 0; bool queryEnd = false; int32_t code = 0; SOutputData output = {0}; @@ -255,7 +255,7 @@ int32_t qwGetDeleteResFromSink(QW_FPARAMS_DEF, SQWTaskCtx *ctx, SDeleteRes *pRes dsGetDataLength(ctx->sinkHandle, &len, &queryEnd); if (len <= 0 || len != sizeof(SDeleterRes)) { - QW_TASK_ELOG("invalid length from dsGetDataLength, length:%d", len); + QW_TASK_ELOG("invalid length from dsGetDataLength, length:%" PRId64, len); QW_ERR_RET(TSDB_CODE_QRY_INVALID_INPUT); } diff --git a/source/libs/scheduler/inc/schInt.h b/source/libs/scheduler/inc/schInt.h index 959deda795..75e87e9eba 100644 --- a/source/libs/scheduler/inc/schInt.h +++ b/source/libs/scheduler/inc/schInt.h @@ -318,7 +318,7 @@ extern SSchedulerMgmt schMgmt; #define SCH_SET_JOB_NEED_FLOW_CTRL(_job) (_job)->attr.needFlowCtrl = true #define SCH_JOB_NEED_FLOW_CTRL(_job) ((_job)->attr.needFlowCtrl) #define SCH_TASK_NEED_FLOW_CTRL(_job, _task) (SCH_IS_DATA_BIND_QRY_TASK(_task) && SCH_JOB_NEED_FLOW_CTRL(_job) && SCH_IS_LEVEL_UNFINISHED((_task)->level)) -#define SCH_FETCH_TYPE(_pSrcTask) (SCH_IS_DATA_SRC_QRY_TASK(_pSrcTask) ? TDMT_SCH_FETCH : TDMT_SCH_MERGE_FETCH) +#define SCH_FETCH_TYPE(_pSrcTask) (SCH_IS_DATA_BIND_QRY_TASK(_pSrcTask) ? TDMT_SCH_FETCH : TDMT_SCH_MERGE_FETCH) #define SCH_SET_JOB_TYPE(_job, type) do { if ((type) != SUBPLAN_TYPE_MODIFY) { (_job)->attr.queryJob = true; } } while (0) #define SCH_IS_QUERY_JOB(_job) ((_job)->attr.queryJob) diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c index 8c52f2994d..42f482ab76 100644 --- a/source/libs/scheduler/src/schRemote.c +++ b/source/libs/scheduler/src/schRemote.c @@ -30,6 +30,7 @@ int32_t schValidateRspMsgType(SSchJob *pJob, SSchTask *pTask, int32_t msgType) { case TDMT_SCH_EXPLAIN_RSP: return TSDB_CODE_SUCCESS; case TDMT_SCH_FETCH_RSP: + case TDMT_SCH_MERGE_FETCH_RSP: if (lastMsgType != reqMsgType) { SCH_TASK_ELOG("rsp msg type mis-match, last sent msgType:%s, rspType:%s", TMSG_INFO(lastMsgType), TMSG_INFO(msgType)); From 99d80ddc900b7cae31566782e281aa73bc838693 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Thu, 7 Jul 2022 11:38:58 +0800 Subject: [PATCH 07/27] feat: insert from query --- source/libs/executor/src/dataInserter.c | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index 0616f4b12f..edc6143b93 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -38,6 +38,7 @@ typedef struct SDataInserterHandle { SSubmitRes submitRes; SInserterParam* pParam; SArray* pDataBlocks; + SHashObj* pCols; int32_t status; bool queryEnd; uint64_t useconds; @@ -124,6 +125,7 @@ SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { int64_t uid = pInserter->pNode->tableId; int64_t suid = pInserter->pNode->stableId; int32_t vgId = pInserter->pNode->vgId; + bool fullCol = (pInserter->pNode->pCols->length == pTSchema->numOfCols); SSubmitReq* ret = NULL; int32_t sz = taosArrayGetSize(pBlocks); @@ -144,7 +146,7 @@ SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { // TODO ret = rpcMallocCont(cap); ret->header.vgId = vgId; - ret->version = htonl(1); + ret->version = htonl(pTSchema->version); ret->length = sizeof(SSubmitReq); ret->numOfBlocks = htonl(sz); @@ -170,9 +172,20 @@ SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { for (int32_t k = 0; k < pTSchema->numOfCols; k++) { const STColumn* pColumn = &pTSchema->columns[k]; - SColumnInfoData* pColData = taosArrayGet(pDataBlock->pDataBlock, k); + SColumnInfoData* pColData = NULL; + int16_t colIdx = k; + if (!fullCol) { + int16_t *slotId = taosHashGet(pInserter->pCols, &pColumn->colId, sizeof(pColumn->colId)); + if (NULL == slotId) { + continue; + } + + colIdx = *slotId; + } + + pColData = taosArrayGet(pDataBlock->pDataBlock, colIdx); if (colDataIsNull_s(pColData, j)) { - tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NONE, NULL, false, pColumn->offset, k); + tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NULL, NULL, false, pColumn->offset, k); } else { void* data = colDataGetData(pColData, j); tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NORM, data, true, pColumn->offset, k); @@ -285,6 +298,13 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat return TSDB_CODE_QRY_OUT_OF_MEMORY; } + inserter->pCols = taosHashInit(pInserterNode->pCols->length, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT), false, HASH_NO_LOCK); + SNode* pNode = NULL; + FOREACH(pNode, pInserterNode->pCols) { + SColumnNode* pCol = (SColumnNode*)pNode; + taosHashPut(inserter->pCols, &pCol->colId, sizeof(pCol->colId), &pCol->slotId, sizeof(pCol->slotId)); + } + tsem_init(&inserter->ready, 0, 0); *pHandle = inserter; From 759b463e4cfbadd82de893b8f9ec936ed188a44c Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Thu, 7 Jul 2022 15:31:12 +0800 Subject: [PATCH 08/27] feat: insert from query --- include/common/tmsg.h | 4 ++-- source/libs/qworker/src/qworker.c | 2 +- source/libs/transport/src/transSvr.c | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/common/tmsg.h b/include/common/tmsg.h index 58321003c0..f97b32e018 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -57,8 +57,8 @@ extern int32_t tMsgDict[]; #define TMSG_SEG_SEQ(TYPE) ((TYPE)&0xff) #define TMSG_INFO(TYPE) \ ((TYPE) >= 0 && \ - ((TYPE) < TDMT_DND_MAX_MSG | (TYPE) < TDMT_MND_MAX_MSG | (TYPE) < TDMT_VND_MAX_MSG | (TYPE) < TDMT_SCH_MAX_MSG | \ - (TYPE) < TDMT_STREAM_MAX_MSG | (TYPE) < TDMT_MON_MAX_MSG | (TYPE) < TDMT_SYNC_MAX_MSG)) \ + ((TYPE) < TDMT_DND_MAX_MSG || (TYPE) < TDMT_MND_MAX_MSG || (TYPE) < TDMT_VND_MAX_MSG || (TYPE) < TDMT_SCH_MAX_MSG || \ + (TYPE) < TDMT_STREAM_MAX_MSG || (TYPE) < TDMT_MON_MAX_MSG || (TYPE) < TDMT_SYNC_MAX_MSG)) \ ? tMsgInfo[tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)] \ : 0 #define TMSG_INDEX(TYPE) (tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)) diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c index 4db8d3dca7..cf8116fee7 100644 --- a/source/libs/qworker/src/qworker.c +++ b/source/libs/qworker/src/qworker.c @@ -713,7 +713,7 @@ _return: if (code || rsp) { qwBuildAndSendFetchRsp(qwMsg->msgType + 1, &qwMsg->connInfo, rsp, dataLen, code); - QW_TASK_DLOG("fetch rsp send, handle:%p, code:%x - %s, dataLen:%d", qwMsg->connInfo.handle, code, tstrerror(code), + QW_TASK_DLOG("%s send, handle:%p, code:%x - %s, dataLen:%d", TMSG_INFO(qwMsg->msgType + 1), qwMsg->connInfo.handle, code, tstrerror(code), dataLen); } diff --git a/source/libs/transport/src/transSvr.c b/source/libs/transport/src/transSvr.c index 30dd7bbf33..21bb571978 100644 --- a/source/libs/transport/src/transSvr.c +++ b/source/libs/transport/src/transSvr.c @@ -392,7 +392,11 @@ static void uvPrepareSendData(SSvrMsg* smsg, uv_buf_t* wb) { pHead->hasEpSet = pMsg->info.hasEpSet; if (pConn->status == ConnNormal) { - pHead->msgType = pConn->inType + 1; + if (0 == smsg->msg.msgType) { + pHead->msgType = pConn->inType + 1; + } else { + pHead->msgType = smsg->msg.msgType; + } } else { if (smsg->type == Release) { pHead->msgType = 0; From 5ebfedd56cc93906244fac9d98b7743f14f005c4 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 7 Jul 2022 16:12:15 +0800 Subject: [PATCH 09/27] set msg resp type --- source/libs/transport/src/transSvr.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/source/libs/transport/src/transSvr.c b/source/libs/transport/src/transSvr.c index 21bb571978..db983a873c 100644 --- a/source/libs/transport/src/transSvr.c +++ b/source/libs/transport/src/transSvr.c @@ -391,12 +391,9 @@ static void uvPrepareSendData(SSvrMsg* smsg, uv_buf_t* wb) { pHead->traceId = pMsg->info.traceId; pHead->hasEpSet = pMsg->info.hasEpSet; + if (pConn->status == ConnNormal) { - if (0 == smsg->msg.msgType) { - pHead->msgType = pConn->inType + 1; - } else { - pHead->msgType = smsg->msg.msgType; - } + pHead->msgType = (0 == pMsg->msgType ? pConn->inType + 1 : pMsg->msgType); } else { if (smsg->type == Release) { pHead->msgType = 0; @@ -405,11 +402,8 @@ static void uvPrepareSendData(SSvrMsg* smsg, uv_buf_t* wb) { destroyConnRegArg(pConn); transUnrefSrvHandle(pConn); } else { - pHead->msgType = pMsg->msgType; // set up resp msg type - if (pHead->msgType == 0 && transMsgLenFromCont(pMsg->contLen) == sizeof(STransMsgHead)) { - pHead->msgType = pConn->inType + 1; - } + pHead->msgType = (0 == pMsg->msgType ? pConn->inType + 1 : pMsg->msgType); } } From 655faa279c85c4d700a5461073160817457fa347 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Thu, 7 Jul 2022 17:22:03 +0800 Subject: [PATCH 10/27] feat: insert from query --- source/libs/scheduler/src/schJob.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/scheduler/src/schJob.c b/source/libs/scheduler/src/schJob.c index a305a127e0..13100afb8b 100644 --- a/source/libs/scheduler/src/schJob.c +++ b/source/libs/scheduler/src/schJob.c @@ -879,7 +879,7 @@ int32_t schProcessOnCbBegin(SSchJob** job, SSchTask** task, uint64_t qId, int64_ } if (schJobNeedToStop(pJob, &status)) { - SCH_TASK_ELOG("will not do further processing cause of job status %s", jobTaskStatusStr(status)); + SCH_TASK_DLOG("will not do further processing cause of job status %s", jobTaskStatusStr(status)); SCH_ERR_JRET(TSDB_CODE_SCH_IGNORE_ERROR); } From 0fd55077f504874a6c7076c2db065bdcd1324f4c Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 8 Jul 2022 09:33:28 +0800 Subject: [PATCH 11/27] feat: sql command 'insert ... select' --- source/libs/parser/src/parTranslater.c | 2 +- source/libs/planner/src/planSpliter.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 0fbeac47e6..97a263f86f 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -6384,7 +6384,7 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) { break; case QUERY_NODE_INSERT_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; - pQuery->msgType = TDMT_VND_SUBMIT; + pQuery->msgType = TDMT_SCH_QUERY; break; case QUERY_NODE_VNODE_MODIF_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; diff --git a/source/libs/planner/src/planSpliter.c b/source/libs/planner/src/planSpliter.c index 0863b5f21f..1dfdaf5f21 100644 --- a/source/libs/planner/src/planSpliter.c +++ b/source/libs/planner/src/planSpliter.c @@ -1219,14 +1219,27 @@ static int32_t insertSelectSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan) { return TSDB_CODE_SUCCESS; } + SLogicSubplan* pNewSubplan = NULL; + SNodeList* pSubplanChildren = info.pSubplan->pChildren; int32_t code = splCreateExchangeNodeForSubplan(pCxt, info.pSubplan, info.pQueryRoot, info.pSubplan->subplanType); if (TSDB_CODE_SUCCESS == code) { - code = nodesListMakeStrictAppend(&info.pSubplan->pChildren, (SNode*)splCreateScanSubplan(pCxt, info.pQueryRoot, 0)); + pNewSubplan = splCreateScanSubplan(pCxt, info.pQueryRoot, 0); + if (NULL == pNewSubplan) { + code = TSDB_CODE_OUT_OF_MEMORY; + } } + if (TSDB_CODE_SUCCESS == code) { + code = nodesListMakeStrictAppend(&info.pSubplan->pChildren, (SNode*)pNewSubplan); + } + if (TSDB_CODE_SUCCESS == code) { + code = unionMountSubplan(pNewSubplan, pSubplanChildren); + } + if (TSDB_CODE_SUCCESS == code) { info.pSubplan->subplanType = SUBPLAN_TYPE_MODIFY; SPLIT_FLAG_SET_MASK(info.pSubplan->splitFlag, SPLIT_FLAG_INSERT_SPLIT); } + ++(pCxt->groupId); pCxt->split = true; return code; From 1fea06bd6f921aa2a7775c38140473721d5ff975 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 8 Jul 2022 09:37:07 +0800 Subject: [PATCH 12/27] feat: sql command 'insert ... select' --- source/libs/planner/src/planSpliter.c | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/source/libs/planner/src/planSpliter.c b/source/libs/planner/src/planSpliter.c index 1dfdaf5f21..5c21a71bb1 100644 --- a/source/libs/planner/src/planSpliter.c +++ b/source/libs/planner/src/planSpliter.c @@ -98,6 +98,24 @@ static int32_t splCreateExchangeNodeForSubplan(SSplitContext* pCxt, SLogicSubpla return code; } +static int32_t splMountSubplan(SLogicSubplan* pParent, SNodeList* pChildren) { + SNode* pChild = NULL; + WHERE_EACH(pChild, pChildren) { + if (unionIsChildSubplan(pParent->pNode, ((SLogicSubplan*)pChild)->id.groupId)) { + int32_t code = nodesListMakeAppend(&pParent->pChildren, pChild); + if (TSDB_CODE_SUCCESS == code) { + REPLACE_NODE(NULL); + ERASE_NODE(pChildren); + continue; + } else { + return code; + } + } + WHERE_NEXT; + } + return TSDB_CODE_SUCCESS; +} + static bool splMatchByNode(SSplitContext* pCxt, SLogicSubplan* pSubplan, SLogicNode* pNode, FSplFindSplitNode func, void* pInfo) { if (func(pCxt, pSubplan, pNode, pInfo)) { @@ -1001,24 +1019,6 @@ static bool unionIsChildSubplan(SLogicNode* pLogicNode, int32_t groupId) { return false; } -static int32_t unionMountSubplan(SLogicSubplan* pParent, SNodeList* pChildren) { - SNode* pChild = NULL; - WHERE_EACH(pChild, pChildren) { - if (unionIsChildSubplan(pParent->pNode, ((SLogicSubplan*)pChild)->id.groupId)) { - int32_t code = nodesListMakeAppend(&pParent->pChildren, pChild); - if (TSDB_CODE_SUCCESS == code) { - REPLACE_NODE(NULL); - ERASE_NODE(pChildren); - continue; - } else { - return code; - } - } - WHERE_NEXT; - } - return TSDB_CODE_SUCCESS; -} - static SLogicSubplan* unionCreateSubplan(SSplitContext* pCxt, SLogicNode* pNode, ESubplanType subplanType) { SLogicSubplan* pSubplan = (SLogicSubplan*)nodesMakeNode(QUERY_NODE_LOGIC_SUBPLAN); if (NULL == pSubplan) { @@ -1044,7 +1044,7 @@ static int32_t unionSplitSubplan(SSplitContext* pCxt, SLogicSubplan* pUnionSubpl code = nodesListMakeStrictAppend(&pUnionSubplan->pChildren, (SNode*)pNewSubplan); if (TSDB_CODE_SUCCESS == code) { REPLACE_NODE(NULL); - code = unionMountSubplan(pNewSubplan, pSubplanChildren); + code = splMountSubplan(pNewSubplan, pSubplanChildren); } if (TSDB_CODE_SUCCESS != code) { break; @@ -1232,7 +1232,7 @@ static int32_t insertSelectSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan) { code = nodesListMakeStrictAppend(&info.pSubplan->pChildren, (SNode*)pNewSubplan); } if (TSDB_CODE_SUCCESS == code) { - code = unionMountSubplan(pNewSubplan, pSubplanChildren); + code = splMountSubplan(pNewSubplan, pSubplanChildren); } if (TSDB_CODE_SUCCESS == code) { From 80172d5c61328c95dad1ee21bc1e041339877f4f Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 8 Jul 2022 09:59:05 +0800 Subject: [PATCH 13/27] feat: sql command 'insert ... select' --- source/libs/planner/src/planSpliter.c | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/source/libs/planner/src/planSpliter.c b/source/libs/planner/src/planSpliter.c index 5c21a71bb1..be3dec02bb 100644 --- a/source/libs/planner/src/planSpliter.c +++ b/source/libs/planner/src/planSpliter.c @@ -98,10 +98,29 @@ static int32_t splCreateExchangeNodeForSubplan(SSplitContext* pCxt, SLogicSubpla return code; } +static bool splIsChildSubplan(SLogicNode* pLogicNode, int32_t groupId) { + if (QUERY_NODE_LOGIC_PLAN_EXCHANGE == nodeType(pLogicNode)) { + return ((SExchangeLogicNode*)pLogicNode)->srcGroupId == groupId; + } + + if (QUERY_NODE_LOGIC_PLAN_MERGE == nodeType(pLogicNode)) { + return ((SMergeLogicNode*)pLogicNode)->srcGroupId == groupId; + } + + SNode* pChild; + FOREACH(pChild, pLogicNode->pChildren) { + bool isChild = splIsChildSubplan((SLogicNode*)pChild, groupId); + if (isChild) { + return isChild; + } + } + return false; +} + static int32_t splMountSubplan(SLogicSubplan* pParent, SNodeList* pChildren) { SNode* pChild = NULL; WHERE_EACH(pChild, pChildren) { - if (unionIsChildSubplan(pParent->pNode, ((SLogicSubplan*)pChild)->id.groupId)) { + if (splIsChildSubplan(pParent->pNode, ((SLogicSubplan*)pChild)->id.groupId)) { int32_t code = nodesListMakeAppend(&pParent->pChildren, pChild); if (TSDB_CODE_SUCCESS == code) { REPLACE_NODE(NULL); @@ -1000,25 +1019,6 @@ static int32_t singleTableJoinSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan return code; } -static bool unionIsChildSubplan(SLogicNode* pLogicNode, int32_t groupId) { - if (QUERY_NODE_LOGIC_PLAN_EXCHANGE == nodeType(pLogicNode)) { - return ((SExchangeLogicNode*)pLogicNode)->srcGroupId == groupId; - } - - if (QUERY_NODE_LOGIC_PLAN_MERGE == nodeType(pLogicNode)) { - return ((SMergeLogicNode*)pLogicNode)->srcGroupId == groupId; - } - - SNode* pChild; - FOREACH(pChild, pLogicNode->pChildren) { - bool isChild = unionIsChildSubplan((SLogicNode*)pChild, groupId); - if (isChild) { - return isChild; - } - } - return false; -} - static SLogicSubplan* unionCreateSubplan(SSplitContext* pCxt, SLogicNode* pNode, ESubplanType subplanType) { SLogicSubplan* pSubplan = (SLogicSubplan*)nodesMakeNode(QUERY_NODE_LOGIC_SUBPLAN); if (NULL == pSubplan) { From b849252eed8065fc4a11ed9e9c13770bf176dced Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 8 Jul 2022 10:27:17 +0800 Subject: [PATCH 14/27] feat: insert from query --- source/libs/executor/src/dataInserter.c | 32 +++++++++++++++------- source/libs/parser/src/parTranslater.c | 2 +- source/libs/planner/src/planPhysiCreater.c | 2 +- source/libs/scheduler/inc/schInt.h | 1 + source/libs/scheduler/src/schRemote.c | 2 +- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index edc6143b93..860ecd35b6 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -110,7 +110,7 @@ static int32_t sendSubmitRequest(SDataInserterHandle* pInserter, SSubmitReq* pMs pMsgSendInfo->param = pParam; pMsgSendInfo->msgInfo.pData = pMsg; - pMsgSendInfo->msgInfo.len = sizeof(SSubmitReq); + pMsgSendInfo->msgInfo.len = ntohl(pMsg->length); pMsgSendInfo->msgType = TDMT_VND_SUBMIT; pMsgSendInfo->fp = inserterCallback; @@ -119,7 +119,7 @@ static int32_t sendSubmitRequest(SDataInserterHandle* pInserter, SSubmitReq* pMs } -SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { +int32_t dataBlockToSubmit(SDataInserterHandle* pInserter, SSubmitReq** pReq) { const SArray* pBlocks = pInserter->pDataBlocks; const STSchema* pTSchema = pInserter->pSchema; int64_t uid = pInserter->pNode->tableId; @@ -133,7 +133,7 @@ SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { // cal size int32_t cap = sizeof(SSubmitReq); for (int32_t i = 0; i < sz; i++) { - SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); + SSDataBlock* pDataBlock = taosArrayGetP(pBlocks, i); int32_t rows = pDataBlock->info.rows; // TODO min int32_t rowSize = pDataBlock->info.rowSize; @@ -144,15 +144,15 @@ SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { // assign data // TODO - ret = rpcMallocCont(cap); - ret->header.vgId = vgId; + ret = taosMemoryCalloc(1, cap); + ret->header.vgId = htonl(vgId); ret->version = htonl(pTSchema->version); ret->length = sizeof(SSubmitReq); ret->numOfBlocks = htonl(sz); SSubmitBlk* blkHead = POINTER_SHIFT(ret, sizeof(SSubmitReq)); for (int32_t i = 0; i < sz; i++) { - SSDataBlock* pDataBlock = taosArrayGet(pBlocks, i); + SSDataBlock* pDataBlock = taosArrayGetP(pBlocks, i); blkHead->numOfRows = htons(pDataBlock->info.rows); blkHead->sversion = htonl(pTSchema->version); @@ -184,6 +184,12 @@ SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { } pColData = taosArrayGet(pDataBlock->pDataBlock, colIdx); + if (pColData->info.type != pColumn->type) { + qError("col type mis-match, schema type:%d, type in block:%d", pColumn->type, pColData->info.type); + terrno = TSDB_CODE_APP_ERROR; + return TSDB_CODE_APP_ERROR; + } + if (colDataIsNull_s(pColData, j)) { tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NULL, NULL, false, pColumn->offset, k); } else { @@ -204,16 +210,22 @@ SSubmitReq* dataBlockToSubmit(SDataInserterHandle* pInserter) { ret->length = htonl(ret->length); - return ret; + *pReq = ret; + + return TSDB_CODE_SUCCESS; } static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue) { SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; - taosArrayPush(pInserter->pDataBlocks, pInput->pData); - SSubmitReq* pMsg = dataBlockToSubmit(pInserter); + taosArrayPush(pInserter->pDataBlocks, &pInput->pData); + SSubmitReq* pMsg = NULL; + int32_t code = dataBlockToSubmit(pInserter, &pMsg); + if (code) { + return code; + } - int32_t code = sendSubmitRequest(pInserter, pMsg, pInserter->pParam->readHandle->pMsgCb->clientRpc, &pInserter->pNode->epSet); + code = sendSubmitRequest(pInserter, pMsg, pInserter->pParam->readHandle->pMsgCb->clientRpc, &pInserter->pNode->epSet); if (code) { return code; } diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index c05742b52c..0975fe7309 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -6378,7 +6378,7 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) { break; case QUERY_NODE_INSERT_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; - pQuery->msgType = TDMT_SCH_QUERY; + pQuery->msgType = TDMT_VND_SUBMIT; break; case QUERY_NODE_VNODE_MODIF_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; diff --git a/source/libs/planner/src/planPhysiCreater.c b/source/libs/planner/src/planPhysiCreater.c index 6d5d5e220b..18d69d21d8 100644 --- a/source/libs/planner/src/planPhysiCreater.c +++ b/source/libs/planner/src/planPhysiCreater.c @@ -1566,7 +1566,7 @@ static int32_t buildInsertSelectSubplan(SPhysiPlanContext* pCxt, SVnodeModifyLog if (TSDB_CODE_SUCCESS == code) { code = createQueryInserter(pCxt, pModify, pSubplan, &pSubplan->pDataSink); } - pSubplan->msgType = TDMT_VND_SUBMIT; + pSubplan->msgType = TDMT_SCH_MERGE_QUERY; return code; } diff --git a/source/libs/scheduler/inc/schInt.h b/source/libs/scheduler/inc/schInt.h index 75e87e9eba..9018deaf13 100644 --- a/source/libs/scheduler/inc/schInt.h +++ b/source/libs/scheduler/inc/schInt.h @@ -319,6 +319,7 @@ extern SSchedulerMgmt schMgmt; #define SCH_JOB_NEED_FLOW_CTRL(_job) ((_job)->attr.needFlowCtrl) #define SCH_TASK_NEED_FLOW_CTRL(_job, _task) (SCH_IS_DATA_BIND_QRY_TASK(_task) && SCH_JOB_NEED_FLOW_CTRL(_job) && SCH_IS_LEVEL_UNFINISHED((_task)->level)) #define SCH_FETCH_TYPE(_pSrcTask) (SCH_IS_DATA_BIND_QRY_TASK(_pSrcTask) ? TDMT_SCH_FETCH : TDMT_SCH_MERGE_FETCH) +#define SCH_TASK_NEED_FETCH(_task) ((_task)->plan->subplanType != SUBPLAN_TYPE_MODIFY) #define SCH_SET_JOB_TYPE(_job, type) do { if ((type) != SUBPLAN_TYPE_MODIFY) { (_job)->attr.queryJob = true; } } while (0) #define SCH_IS_QUERY_JOB(_job) ((_job)->attr.queryJob) diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c index 42f482ab76..f9c3d80e46 100644 --- a/source/libs/scheduler/src/schRemote.c +++ b/source/libs/scheduler/src/schRemote.c @@ -1001,7 +1001,7 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr, pMsg->execId = htonl(pTask->execId); pMsg->taskType = TASK_TYPE_TEMP; pMsg->explain = SCH_IS_EXPLAIN_JOB(pJob); - pMsg->needFetch = SCH_JOB_NEED_FETCH(pJob); + pMsg->needFetch = SCH_TASK_NEED_FETCH(pTask); pMsg->phyLen = htonl(pTask->msgLen); pMsg->sqlLen = htonl(len); From 9aa35c2e28e2790b4d552f2b69450cbe22df9fc3 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 8 Jul 2022 11:08:46 +0800 Subject: [PATCH 15/27] feat: sql command 'insert ... select' --- source/libs/planner/src/planLogicCreater.c | 17 ++++++--- source/libs/planner/src/planSpliter.c | 40 ++++++++++------------ tests/script/jenkins/basic.txt | 4 +-- 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c index e7589fb0df..703395b0d5 100644 --- a/source/libs/planner/src/planLogicCreater.c +++ b/source/libs/planner/src/planLogicCreater.c @@ -1340,6 +1340,17 @@ static void doSetLogicNodeParent(SLogicNode* pNode, SLogicNode* pParent) { static void setLogicNodeParent(SLogicNode* pNode) { doSetLogicNodeParent(pNode, NULL); } +static void setLogicSubplanType(SLogicSubplan* pSubplan) { + if (QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY != nodeType(pSubplan->pNode)) { + pSubplan->subplanType = SUBPLAN_TYPE_SCAN; + } else { + SVnodeModifyLogicNode* pModify = (SVnodeModifyLogicNode*)pSubplan->pNode; + pSubplan->subplanType = (MODIFY_TABLE_TYPE_INSERT == pModify->modifyType && NULL != pModify->node.pChildren) + ? SUBPLAN_TYPE_SCAN + : SUBPLAN_TYPE_MODIFY; + } +} + int32_t createLogicPlan(SPlanContext* pCxt, SLogicSubplan** pLogicSubplan) { SLogicPlanContext cxt = {.pPlanCxt = pCxt}; @@ -1354,11 +1365,7 @@ int32_t createLogicPlan(SPlanContext* pCxt, SLogicSubplan** pLogicSubplan) { int32_t code = createQueryLogicNode(&cxt, pCxt->pAstRoot, &pSubplan->pNode); if (TSDB_CODE_SUCCESS == code) { setLogicNodeParent(pSubplan->pNode); - if (QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY == nodeType(pSubplan->pNode)) { - pSubplan->subplanType = SUBPLAN_TYPE_MODIFY; - } else { - pSubplan->subplanType = SUBPLAN_TYPE_SCAN; - } + setLogicSubplanType(pSubplan); } if (TSDB_CODE_SUCCESS == code) { diff --git a/source/libs/planner/src/planSpliter.c b/source/libs/planner/src/planSpliter.c index be3dec02bb..2137108386 100644 --- a/source/libs/planner/src/planSpliter.c +++ b/source/libs/planner/src/planSpliter.c @@ -39,7 +39,6 @@ typedef struct SSplitRule { FSplit splitFunc; } SSplitRule; -// typedef bool (*FSplFindSplitNode)(SSplitContext* pCxt, SLogicSubplan* pSubplan, void* pInfo); typedef bool (*FSplFindSplitNode)(SSplitContext* pCxt, SLogicSubplan* pSubplan, SLogicNode* pNode, void* pInfo); static void splSetSubplanVgroups(SLogicSubplan* pSubplan, SLogicNode* pNode) { @@ -67,6 +66,19 @@ static SLogicSubplan* splCreateScanSubplan(SSplitContext* pCxt, SLogicNode* pNod return pSubplan; } +static SLogicSubplan* splCreateSubplan(SSplitContext* pCxt, SLogicNode* pNode, ESubplanType subplanType) { + SLogicSubplan* pSubplan = (SLogicSubplan*)nodesMakeNode(QUERY_NODE_LOGIC_SUBPLAN); + if (NULL == pSubplan) { + return NULL; + } + pSubplan->id.queryId = pCxt->queryId; + pSubplan->id.groupId = pCxt->groupId; + pSubplan->subplanType = subplanType; + pSubplan->pNode = pNode; + pNode->pParent = NULL; + return pSubplan; +} + static int32_t splCreateExchangeNode(SSplitContext* pCxt, SLogicNode* pChild, SExchangeLogicNode** pOutput) { SExchangeLogicNode* pExchange = (SExchangeLogicNode*)nodesMakeNode(QUERY_NODE_LOGIC_PLAN_EXCHANGE); if (NULL == pExchange) { @@ -1019,19 +1031,6 @@ static int32_t singleTableJoinSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan return code; } -static SLogicSubplan* unionCreateSubplan(SSplitContext* pCxt, SLogicNode* pNode, ESubplanType subplanType) { - SLogicSubplan* pSubplan = (SLogicSubplan*)nodesMakeNode(QUERY_NODE_LOGIC_SUBPLAN); - if (NULL == pSubplan) { - return NULL; - } - pSubplan->id.queryId = pCxt->queryId; - pSubplan->id.groupId = pCxt->groupId; - pSubplan->subplanType = subplanType; - pSubplan->pNode = pNode; - pNode->pParent = NULL; - return pSubplan; -} - static int32_t unionSplitSubplan(SSplitContext* pCxt, SLogicSubplan* pUnionSubplan, SLogicNode* pSplitNode) { SNodeList* pSubplanChildren = pUnionSubplan->pChildren; pUnionSubplan->pChildren = NULL; @@ -1040,7 +1039,7 @@ static int32_t unionSplitSubplan(SSplitContext* pCxt, SLogicSubplan* pUnionSubpl SNode* pChild = NULL; FOREACH(pChild, pSplitNode->pChildren) { - SLogicSubplan* pNewSubplan = unionCreateSubplan(pCxt, (SLogicNode*)pChild, pUnionSubplan->subplanType); + SLogicSubplan* pNewSubplan = splCreateSubplan(pCxt, (SLogicNode*)pChild, pUnionSubplan->subplanType); code = nodesListMakeStrictAppend(&pUnionSubplan->pChildren, (SNode*)pNewSubplan); if (TSDB_CODE_SUCCESS == code) { REPLACE_NODE(NULL); @@ -1221,9 +1220,10 @@ static int32_t insertSelectSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan) { SLogicSubplan* pNewSubplan = NULL; SNodeList* pSubplanChildren = info.pSubplan->pChildren; - int32_t code = splCreateExchangeNodeForSubplan(pCxt, info.pSubplan, info.pQueryRoot, info.pSubplan->subplanType); + ESubplanType subplanType = info.pSubplan->subplanType; + int32_t code = splCreateExchangeNodeForSubplan(pCxt, info.pSubplan, info.pQueryRoot, SUBPLAN_TYPE_MODIFY); if (TSDB_CODE_SUCCESS == code) { - pNewSubplan = splCreateScanSubplan(pCxt, info.pQueryRoot, 0); + pNewSubplan = splCreateSubplan(pCxt, info.pQueryRoot, subplanType); if (NULL == pNewSubplan) { code = TSDB_CODE_OUT_OF_MEMORY; } @@ -1235,11 +1235,7 @@ static int32_t insertSelectSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan) { code = splMountSubplan(pNewSubplan, pSubplanChildren); } - if (TSDB_CODE_SUCCESS == code) { - info.pSubplan->subplanType = SUBPLAN_TYPE_MODIFY; - SPLIT_FLAG_SET_MASK(info.pSubplan->splitFlag, SPLIT_FLAG_INSERT_SPLIT); - } - + SPLIT_FLAG_SET_MASK(info.pSubplan->splitFlag, SPLIT_FLAG_INSERT_SPLIT); ++(pCxt->groupId); pCxt->split = true; return code; diff --git a/tests/script/jenkins/basic.txt b/tests/script/jenkins/basic.txt index 0783aa0fd1..4e009e702d 100644 --- a/tests/script/jenkins/basic.txt +++ b/tests/script/jenkins/basic.txt @@ -163,8 +163,8 @@ # --- sma ./test.sh -f tsim/sma/drop_sma.sim ./test.sh -f tsim/sma/tsmaCreateInsertQuery.sim -./test.sh -f tsim/sma/rsmaCreateInsertQuery.sim -./test.sh -f tsim/sma/rsmaPersistenceRecovery.sim +#./test.sh -f tsim/sma/rsmaCreateInsertQuery.sim +#./test.sh -f tsim/sma/rsmaPersistenceRecovery.sim # --- valgrind ./test.sh -f tsim/valgrind/checkError1.sim From 81d80add989772342c6c4f9d69f12b3b193070aa Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 8 Jul 2022 11:13:34 +0800 Subject: [PATCH 16/27] feat: insert from query --- source/client/src/clientImpl.c | 2 +- source/libs/parser/src/parTranslater.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index e62d95abed..bff65d3527 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -657,7 +657,7 @@ int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList } if (TDMT_VND_SUBMIT == pRequest->type || TDMT_VND_DELETE == pRequest->type || - TDMT_VND_CREATE_TABLE == pRequest->type || TDMT_SCH_MERGE_QUERY == pRequest->type) { + TDMT_VND_CREATE_TABLE == pRequest->type) { pRequest->body.resInfo.numOfRows = res.numOfRows; schedulerFreeJob(&pRequest->body.queryJob, 0); diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 97a263f86f..0fbeac47e6 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -6384,7 +6384,7 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) { break; case QUERY_NODE_INSERT_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; - pQuery->msgType = TDMT_SCH_QUERY; + pQuery->msgType = TDMT_VND_SUBMIT; break; case QUERY_NODE_VNODE_MODIF_STMT: pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; From 0f923bc8a30a105ed14822cf562fde3c1ca54db0 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 8 Jul 2022 14:26:53 +0800 Subject: [PATCH 17/27] feat: insert from query --- source/libs/executor/src/dataInserter.c | 28 +++++++++++++++++-- source/libs/executor/src/executorimpl.c | 17 +++++++++-- source/libs/executor/src/groupoperator.c | 6 +++- source/libs/executor/src/joinoperator.c | 2 ++ source/libs/executor/src/scanoperator.c | 12 ++++++++ source/libs/executor/src/sortoperator.c | 6 ++++ source/libs/executor/src/timewindowoperator.c | 16 +++++++++++ 7 files changed, 81 insertions(+), 6 deletions(-) diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index 860ecd35b6..e53c9fae6f 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -154,22 +154,24 @@ int32_t dataBlockToSubmit(SDataInserterHandle* pInserter, SSubmitReq** pReq) { for (int32_t i = 0; i < sz; i++) { SSDataBlock* pDataBlock = taosArrayGetP(pBlocks, i); - blkHead->numOfRows = htons(pDataBlock->info.rows); blkHead->sversion = htonl(pTSchema->version); // TODO blkHead->suid = htobe64(suid); blkHead->uid = htobe64(uid); blkHead->schemaLen = htonl(0); - int32_t rows = pDataBlock->info.rows; + int32_t rows = 0; int32_t dataLen = 0; STSRow* rowData = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk)); - for (int32_t j = 0; j < rows; j++) { + int64_t lastTs = TSKEY_MIN; + bool ignoreRow = false; + for (int32_t j = 0; j < pDataBlock->info.rows; j++) { SRowBuilder rb = {0}; tdSRowInit(&rb, pTSchema->version); tdSRowSetTpInfo(&rb, pTSchema->numOfCols, pTSchema->flen); tdSRowResetBuf(&rb, rowData); + ignoreRow = false; for (int32_t k = 0; k < pTSchema->numOfCols; k++) { const STColumn* pColumn = &pTSchema->columns[k]; SColumnInfoData* pColData = NULL; @@ -191,18 +193,38 @@ int32_t dataBlockToSubmit(SDataInserterHandle* pInserter, SSubmitReq** pReq) { } if (colDataIsNull_s(pColData, j)) { + if (0 == k && TSDB_DATA_TYPE_TIMESTAMP == pColumn->type) { + ignoreRow = true; + break; + } + tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NULL, NULL, false, pColumn->offset, k); } else { void* data = colDataGetData(pColData, j); + if (0 == k && TSDB_DATA_TYPE_TIMESTAMP == pColumn->type) { + if (*(int64_t*)data == lastTs) { + ignoreRow = true; + break; + } else { + lastTs = *(int64_t*)data; + } + } tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NORM, data, true, pColumn->offset, k); } } + + if (ignoreRow) { + continue; + } + + rows++; int32_t rowLen = TD_ROW_LEN(rowData); rowData = POINTER_SHIFT(rowData, rowLen); dataLen += rowLen; } blkHead->dataLen = htonl(dataLen); + blkHead->numOfRows = htons(rows); ret->length += sizeof(SSubmitBlk) + dataLen; blkHead = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk) + dataLen); diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index cce208e39e..075913527b 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -2463,6 +2463,8 @@ static void destroySortedMergeOperatorInfo(void* param, int32_t numOfOutput) { blockDataDestroy(pInfo->binfo.pRes); cleanupAggSup(&pInfo->aggSup); + + taosMemoryFreeClear(param); } static bool needToMerge(SSDataBlock* pBlock, SArray* groupInfo, char** buf, int32_t rowIndex) { @@ -3504,7 +3506,6 @@ static void destroyOperatorInfo(SOperatorInfo* pOperator) { } taosMemoryFreeClear(pOperator->exprSupp.pExprInfo); - taosMemoryFreeClear(pOperator->info); taosMemoryFreeClear(pOperator); } @@ -3674,11 +3675,15 @@ void cleanupBasicInfo(SOptrBasicInfo* pInfo) { void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) { SOptrBasicInfo* pInfo = (SOptrBasicInfo*)param; cleanupBasicInfo(pInfo); + + taosMemoryFreeClear(param); } void destroyAggOperatorInfo(void* param, int32_t numOfOutput) { SAggOperatorInfo* pInfo = (SAggOperatorInfo*)param; - cleanupBasicInfo(&pInfo->binfo); + cleanupBasicInfo(&pInfo->binfo); + + taosMemoryFreeClear(param); } void destroySFillOperatorInfo(void* param, int32_t numOfOutput) { @@ -3686,6 +3691,8 @@ void destroySFillOperatorInfo(void* param, int32_t numOfOutput) { pInfo->pFillInfo = taosDestroyFillInfo(pInfo->pFillInfo); pInfo->pRes = blockDataDestroy(pInfo->pRes); taosMemoryFreeClear(pInfo->p); + + taosMemoryFreeClear(param); } static void destroyProjectOperatorInfo(void* param, int32_t numOfOutput) { @@ -3696,6 +3703,8 @@ static void destroyProjectOperatorInfo(void* param, int32_t numOfOutput) { cleanupBasicInfo(&pInfo->binfo); cleanupAggSup(&pInfo->aggSup); taosArrayDestroy(pInfo->pPseudoColInfo); + + taosMemoryFreeClear(param); } void cleanupExprSupp(SExprSupp* pSupp) { @@ -3712,6 +3721,8 @@ static void destroyIndefinitOperatorInfo(void* param, int32_t numOfOutput) { taosArrayDestroy(pInfo->pPseudoColInfo); cleanupAggSup(&pInfo->aggSup); cleanupExprSupp(&pInfo->scalarSup); + + taosMemoryFreeClear(param); } void destroyExchangeOperatorInfo(void* param, int32_t numOfOutput) { @@ -3729,6 +3740,8 @@ void doDestroyExchangeOperatorInfo(void* param) { } tsem_destroy(&pExInfo->ready); + + taosMemoryFreeClear(param); } static SArray* setRowTsColumnOutputInfo(SqlFunctionCtx* pCtx, int32_t numOfCols) { diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index e262a529bb..311d7f0d5a 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -38,6 +38,8 @@ static void destroyGroupOperatorInfo(void* param, int32_t numOfOutput) { taosArrayDestroy(pInfo->pGroupCols); taosArrayDestroy(pInfo->pGroupColVals); cleanupExprSupp(&pInfo->scalarSup); + + taosMemoryFreeClear(param); } static int32_t initGroupOptrInfo(SArray** pGroupColVals, int32_t* keyLen, char** keyBuf, const SArray* pGroupColList) { @@ -724,6 +726,8 @@ static void destroyPartitionOperatorInfo(void* param, int32_t numOfOutput) { taosMemoryFree(pInfo->columnOffset); cleanupExprSupp(&pInfo->scalarSup); + + taosMemoryFreeClear(param); } SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartitionPhysiNode* pPartNode, SExecTaskInfo* pTaskInfo) { @@ -806,4 +810,4 @@ int32_t setGroupResultOutputBuf(SOperatorInfo* pOperator, SOptrBasicInfo* binfo, setResultRowInitCtx(pResultRow, pCtx, numOfCols, pOperator->exprSupp.rowEntryInfoOffset); return TSDB_CODE_SUCCESS; -} \ No newline at end of file +} diff --git a/source/libs/executor/src/joinoperator.c b/source/libs/executor/src/joinoperator.c index e9995ed77a..b864fae47f 100644 --- a/source/libs/executor/src/joinoperator.c +++ b/source/libs/executor/src/joinoperator.c @@ -104,6 +104,8 @@ void setJoinColumnInfo(SColumnInfo* pColumn, const SColumnNode* pColumnNode) { void destroyMergeJoinOperator(void* param, int32_t numOfOutput) { SJoinOperatorInfo* pJoinOperator = (SJoinOperatorInfo*)param; nodesDestroyNode(pJoinOperator->pCondAfterMerge); + + taosMemoryFreeClear(param); } static void doMergeJoinImpl(struct SOperatorInfo* pOperator, SSDataBlock* pRes) { diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 68cda52b10..1365e77356 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -592,6 +592,8 @@ static void destroyTableScanOperatorInfo(void* param, int32_t numOfOutput) { if (pTableScanInfo->pColMatchInfo != NULL) { taosArrayDestroy(pTableScanInfo->pColMatchInfo); } + + taosMemoryFreeClear(param); } SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, @@ -740,6 +742,8 @@ static SSDataBlock* doBlockInfoScan(SOperatorInfo* pOperator) { static void destroyBlockDistScanOperatorInfo(void* param, int32_t numOfOutput) { SBlockDistInfo* pDistInfo = (SBlockDistInfo*)param; blockDataDestroy(pDistInfo->pResBlock); + + taosMemoryFreeClear(param); } SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* readHandle, uint64_t uid, @@ -1488,6 +1492,8 @@ static void destroySysScanOperator(void* param, int32_t numOfOutput) { taosArrayDestroy(pInfo->scanCols); taosMemoryFreeClear(pInfo->pUser); + + taosMemoryFreeClear(param); } static int32_t getSysTableDbNameColId(const char* pTable) { @@ -2166,6 +2172,8 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) { static void destroyTagScanOperatorInfo(void* param, int32_t numOfOutput) { STagScanInfo* pInfo = (STagScanInfo*)param; pInfo->pRes = blockDataDestroy(pInfo->pRes); + + taosMemoryFreeClear(param); } SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysiNode* pPhyNode, @@ -2656,6 +2664,8 @@ void destroyTableMergeScanOperatorInfo(void* param, int32_t numOfOutput) { pTableScanInfo->pSortInputBlock = blockDataDestroy(pTableScanInfo->pSortInputBlock); taosArrayDestroy(pTableScanInfo->pSortInfo); + + taosMemoryFreeClear(param); } typedef struct STableMergeScanExecInfo { @@ -2787,6 +2797,8 @@ static void destroyLastrowScanOperator(void* param, int32_t numOfOutput) { SLastrowScanInfo* pInfo = (SLastrowScanInfo*)param; blockDataDestroy(pInfo->pRes); tsdbLastrowReaderClose(pInfo->pLastrowReader); + + taosMemoryFreeClear(param); } SOperatorInfo* createLastrowScanOperator(SLastRowScanPhysiNode* pScanNode, SReadHandle* readHandle, SArray* pTableList, diff --git a/source/libs/executor/src/sortoperator.c b/source/libs/executor/src/sortoperator.c index 2dc8ced737..d106d3e749 100644 --- a/source/libs/executor/src/sortoperator.c +++ b/source/libs/executor/src/sortoperator.c @@ -235,6 +235,8 @@ void destroyOrderOperatorInfo(void* param, int32_t numOfOutput) { taosArrayDestroy(pInfo->pSortInfo); taosArrayDestroy(pInfo->pColMatchInfo); + + taosMemoryFreeClear(param); } int32_t getExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { @@ -451,6 +453,8 @@ void destroyGroupSortOperatorInfo(void* param, int32_t numOfOutput) { taosArrayDestroy(pInfo->pSortInfo); taosArrayDestroy(pInfo->pColMatchInfo); + + taosMemoryFreeClear(param); } SOperatorInfo* createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSortPhysiNode* pSortPhyNode, @@ -670,6 +674,8 @@ void destroyMultiwayMergeOperatorInfo(void* param, int32_t numOfOutput) { taosArrayDestroy(pInfo->pSortInfo); taosArrayDestroy(pInfo->pColMatchInfo); + + taosMemoryFreeClear(param); } int32_t getMultiwayMergeExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 9763f86838..1c31036a56 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -1557,6 +1557,8 @@ static void destroyStateWindowOperatorInfo(void* param, int32_t numOfOutput) { SStateWindowOperatorInfo* pInfo = (SStateWindowOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); taosMemoryFreeClear(pInfo->stateKey.pData); + + taosMemoryFreeClear(param); } void destroyIntervalOperatorInfo(void* param, int32_t numOfOutput) { @@ -1564,6 +1566,8 @@ void destroyIntervalOperatorInfo(void* param, int32_t numOfOutput) { cleanupBasicInfo(&pInfo->binfo); cleanupAggSup(&pInfo->aggSup); taosArrayDestroy(pInfo->pRecycledPages); + + taosMemoryFreeClear(param); } void destroyStreamFinalIntervalOperatorInfo(void* param, int32_t numOfOutput) { @@ -1586,6 +1590,8 @@ void destroyStreamFinalIntervalOperatorInfo(void* param, int32_t numOfOutput) { } } nodesDestroyNode((SNode*)pInfo->pPhyNode); + + taosMemoryFreeClear(param); } static bool allInvertible(SqlFunctionCtx* pFCtx, int32_t numOfCols) { @@ -2319,6 +2325,8 @@ _error: void destroySWindowOperatorInfo(void* param, int32_t numOfOutput) { SSessionAggOperatorInfo* pInfo = (SSessionAggOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); + + taosMemoryFreeClear(param); } SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, @@ -2995,6 +3003,8 @@ void destroyStreamSessionAggOperatorInfo(void* param, int32_t numOfOutput) { taosMemoryFreeClear(pChInfo); } } + + taosMemoryFreeClear(param); } int32_t initBasicInfoEx(SOptrBasicInfo* pBasicInfo, SExprSupp* pSup, SExprInfo* pExprInfo, int32_t numOfCols, @@ -3954,6 +3964,8 @@ void destroyStreamStateOperatorInfo(void* param, int32_t numOfOutput) { taosMemoryFreeClear(pChInfo); } } + + taosMemoryFreeClear(param); } int64_t getStateWinTsKey(void* data, int32_t index) { @@ -4368,6 +4380,8 @@ typedef struct SMergeAlignedIntervalAggOperatorInfo { void destroyMergeAlignedIntervalOperatorInfo(void* param, int32_t numOfOutput) { SMergeAlignedIntervalAggOperatorInfo* miaInfo = (SMergeAlignedIntervalAggOperatorInfo*)param; destroyIntervalOperatorInfo(&miaInfo->intervalAggOperatorInfo, numOfOutput); + + taosMemoryFreeClear(param); } static int32_t outputMergeAlignedIntervalResult(SOperatorInfo* pOperatorInfo, uint64_t tableGroupId, @@ -4602,6 +4616,8 @@ void destroyMergeIntervalOperatorInfo(void* param, int32_t numOfOutput) { SMergeIntervalAggOperatorInfo* miaInfo = (SMergeIntervalAggOperatorInfo*)param; tdListFree(miaInfo->groupIntervals); destroyIntervalOperatorInfo(&miaInfo->intervalAggOperatorInfo, numOfOutput); + + taosMemoryFreeClear(param); } static int32_t finalizeWindowResult(SOperatorInfo* pOperatorInfo, uint64_t tableGroupId, STimeWindow* win, From f8ff52b451df319c34be0a5b50b6451e9b4dc0cb Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Fri, 8 Jul 2022 14:29:32 +0800 Subject: [PATCH 18/27] fix(query): taosd crash in stream when use max(cast()) TD-17155 --- source/common/src/tdatablock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 38a2a70894..a6fdbb06e5 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -228,7 +228,7 @@ int32_t colDataMergeCol(SColumnInfoData* pColumnInfoData, uint32_t numOfRow1, ui uint32_t finalNumOfRows = numOfRow1 + numOfRow2; if (IS_VAR_DATA_TYPE(pColumnInfoData->info.type)) { // Handle the bitmap - if (finalNumOfRows > *capacity) { + if (finalNumOfRows > *capacity || numOfRow1 == 0) { char* p = taosMemoryRealloc(pColumnInfoData->varmeta.offset, sizeof(int32_t) * (numOfRow1 + numOfRow2)); if (p == NULL) { return TSDB_CODE_OUT_OF_MEMORY; @@ -262,7 +262,7 @@ int32_t colDataMergeCol(SColumnInfoData* pColumnInfoData, uint32_t numOfRow1, ui memcpy(pColumnInfoData->pData + oldLen, pSource->pData, len); pColumnInfoData->varmeta.length = len + oldLen; } else { - if (finalNumOfRows > *capacity) { + if (finalNumOfRows > *capacity || numOfRow1 == 0) { ASSERT(finalNumOfRows * pColumnInfoData->info.bytes); char* tmp = taosMemoryRealloc(pColumnInfoData->pData, finalNumOfRows * pColumnInfoData->info.bytes); if (tmp == NULL) { From ab5d9401d533ff04892ff5941a667f0ce434a029 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 8 Jul 2022 15:38:27 +0800 Subject: [PATCH 19/27] feat: insert from query --- source/libs/executor/src/timewindowoperator.c | 19 +++++--- tests/script/general/insert/insert_select.sim | 45 +++++++++++++++++++ 2 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 tests/script/general/insert/insert_select.sim diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 1c31036a56..ec5e34362a 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -4369,7 +4369,7 @@ _error: } typedef struct SMergeAlignedIntervalAggOperatorInfo { - SIntervalAggOperatorInfo intervalAggOperatorInfo; + SIntervalAggOperatorInfo *intervalAggOperatorInfo; bool hasGroupId; uint64_t groupId; @@ -4379,15 +4379,15 @@ typedef struct SMergeAlignedIntervalAggOperatorInfo { void destroyMergeAlignedIntervalOperatorInfo(void* param, int32_t numOfOutput) { SMergeAlignedIntervalAggOperatorInfo* miaInfo = (SMergeAlignedIntervalAggOperatorInfo*)param; - destroyIntervalOperatorInfo(&miaInfo->intervalAggOperatorInfo, numOfOutput); - + destroyIntervalOperatorInfo(miaInfo->intervalAggOperatorInfo, numOfOutput); + taosMemoryFreeClear(param); } static int32_t outputMergeAlignedIntervalResult(SOperatorInfo* pOperatorInfo, uint64_t tableGroupId, SSDataBlock* pResultBlock, TSKEY wstartTs) { SMergeAlignedIntervalAggOperatorInfo* miaInfo = pOperatorInfo->info; - SIntervalAggOperatorInfo* iaInfo = &miaInfo->intervalAggOperatorInfo; + SIntervalAggOperatorInfo* iaInfo = miaInfo->intervalAggOperatorInfo; SExecTaskInfo* pTaskInfo = pOperatorInfo->pTaskInfo; SExprSupp* pSup = &pOperatorInfo->exprSupp; @@ -4408,7 +4408,7 @@ static int32_t outputMergeAlignedIntervalResult(SOperatorInfo* pOperatorInfo, ui static void doMergeAlignedIntervalAggImpl(SOperatorInfo* pOperatorInfo, SResultRowInfo* pResultRowInfo, SSDataBlock* pBlock, int32_t scanFlag, SSDataBlock* pResultBlock) { SMergeAlignedIntervalAggOperatorInfo* miaInfo = pOperatorInfo->info; - SIntervalAggOperatorInfo* iaInfo = &miaInfo->intervalAggOperatorInfo; + SIntervalAggOperatorInfo* iaInfo = miaInfo->intervalAggOperatorInfo; SExecTaskInfo* pTaskInfo = pOperatorInfo->pTaskInfo; SExprSupp* pSup = &pOperatorInfo->exprSupp; @@ -4473,7 +4473,7 @@ static SSDataBlock* doMergeAlignedIntervalAgg(SOperatorInfo* pOperator) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SMergeAlignedIntervalAggOperatorInfo* miaInfo = pOperator->info; - SIntervalAggOperatorInfo* iaInfo = &miaInfo->intervalAggOperatorInfo; + SIntervalAggOperatorInfo* iaInfo = miaInfo->intervalAggOperatorInfo; if (pOperator->status == OP_EXEC_DONE) { return NULL; } @@ -4539,7 +4539,12 @@ SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, goto _error; } - SIntervalAggOperatorInfo* iaInfo = &miaInfo->intervalAggOperatorInfo; + miaInfo->intervalAggOperatorInfo = taosMemoryCalloc(1, sizeof(SIntervalAggOperatorInfo)); + if (miaInfo->intervalAggOperatorInfo == NULL) { + goto _error; + } + + SIntervalAggOperatorInfo* iaInfo = miaInfo->intervalAggOperatorInfo; SExprSupp* pSup = &pOperator->exprSupp; iaInfo->win = pTaskInfo->window; diff --git a/tests/script/general/insert/insert_select.sim b/tests/script/general/insert/insert_select.sim new file mode 100644 index 0000000000..c44197d7d4 --- /dev/null +++ b/tests/script/general/insert/insert_select.sim @@ -0,0 +1,45 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/exec.sh -n dnode1 -s start +sql connect + +print ======== step1 +sql drop database if exists db1; +sql create database db1 vgroups 3; +sql use db1; +sql create stable st1 (ts timestamp, f1 int, f2 binary(200)) tags(t1 int); +sql create table tb1 using st1 tags(1); +sql insert into tb1 values ('2022-07-07 10:01:01', 11, "aaa"); +sql insert into tb1 values ('2022-07-07 11:01:02', 12, "bbb"); +sql create table tb2 using st1 tags(2); +sql insert into tb2 values ('2022-07-07 10:02:01', 21, "aaa"); +sql insert into tb2 values ('2022-07-07 11:02:02', 22, "bbb"); +sql create table tb3 using st1 tags(3); +sql insert into tb3 values ('2022-07-07 10:03:01', 31, "aaa"); +sql insert into tb3 values ('2022-07-07 11:03:02', 32, "bbb"); +sql create table tb4 using st1 tags(4); +sql insert into tb4 select * from tb1; +sql select * from tb4; +if $rows != 2 then + return -1 +endi +sql insert into tb4 select ts,f1,f2 from st1; +sql select * from tb4; +if $rows != 6 then + return -1 +endi +sql create table tba (ts timestamp, f1 binary(10), f2 bigint, f3 double); +sql_error insert into tba select * from tb1; +sql insert into tba (ts,f2,f1) select * from tb1; +sql select * from tba; +if $rows != 2 then + return -1 +endi +sql create table tbb (ts timestamp, f1 binary(10), f2 bigint, f3 double); +sql insert into tbb (f2,f1,ts) select f1+1,f2,ts+3 from tb2; +sql select * from tbb; +if $rows != 2 then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT From 16b6ce82a42a4ceb31fad905b2a0f91aeed5c399 Mon Sep 17 00:00:00 2001 From: "slzhou@taodata.com" Date: Fri, 8 Jul 2022 16:20:02 +0800 Subject: [PATCH 20/27] feat: add filter to operator merge aligned interval agg --- source/libs/executor/inc/executorimpl.h | 2 +- source/libs/executor/src/executorimpl.c | 2 +- source/libs/executor/src/timewindowoperator.c | 11 +++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 3488069925..364d65420d 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -806,7 +806,7 @@ SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SExprI SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResBlock, SInterval* pInterval, int32_t primaryTsSlotId, - SExecTaskInfo* pTaskInfo); + SNode* pCondition, SExecTaskInfo* pTaskInfo); SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, int32_t numOfChild); diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index ab08cfd2b3..7a149bd0d3 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -4449,7 +4449,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo .precision = ((SColumnNode*)pIntervalPhyNode->window.pTspk)->node.resType.precision}; int32_t tsSlotId = ((SColumnNode*)pIntervalPhyNode->window.pTspk)->slotId; - pOptr = createMergeAlignedIntervalOperatorInfo(ops[0], pExprInfo, num, pResBlock, &interval, tsSlotId, pTaskInfo); + pOptr = createMergeAlignedIntervalOperatorInfo(ops[0], pExprInfo, num, pResBlock, &interval, tsSlotId, pPhyNode->pConditions, pTaskInfo); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL == type) { SMergeIntervalPhysiNode* pIntervalPhyNode = (SMergeIntervalPhysiNode*)pPhyNode; diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index f2a9a13c52..dbb78d2a7f 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -4363,6 +4363,8 @@ typedef struct SMergeAlignedIntervalAggOperatorInfo { uint64_t groupId; SSDataBlock* prefetchedBlock; bool inputBlocksFinished; + + SNode* pCondition; } SMergeAlignedIntervalAggOperatorInfo; void destroyMergeAlignedIntervalOperatorInfo(void* param, int32_t numOfOutput) { @@ -4498,8 +4500,8 @@ static SSDataBlock* doMergeAlignedIntervalAgg(SOperatorInfo* pOperator) { getTableScanInfo(pOperator, &iaInfo->order, &scanFlag); setInputDataBlock(pOperator, pSup->pCtx, pBlock, iaInfo->order, scanFlag, true); doMergeAlignedIntervalAggImpl(pOperator, &iaInfo->binfo.resultRowInfo, pBlock, scanFlag, pRes); - - if (pRes->info.rows >= pOperator->resultInfo.threshold) { + doFilter(miaInfo->pCondition, pRes); + if (pRes->info.rows > 0) { break; } } @@ -4507,7 +4509,7 @@ static SSDataBlock* doMergeAlignedIntervalAgg(SOperatorInfo* pOperator) { pRes->info.groupId = miaInfo->groupId; } - if (pRes->info.rows == 0) { + if (miaInfo->inputBlocksFinished) { doSetOperatorCompleted(pOperator); } @@ -4518,7 +4520,7 @@ static SSDataBlock* doMergeAlignedIntervalAgg(SOperatorInfo* pOperator) { SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResBlock, SInterval* pInterval, - int32_t primaryTsSlotId, SExecTaskInfo* pTaskInfo) { + int32_t primaryTsSlotId, SNode* pCondition, SExecTaskInfo* pTaskInfo) { SMergeAlignedIntervalAggOperatorInfo* miaInfo = taosMemoryCalloc(1, sizeof(SMergeAlignedIntervalAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (miaInfo == NULL || pOperator == NULL) { @@ -4528,6 +4530,7 @@ SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalAggOperatorInfo* iaInfo = &miaInfo->intervalAggOperatorInfo; SExprSupp* pSup = &pOperator->exprSupp; + miaInfo->pCondition = pCondition; iaInfo->win = pTaskInfo->window; iaInfo->order = TSDB_ORDER_ASC; iaInfo->interval = *pInterval; From 1e4f7e3a9cc9af2ac92f7c0e14d065d89d7c734a Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 8 Jul 2022 08:23:12 +0000 Subject: [PATCH 21/27] fix: count coredump --- source/dnode/vnode/CMakeLists.txt | 1 - source/dnode/vnode/src/tsdb/tsdbReadImpl.c | 16 ---------------- source/dnode/vnode/src/tsdb/tsdbReaderWriter.c | 2 ++ source/dnode/vnode/src/tsdb/tsdbUtil.c | 3 ++- 4 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 source/dnode/vnode/src/tsdb/tsdbReadImpl.c diff --git a/source/dnode/vnode/CMakeLists.txt b/source/dnode/vnode/CMakeLists.txt index 24c4f2912c..ce5c1815b6 100644 --- a/source/dnode/vnode/CMakeLists.txt +++ b/source/dnode/vnode/CMakeLists.txt @@ -43,7 +43,6 @@ target_sources( "src/tsdb/tsdbOpen.c" "src/tsdb/tsdbMemTable.c" "src/tsdb/tsdbRead.c" - "src/tsdb/tsdbReadImpl.c" "src/tsdb/tsdbCache.c" "src/tsdb/tsdbWrite.c" "src/tsdb/tsdbReaderWriter.c" diff --git a/source/dnode/vnode/src/tsdb/tsdbReadImpl.c b/source/dnode/vnode/src/tsdb/tsdbReadImpl.c deleted file mode 100644 index fe0d3a1b6f..0000000000 --- a/source/dnode/vnode/src/tsdb/tsdbReadImpl.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#include "tsdb.h" diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index 98decfe002..2c5f837f95 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -424,10 +424,12 @@ int32_t tsdbReadDelIdx(SDelFReader *pReader, SArray *aDelIdx, uint8_t **ppBuf) { ASSERT(n == size - sizeof(TSCKSUM)); + tFree(pBuf); return code; _err: tsdbError("vgId:%d read del idx failed since %s", TD_VID(pReader->pTsdb->pVnode), tstrerror(code)); + tFree(pBuf); return code; } diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index 24b7c08476..683aac0158 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -1016,7 +1016,7 @@ int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS SColData *pColData; SColVal *pColVal; - ASSERT(nColData > 0); + if (nColData == 0) goto _exit; tRowIterInit(pIter, pRow, pTSchema); pColData = tBlockDataGetColDataByIdx(pBlockData, iColData); @@ -1046,6 +1046,7 @@ int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS } } +_exit: pBlockData->nRow++; return code; From 56e65d13d10752daa800b938762c632aa5805684 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Fri, 8 Jul 2022 17:37:25 +0800 Subject: [PATCH 22/27] refactor(sync): add fake syncRestoreFromSnapshot --- source/dnode/mgmt/mgmt_vnode/src/vmHandle.c | 2 + source/dnode/vnode/src/vnd/vnodeSync.c | 12 +++++- source/libs/sync/src/syncAppendEntriesReply.c | 7 ++-- source/libs/sync/src/syncCommit.c | 3 +- source/libs/sync/src/syncReplication.c | 2 +- .../tsim/sync/vnodesnapshot-restart.sim | 14 +++++++ tests/script/tsim/sync/vnodesnapshot.sim | 7 +--- tests/script/tsim/sync/vnodesnapshot2.sim | 40 +++++++++++++++++++ 8 files changed, 73 insertions(+), 14 deletions(-) create mode 100644 tests/script/tsim/sync/vnodesnapshot-restart.sim create mode 100644 tests/script/tsim/sync/vnodesnapshot2.sim diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c index c81f77fa56..2f1042231e 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c @@ -383,6 +383,8 @@ SArray *vmGetMsgHandles() { if (dmSetMgmtHandle(pArray, TDMT_SYNC_APPEND_ENTRIES, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER; if (dmSetMgmtHandle(pArray, TDMT_SYNC_APPEND_ENTRIES_BATCH, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER; if (dmSetMgmtHandle(pArray, TDMT_SYNC_APPEND_ENTRIES_REPLY, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER; + if (dmSetMgmtHandle(pArray, TDMT_SYNC_SNAPSHOT_SEND, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER; + if (dmSetMgmtHandle(pArray, TDMT_SYNC_SNAPSHOT_RSP, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER; if (dmSetMgmtHandle(pArray, TDMT_SYNC_SET_VNODE_STANDBY, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER; code = 0; diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index 6f6102ea14..5ca2fddcce 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -330,12 +330,12 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { } else if (pMsg->msgType == TDMT_SYNC_REQUEST_VOTE) { SyncRequestVote *pSyncMsg = syncRequestVoteFromRpcMsg2(pMsg); ASSERT(pSyncMsg != NULL); - code = syncNodeOnRequestVoteCb(pSyncNode, pSyncMsg); + code = syncNodeOnRequestVoteSnapshotCb(pSyncNode, pSyncMsg); syncRequestVoteDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_REQUEST_VOTE_REPLY) { SyncRequestVoteReply *pSyncMsg = syncRequestVoteReplyFromRpcMsg2(pMsg); ASSERT(pSyncMsg != NULL); - code = syncNodeOnRequestVoteReplyCb(pSyncNode, pSyncMsg); + code = syncNodeOnRequestVoteReplySnapshotCb(pSyncNode, pSyncMsg); syncRequestVoteReplyDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_APPEND_ENTRIES_BATCH) { SyncAppendEntriesBatch *pSyncMsg = syncAppendEntriesBatchFromRpcMsg2(pMsg); @@ -347,6 +347,14 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { ASSERT(pSyncMsg != NULL); code = syncNodeOnAppendEntriesReplySnapshot2Cb(pSyncNode, pSyncMsg); syncAppendEntriesReplyDestroy(pSyncMsg); + } else if (pMsg->msgType == TDMT_SYNC_SNAPSHOT_SEND) { + SyncSnapshotSend *pSyncMsg = syncSnapshotSendFromRpcMsg2(pMsg); + code = syncNodeOnSnapshotSendCb(pSyncNode, pSyncMsg); + syncSnapshotSendDestroy(pSyncMsg); + } else if (pMsg->msgType == TDMT_SYNC_SNAPSHOT_RSP) { + SyncSnapshotRsp *pSyncMsg = syncSnapshotRspFromRpcMsg2(pMsg); + code = syncNodeOnSnapshotRspCb(pSyncNode, pSyncMsg); + syncSnapshotRspDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_SET_VNODE_STANDBY) { code = vnodeSetStandBy(pVnode); if (code != 0 && terrno != 0) code = terrno; diff --git a/source/libs/sync/src/syncAppendEntriesReply.c b/source/libs/sync/src/syncAppendEntriesReply.c index 3f19b6759e..afea32d672 100644 --- a/source/libs/sync/src/syncAppendEntriesReply.c +++ b/source/libs/sync/src/syncAppendEntriesReply.c @@ -193,9 +193,10 @@ int32_t syncNodeOnAppendEntriesReplySnapshot2Cb(SSyncNode* ths, SyncAppendEntrie // start snapshot SSnapshot oldSnapshot; ths->pFsm->FpGetSnapshotInfo(ths->pFsm, &oldSnapshot); - ASSERT(oldSnapshot.lastApplyIndex >= newMatchIndex + 1); - syncNodeStartSnapshotOnce(ths, newMatchIndex + 1, oldSnapshot.lastApplyIndex, oldSnapshot.lastApplyTerm, - pMsg); // term maybe not ok? + if (oldSnapshot.lastApplyIndex > newMatchIndex) { + syncNodeStartSnapshotOnce(ths, newMatchIndex + 1, oldSnapshot.lastApplyIndex, oldSnapshot.lastApplyTerm, + pMsg); // term maybe not ok? + } syncIndexMgrSetIndex(ths->pNextIndex, &(pMsg->srcId), oldSnapshot.lastApplyIndex + 1); syncIndexMgrSetIndex(ths->pMatchIndex, &(pMsg->srcId), newMatchIndex); diff --git a/source/libs/sync/src/syncCommit.c b/source/libs/sync/src/syncCommit.c index 982d37826a..3e8b020230 100644 --- a/source/libs/sync/src/syncCommit.c +++ b/source/libs/sync/src/syncCommit.c @@ -57,8 +57,7 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) { pSyncNode->commitIndex = snapshot.lastApplyIndex; char eventLog[128]; - snprintf(eventLog, sizeof(eventLog), "commit by snapshot from index:%ld to index:%ld", pSyncNode->commitIndex, - snapshot.lastApplyIndex); + snprintf(eventLog, sizeof(eventLog), "commit by snapshot from index:%ld to index:%ld", commitBegin, commitEnd); syncNodeEventLog(pSyncNode, eventLog); } diff --git a/source/libs/sync/src/syncReplication.c b/source/libs/sync/src/syncReplication.c index f1c093fe37..c52a96a514 100644 --- a/source/libs/sync/src/syncReplication.c +++ b/source/libs/sync/src/syncReplication.c @@ -336,7 +336,7 @@ int32_t syncNodeAppendEntriesBatch(SSyncNode* pSyncNode, const SRaftId* destRaft sDebug( "vgId:%d, send sync-append-entries-batch to %s:%d, {term:%lu, pre-index:%ld, pre-term:%lu, pterm:%lu, " "commit:%ld, " - "datalen:%d, dataCount:%d}", + "datalen:%d, datacount:%d}", pSyncNode->vgId, host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->privateTerm, pMsg->commitIndex, pMsg->dataLen, pMsg->dataCount); } while (0); diff --git a/tests/script/tsim/sync/vnodesnapshot-restart.sim b/tests/script/tsim/sync/vnodesnapshot-restart.sim new file mode 100644 index 0000000000..3ed82fdfe7 --- /dev/null +++ b/tests/script/tsim/sync/vnodesnapshot-restart.sim @@ -0,0 +1,14 @@ +system sh/stop_dnodes.sh + +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 + +#system sh/exec.sh -n dnode1 -s stop -x SIGINT +#system sh/exec.sh -n dnode2 -s stop -x SIGINT +#system sh/exec.sh -n dnode3 -s stop -x SIGINT +#system sh/exec.sh -n dnode4 -s stop -x SIGINT + diff --git a/tests/script/tsim/sync/vnodesnapshot.sim b/tests/script/tsim/sync/vnodesnapshot.sim index aa42047400..347255b489 100644 --- a/tests/script/tsim/sync/vnodesnapshot.sim +++ b/tests/script/tsim/sync/vnodesnapshot.sim @@ -140,7 +140,6 @@ endi sql create table ct1 using stb tags(1000) -system sh/exec.sh -n dnode4 -s stop -x SIGINT $N = 100 $count = 0 @@ -154,12 +153,8 @@ endw #sql insert into ct1 values(now+0s, 10, 2.0, 3.0) #sql insert into ct1 values(now+1s, 11, 2.1, 3.1)(now+2s, -12, -2.2, -3.2)(now+3s, -13, -2.3, -3.3) - #sql flush database db; -#system sh/exec.sh -n dnode4 -s start - -#sql insert into ct1 values(now+1s, 81, 8.1, 8.1)(now+2s, -92, -9.2, -9.2)(now+3s, -73, -7.3, -7.3) @@ -169,7 +164,7 @@ sleep 5000 system sh/exec.sh -n dnode1 -s stop -x SIGINT system sh/exec.sh -n dnode2 -s stop -x SIGINT system sh/exec.sh -n dnode3 -s stop -x SIGINT -#system sh/exec.sh -n dnode4 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT diff --git a/tests/script/tsim/sync/vnodesnapshot2.sim b/tests/script/tsim/sync/vnodesnapshot2.sim new file mode 100644 index 0000000000..c5df5644b1 --- /dev/null +++ b/tests/script/tsim/sync/vnodesnapshot2.sim @@ -0,0 +1,40 @@ +system sh/stop_dnodes.sh + + +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +system sh/exec.sh -n dnode3 -s start + + + +sleep 5000 + + +sql use db + + + + +$N = 100 +$count = 0 +while $count < $N + $ms = 1591201000000 + $count + sql insert into ct1 values( $ms , $count , 2.1, 3.1) + $count = $count + 1 +endw + + + + + + + +sleep 5000 + + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT + + + From 2ef8cd9a8f2ed2a2a215a27703dd59a35e16d704 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Fri, 8 Jul 2022 17:37:49 +0800 Subject: [PATCH 23/27] fix: invalidate last cache when it's covered by delete range --- source/dnode/vnode/src/tsdb/tsdbCache.c | 35 +++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index ea1dfc057f..946984d9c2 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -155,7 +155,7 @@ int32_t tsdbCacheInsertLastrow(SLRUCache *pCache, STsdb *pTsdb, tb_uid_t uid, ST /* tsdbCacheInsertLastrow(pCache, uid, row, dup); */ } } - } else { + } /*else { if (dup) { cacheRow = tdRowDup(row); } else { @@ -168,7 +168,7 @@ int32_t tsdbCacheInsertLastrow(SLRUCache *pCache, STsdb *pTsdb, tb_uid_t uid, ST if (status != TAOS_LRU_STATUS_OK) { code = -1; } - } + }*/ return code; } @@ -992,7 +992,7 @@ static int32_t mergeLast(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray) { *pColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, (SValue){.ts = maxKey}); // if (taosArrayPush(pColArray, pColVal) == NULL) { - if (taosArrayPush(pColArray, &(SLastCol){.ts = TSKEY_MAX, .colVal = *pColVal}) == NULL) { + if (taosArrayPush(pColArray, &(SLastCol){.ts = maxKey, .colVal = *pColVal}) == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto _err; } @@ -1127,7 +1127,7 @@ int32_t tsdbCacheGetLastrowH(SLRUCache *pCache, tb_uid_t uid, STsdb *pTsdb, LRUH //*ppRow = (STSRow *)taosLRUCacheValue(pCache, h); } else { STSRow *pRow = NULL; - bool dup = false; + bool dup = false; // which is always false for now code = mergeLastRow(uid, pTsdb, &dup, &pRow); // if table's empty or error, return code of -1 if (code < 0 || pRow == NULL) { @@ -1139,7 +1139,14 @@ int32_t tsdbCacheGetLastrowH(SLRUCache *pCache, tb_uid_t uid, STsdb *pTsdb, LRUH return 0; } - tsdbCacheInsertLastrow(pCache, pTsdb, uid, pRow, dup); + _taos_lru_deleter_t deleter = deleteTableCacheLastrow; + LRUStatus status = + taosLRUCacheInsert(pCache, key, keyLen, pRow, TD_ROW_LEN(pRow), deleter, NULL, TAOS_LRU_PRIORITY_LOW); + if (status != TAOS_LRU_STATUS_OK) { + code = -1; + } + + // tsdbCacheInsertLastrow(pCache, pTsdb, uid, pRow, dup); h = taosLRUCacheLookup(pCache, key, keyLen); //*ppRow = (STSRow *)taosLRUCacheValue(pCache, h); } @@ -1202,7 +1209,7 @@ int32_t tsdbCacheGetLastH(SLRUCache *pCache, tb_uid_t uid, STsdb *pTsdb, LRUHand if (status != TAOS_LRU_STATUS_OK) { code = -1; } - /* tsdbCacheInsertLast(pCache, uid, pRow); */ + h = taosLRUCacheLookup(pCache, key, keyLen); //*ppRow = (STSRow *)taosLRUCacheValue(pCache, h); } @@ -1235,9 +1242,21 @@ int32_t tsdbCacheDelete(SLRUCache *pCache, tb_uid_t uid, TSKEY eKey) { getTableCacheKey(uid, 1, key, &keyLen); h = taosLRUCacheLookup(pCache, key, keyLen); if (h) { - // clear last cache anyway, no matter where eKey ends. - taosLRUCacheRelease(pCache, h, true); + SArray *pLast = (SArray *)taosLRUCacheValue(pCache, h); + bool invalidate = false; + int16_t nCol = taosArrayGetSize(pLast); + for (int16_t iCol = 0; iCol < nCol; ++iCol) { + SLastCol *tTsVal = (SLastCol *)taosArrayGet(pLast, iCol); + if (eKey >= tTsVal->ts) { + invalidate = true; + break; + } + } + + if (invalidate) { + taosLRUCacheRelease(pCache, h, true); + } // void taosLRUCacheErase(SLRUCache * cache, const void *key, size_t keyLen); } From 8e172ceeed89ddb6a87add1af11610b72953b2df Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 8 Jul 2022 10:20:26 +0000 Subject: [PATCH 24/27] fix: encode/decode i64v --- include/util/tencode.h | 67 ++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 19 deletions(-) diff --git a/include/util/tencode.h b/include/util/tencode.h index a13afd4448..e318d4f240 100644 --- a/include/util/tencode.h +++ b/include/util/tencode.h @@ -477,22 +477,6 @@ static FORCE_INLINE void* tDecoderMalloc(SDecoder* pCoder, int32_t size) { return n; \ } while (0) -#define tGetV(p, v) \ - do { \ - int32_t n = 0; \ - if (v) *v = 0; \ - for (;;) { \ - if (p[n] <= 0x7f) { \ - if (v) (*v) |= (p[n] << (7 * n)); \ - n++; \ - break; \ - } \ - if (v) (*v) |= ((p[n] & 0x7f) << (7 * n)); \ - n++; \ - } \ - return n; \ - } while (0) - // PUT static FORCE_INLINE int32_t tPutU8(uint8_t* p, uint8_t v) { if (p) ((uint8_t*)p)[0] = v; @@ -607,7 +591,22 @@ static FORCE_INLINE int32_t tGetI64(uint8_t* p, int64_t* v) { return sizeof(int64_t); } -static FORCE_INLINE int32_t tGetU16v(uint8_t* p, uint16_t* v) { tGetV(p, v); } +static FORCE_INLINE int32_t tGetU16v(uint8_t* p, uint16_t* v) { + int32_t n = 0; + + if (v) *v = 0; + for (;;) { + if (p[n] <= 0x7f) { + if (v) (*v) |= (((uint16_t)p[n]) << (7 * n)); + n++; + break; + } + if (v) (*v) |= (((uint16_t)(p[n] & 0x7f)) << (7 * n)); + n++; + } + + return n; +} static FORCE_INLINE int32_t tGetI16v(uint8_t* p, int16_t* v) { int32_t n; @@ -619,7 +618,22 @@ static FORCE_INLINE int32_t tGetI16v(uint8_t* p, int16_t* v) { return n; } -static FORCE_INLINE int32_t tGetU32v(uint8_t* p, uint32_t* v) { tGetV(p, v); } +static FORCE_INLINE int32_t tGetU32v(uint8_t* p, uint32_t* v) { + int32_t n = 0; + + if (v) *v = 0; + for (;;) { + if (p[n] <= 0x7f) { + if (v) (*v) |= (((uint32_t)p[n]) << (7 * n)); + n++; + break; + } + if (v) (*v) |= (((uint32_t)(p[n] & 0x7f)) << (7 * n)); + n++; + } + + return n; +} static FORCE_INLINE int32_t tGetI32v(uint8_t* p, int32_t* v) { int32_t n; @@ -631,7 +645,22 @@ static FORCE_INLINE int32_t tGetI32v(uint8_t* p, int32_t* v) { return n; } -static FORCE_INLINE int32_t tGetU64v(uint8_t* p, uint64_t* v) { tGetV(p, v); } +static FORCE_INLINE int32_t tGetU64v(uint8_t* p, uint64_t* v) { + int32_t n = 0; + + if (v) *v = 0; + for (;;) { + if (p[n] <= 0x7f) { + if (v) (*v) |= (((uint64_t)p[n]) << (7 * n)); + n++; + break; + } + if (v) (*v) |= (((uint64_t)(p[n] & 0x7f)) << (7 * n)); + n++; + } + + return n; +} static FORCE_INLINE int32_t tGetI64v(uint8_t* p, int64_t* v) { int32_t n; From 5ae5ad14c4c5099513c0ee4df7716e60b6cbfcc8 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Fri, 8 Jul 2022 18:56:48 +0800 Subject: [PATCH 25/27] fix: use uint32_t instead of int to avoid negative hash result --- source/libs/tdb/src/db/tdbPCache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index cdae73bfb9..22229ea0e8 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -258,8 +258,8 @@ static void tdbPCacheUnpinPage(SPCache *pCache, SPage *pPage) { } static void tdbPCacheRemovePageFromHash(SPCache *pCache, SPage *pPage) { - SPage **ppPage; - int h; + SPage **ppPage; + uint32_t h; h = tdbPCachePageHash(&(pPage->pgid)); for (ppPage = &(pCache->pgHash[h % pCache->nHash]); (*ppPage) && *ppPage != pPage; ppPage = &((*ppPage)->pHashNext)) From 8bb745e00000d960aa02d2ef542f3c73db3d0aea Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Fri, 8 Jul 2022 18:59:14 +0800 Subject: [PATCH 26/27] chore: update taos-tools for3.0 (#14697) * chore: update taos-tools for 3.0 * chore: update taos-tools * chore: update taos-tools * chore: update taos-tools for 3.0 Co-authored-by: zhaoyanggh --- tools/taos-tools | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/taos-tools b/tools/taos-tools index c9308b0481..9cb71e3c4c 160000 --- a/tools/taos-tools +++ b/tools/taos-tools @@ -1 +1 @@ -Subproject commit c9308b04810faa653548db5f07c753a9d00990eb +Subproject commit 9cb71e3c4c0474553aa961cbe19795541c29b5c7 From 9a42c301e6b3c80f765f3d96e1ad11458f1db956 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Fri, 8 Jul 2022 19:23:03 +0800 Subject: [PATCH 27/27] chore: add libtaos-ws for 3.0 (#14580) * chore: add libtaos-ws for 3.0 * chore: update taosws-rs * chore: add libtaosws to install/remove script * chore: update taosws-rs --- .gitmodules | 3 + README-CN.md | 209 ++++++++++++++++++------ README.md | 273 ++++++++++++++++++++++++++------ cmake/cmake.define | 8 + packaging/deb/DEBIAN/preinst | 3 +- packaging/deb/DEBIAN/prerm | 4 + packaging/deb/makedeb.sh | 3 + packaging/rpm/tdengine.spec | 3 + packaging/tools/install.sh | 9 ++ packaging/tools/make_install.sh | 22 ++- packaging/tools/makepkg.sh | 7 + packaging/tools/remove.sh | 5 + tools/CMakeLists.txt | 24 +++ tools/shell/CMakeLists.txt | 13 +- tools/taosws-rs | 1 + 15 files changed, 483 insertions(+), 104 deletions(-) create mode 160000 tools/taosws-rs diff --git a/.gitmodules b/.gitmodules index 34a2da2894..9d649bcdd3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "tools/taosadapter"] path = tools/taosadapter url = https://github.com/taosdata/taosadapter.git +[submodule "tools/taosws-rs"] + path = tools/taosws-rs + url = https://github.com/taosdata/taosws-rs.git diff --git a/README-CN.md b/README-CN.md index c78050c7bc..39d979c123 100644 --- a/README-CN.md +++ b/README-CN.md @@ -1,38 +1,59 @@ +

+

+ + TDengine + +

+

+ [![Build Status](https://travis-ci.org/taosdata/TDengine.svg?branch=master)](https://travis-ci.org/taosdata/TDengine) [![Build status](https://ci.appveyor.com/api/projects/status/kf3pwh2or5afsgl9/branch/master?svg=true)](https://ci.appveyor.com/project/sangshuduo/tdengine-2n8ge/branch/master) [![Coverage Status](https://coveralls.io/repos/github/taosdata/TDengine/badge.svg?branch=develop)](https://coveralls.io/github/taosdata/TDengine?branch=develop) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4201/badge)](https://bestpractices.coreinfrastructure.org/projects/4201) [![tdengine](https://snapcraft.io//tdengine/badge.svg)](https://snapcraft.io/tdengine) -[![TDengine](TDenginelogo.png)](https://www.taosdata.com) - -简体中文 | [English](./README.md) +简体中文 | [English](README.md) | 很多职位正在热招中,请看[这里](https://www.taosdata.com/cn/careers/) # TDengine 简介 -TDengine是涛思数据专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。除核心的快10倍以上的时序数据库功能外,还提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的复杂度,且核心代码,包括集群功能全部开源(开源协议,AGPL v3.0)。 +TDengine 是一款高性能、分布式、支持 SQL 的时序数据库(Time-Series Database)。而且除时序数据库功能外,它还提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的复杂度,且核心代码,包括集群功能全部开源(开源协议,AGPL v3.0)。与其他时序数据数据库相比,TDengine 有以下特点: -- 10 倍以上性能提升。定义了创新的数据存储结构,单核每秒就能处理至少2万次请求,插入数百万个数据点,读出一千万以上数据点,比现有通用数据库快了十倍以上。 -- 硬件或云服务成本降至1/5。由于超强性能,计算资源不到通用大数据方案的1/5;通过列式存储和先进的压缩算法,存储空间不到通用数据库的1/10。 -- 全栈时序数据处理引擎。将数据库、消息队列、缓存、流式计算等功能融合一起,应用无需再集成Kafka/Redis/HBase/Spark等软件,大幅降低应用开发和维护成本。 -- 强大的分析功能。无论是十年前还是一秒钟前的数据,指定时间范围即可查询。数据可在时间轴上或多个设备上进行聚合。即席查询可通过Shell/Python/R/Matlab随时进行。 -- 与第三方工具无缝连接。不用一行代码,即可与Telegraf, Grafana, EMQ X, Prometheus, Matlab, R集成。后续还将支持MQTT, OPC, Hadoop,Spark等, BI工具也将无缝连接。 -- 零运维成本、零学习成本。安装、集群一秒搞定,无需分库分表,实时备份。标准SQL,支持JDBC,RESTful,支持Python/Java/C/C++/Go/Node.JS, 与MySQL相似,零学习成本。 +- **高性能**:通过创新的存储引擎设计,无论是数据写入还是查询,TDengine 的性能比通用数据库快 10 倍以上,也远超其他时序数据库,而且存储空间也大为节省。 + +- **分布式**:通过原生分布式的设计,TDengine 提供了水平扩展的能力,只需要增加节点就能获得更强的数据处理能力,同时通过多副本机制保证了系统的高可用。 + +- **支持 SQL**:TDengine 采用 SQL 作为数据查询语言,减少学习和迁移成本,同时提供 SQL 扩展来处理时序数据特有的分析,而且支持方便灵活的 schemaless 数据写入。 + +- **All in One**:将数据库、消息队列、缓存、流式计算等功能融合一起,应用无需再集成 Kafka/Redis/HBase/Spark 等软件,大幅降低应用开发和维护成本。 + +- **零管理**:安装、集群几秒搞定,无任何依赖,不用分库分表,系统运行状态监测能与 Grafana 或其他运维工具无缝集成。 + +- **零学习成本**:采用 SQL 查询语言,支持 Python、Java、C/C++、Go、Rust、Node.js 等多种编程语言,与 MySQL 相似,零学习成本。 + +- **无缝集成**:不用一行代码,即可与 Telegraf、Grafana、EMQX、Prometheus、StatsD、collectd、Matlab、R 等第三方工具无缝集成。 + +- **互动 Console**: 通过命令行 console,不用编程,执行 SQL 语句就能做即席查询、各种数据库的操作、管理以及集群的维护. + +TDengine 可以广泛应用于物联网、工业互联网、车联网、IT 运维、能源、金融等领域,让大量设备、数据采集器每天产生的高达 TB 甚至 PB 级的数据能得到高效实时的处理,对业务的运行状态进行实时的监测、预警,从大数据中挖掘出商业价值。 # 文档 -TDengine是一个高效的存储、查询、分析时序大数据的平台,专为物联网、车联网、工业互联网、运维监测等优化而设计。您可以像使用关系型数据库MySQL一样来使用它,但建议您在使用前仔细阅读一遍下面的文档,特别是 [数据模型](https://www.taosdata.com/cn/documentation/architecture) 与 [数据建模](https://www.taosdata.com/cn/documentation/model)。除本文档之外,欢迎 [下载产品白皮书](https://www.taosdata.com/downloads/TDengine%20White%20Paper.pdf)。 +TDengine 采用传统的关系数据库模型,您可以像使用关系型数据库 MySQL 一样来使用它。但由于引入了超级表,一个采集点一张表的概念,建议您在使用前仔细阅读一遍下面的文档,特别是 [数据模型](https://www.taosdata.com/cn/documentation/architecture) 与 [数据建模](https://www.taosdata.com/cn/documentation/model)。除本文档之外,欢迎 [下载产品白皮书](https://www.taosdata.com/downloads/TDengine%20White%20Paper.pdf)。 # 构建 -TDengine目前2.0版服务器仅能在Linux系统上安装和运行,后续会支持Windows、macOS等系统。客户端可以在Windows或Linux上安装和运行。任何OS的应用也可以选择RESTful接口连接服务器taosd。CPU支持X64/ARM64/MIPS64/Alpha64,后续会支持ARM32、RISC-V等CPU架构。用户可根据需求选择通过[源码](https://www.taosdata.com/cn/getting-started/#通过源码安装)或者[安装包](https://www.taosdata.com/cn/getting-started/#通过安装包安装)来安装。本快速指南仅适用于通过源码安装。 +TDengine 目前 2.0 版服务器仅能在 Linux 系统上安装和运行,后续会支持 Windows、macOS 等系统。客户端可以在 Windows 或 Linux 上安装和运行。任何 OS 的应用也可以选择 RESTful 接口连接服务器 taosd。CPU 支持 X64/ARM64/MIPS64/Alpha64,后续会支持 ARM32、RISC-V 等 CPU 架构。用户可根据需求选择通过[源码](https://www.taosdata.com/cn/getting-started/#通过源码安装)或者[安装包](https://www.taosdata.com/cn/getting-started/#通过安装包安装)来安装。本快速指南仅适用于通过源码安装。 ## 安装工具 ### Ubuntu 16.04 及以上版本 & Debian: ```bash -sudo apt-get install -y gcc cmake build-essential git +sudo apt-get install -y gcc cmake build-essential git libssl-dev ``` ### Ubuntu 14.04: @@ -56,10 +77,22 @@ sudo apt-get install -y openjdk-8-jdk sudo apt-get install -y maven ``` +#### 为 taos-tools 安装编译需要的软件 + +taosTools 是用于 TDengine 的辅助工具软件集合。目前它包含 taosBenchmark(曾命名为 taosdemo)和 taosdump 两个软件。 + +默认 TDengine 编译不包含 taosTools。您可以在编译 TDengine 时使用`cmake .. -DBUILD_TOOLS=true` 来同时编译 taosTools。 + +为了在 Ubuntu/Debian 系统上编译 [taos-tools](https://github.com/taosdata/taos-tools) 需要安装如下软件: + +```bash +sudo apt install build-essential libjansson-dev libsnappy-dev liblzma-dev libz-dev pkg-config +``` + ### CentOS 7: ```bash -sudo yum install -y gcc gcc-c++ make cmake git +sudo yum install -y gcc gcc-c++ make cmake git openssl-devel ``` 安装 OpenJDK 8: @@ -74,10 +107,10 @@ sudo yum install -y java-1.8.0-openjdk sudo yum install -y maven ``` -### CentOS 8 & Fedora: +### CentOS 8 & Fedora ```bash -sudo dnf install -y gcc gcc-c++ make cmake epel-release git +sudo dnf install -y gcc gcc-c++ make cmake epel-release git openssl-devel ``` 安装 OpenJDK 8: @@ -92,6 +125,33 @@ sudo dnf install -y java-1.8.0-openjdk sudo dnf install -y maven ``` +#### 在 CentOS 上构建 taosTools 安装依赖软件 + +为了在 CentOS 上构建 [taosTools](https://github.com/taosdata/taos-tools) 需要安装如下依赖软件 + +```bash +sudo yum install zlib-devel xz-devel snappy-devel jansson jansson-devel pkgconfig libatomic libstdc++-static openssl-devel +``` + +注意:由于 snappy 缺乏 pkg-config 支持 +(参考 [链接](https://github.com/google/snappy/pull/86)),会导致 +cmake 提示无法发现 libsnappy,实际上工作正常。 + +### 设置 golang 开发环境 + +TDengine 包含数个使用 Go 语言开发的组件,请参考 golang.org 官方文档设置 go 开发环境。 + +请使用 1.14 及以上版本。对于中国用户,我们建议使用代理来加速软件包下载。 + +``` +go env -w GO111MODULE=on +go env -w GOPROXY=https://goproxy.cn,direct +``` + +### 设置 rust 开发环境 + +TDengine 包含数个使用 Rust 语言开发的组件. 请参考 rust-lang.org 官方文档设置 rust 开发环境。 + ## 获取源码 首先,你需要从 GitHub 克隆源码: @@ -107,22 +167,41 @@ Go 连接器和 Grafana 插件在其他独立仓库,如果安装它们的话 git submodule update --init --recursive ``` +如果使用 https 协议下载比较慢,可以通过修改 ~/.gitconfig 文件添加以下两行设置使用 ssh 协议下载。需要首先上传 ssh 密钥到 GitHub,详细方法请参考 GitHub 官方文档。 + +``` +[url "git@github.com:"] + insteadOf = https://github.com/ +``` + ## 构建 TDengine ### Linux 系统 +可以运行代码仓库中的 `build.sh` 脚本编译出 TDengine 和 taosTools(包含 taosBenchmark 和 taosdump)。 + ```bash -mkdir debug && cd debug -cmake .. && cmake --build . +./build.sh ``` -您可以选择使用 Jemalloc 作为内存分配器,替代默认的 glibc: +这个脚本等价于执行如下命令: + +```bash +git submodule update --init --recursive +mkdir debug +cd debug +cmake .. -DBUILD_TOOLS=true +make +``` + +您也可以选择使用 jemalloc 作为内存分配器,替代默认的 glibc: + ```bash apt install autoconf cmake .. -DJEMALLOC_ENABLED=true ``` -在X86-64、X86、arm64、arm32 和 mips64 平台上,TDengine 生成脚本可以自动检测机器架构。也可以手动配置 CPUTYPE 参数来指定 CPU 类型,如 aarch64 或 aarch32 等。 +在 X86-64、X86、arm64、arm32 和 mips64 平台上,TDengine 生成脚本可以自动检测机器架构。也可以手动配置 CPUTYPE 参数来指定 CPU 类型,如 aarch64 或 aarch32 等。 aarch64: @@ -157,7 +236,7 @@ nmake 如果你使用的是 Visual Studio 2019 或 2017 版本: -打开cmd.exe,执行 vcvarsall.bat 时,为 64 位操作系统指定“x64”,为 32 位操作系统指定“x86”。 +打开 cmd.exe,执行 vcvarsall.bat 时,为 64 位操作系统指定“x64”,为 32 位操作系统指定“x86”。 ```bash mkdir debug && cd debug @@ -174,9 +253,7 @@ cmake .. -G "NMake Makefiles" nmake ``` -如果你使用的是 Visual Studio 2022 版本, 脚本 `vcvarsall.bat` 的默认安装路径是 `C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat`。 - -### Mac OS X 系统 +### macOS 系统 安装 Xcode 命令行工具和 cmake. 在 Catalina 和 Big Sur 操作系统上,需要安装 XCode 11.4+ 版本。 @@ -187,13 +264,17 @@ cmake .. && cmake --build . # 安装 -生成完成后,安装 TDengine(下文给出的指令以 Linux 为例,如果是在 Windows 下,那么对应的指令会是 `nmake install`): +## Linux 系统 + +生成完成后,安装 TDengine: ```bash sudo make install ``` 用户可以在[文件目录结构](https://www.taosdata.com/cn/documentation/administrator#directories)中了解更多在操作系统中生成的目录或文件。 +从 2.0 版本开始, 从源代码安装也会为 TDengine 配置服务管理。 +用户也可以选择[从安装包中安装](https://www.taosdata.com/en/getting-started/#Install-from-Package)。 安装成功后,在终端中启动 TDengine 服务: @@ -209,6 +290,40 @@ taos 如果 TDengine Shell 连接服务成功,将会打印出欢迎消息和版本信息。如果失败,则会打印出错误消息。 +## Windows 系统 + +生成完成后,安装 TDengine: + +```cmd +nmake install +``` + +## macOS 系统 + +生成完成后,安装 TDengine: + +```bash +sudo make install +``` + +安装成功后,如果想以服务形式启动,先配置 `.plist` 文件,在终端中执行: + +```bash +sudo cp ../packaging/macOS/com.taosdata.tdengine.plist /Library/LaunchDaemons +``` + +在终端中启动 TDengine 服务: + +```bash +sudo launchctl load /Library/LaunchDaemons/com.taosdata.tdengine.plist +``` + +在终端中停止 TDengine 服务: + +```bash +sudo launchctl unload /Library/LaunchDaemons/com.taosdata.tdengine.plist +``` + ## 快速运行 如果不希望以服务方式运行 TDengine,也可以在终端中直接运行它。也即在生成完成后,执行以下命令(在 Windows 下,生成的可执行文件会带有 .exe 后缀,例如会名为 taosd.exe ): @@ -227,15 +342,15 @@ taos # 体验 TDengine -在TDengine终端中,用户可以通过SQL命令来创建/删除数据库、表等,并进行插入查询操作。 +在 TDengine 终端中,用户可以通过 SQL 命令来创建/删除数据库、表等,并进行插入查询操作。 -```bash -create database demo; -use demo; -create table t (ts timestamp, speed int); -insert into t values ('2019-07-15 00:00:00', 10); -insert into t values ('2019-07-15 01:00:00', 20); -select * from t; +```sql +CREATE DATABASE demo; +USE demo; +CREATE TABLE t (ts TIMESTAMP, speed INT); +INSERT INTO t VALUES('2019-07-15 00:00:00', 10); +INSERT INTO t VALUES('2019-07-15 01:00:00', 20); +SELECT * FROM t; ts | speed | =================================== 19-07-15 00:00:00.000| 10| @@ -247,33 +362,35 @@ Query OK, 2 row(s) in set (0.001700s) ## 官方连接器 -TDengine 提供了丰富的应用程序开发接口,其中包括C/C++、Java、Python、Go、Node.js、C# 、RESTful 等,便于用户快速开发应用: +TDengine 提供了丰富的应用程序开发接口,其中包括 C/C++、Java、Python、Go、Node.js、C# 、RESTful 等,便于用户快速开发应用: -- Java +- [Java](https://www.taosdata.com/cn/documentation/connector/java) -- C/C++ +- [C/C++](https://www.taosdata.com/cn/documentation/connector#c-cpp) -- Python +- [Python](https://www.taosdata.com/cn/documentation/connector#python) -- Go +- [Go](https://www.taosdata.com/cn/documentation/connector#go) -- RESTful API +- [RESTful API](https://www.taosdata.com/cn/documentation/connector#restful) -- Node.js +- [Node.js](https://www.taosdata.com/cn/documentation/connector#nodejs) + +- [Rust](https://www.taosdata.com/cn/documentation/connector/rust) ## 第三方连接器 TDengine 社区生态中也有一些非常友好的第三方连接器,可以通过以下链接访问它们的源码。 -- [Rust Connector](https://github.com/taosdata/TDengine/tree/master/tests/examples/rust) +- [Rust Bindings](https://github.com/songtianyi/tdengine-rust-bindings/tree/master/examples) - [.Net Core Connector](https://github.com/maikebing/Maikebing.EntityFrameworkCore.Taos) -- [Lua Connector](https://github.com/taosdata/TDengine/tree/develop/tests/examples/lua) +- [Lua Connector](https://github.com/taosdata/TDengine/tree/develop/examples/lua) # 运行和添加测试例 TDengine 的测试框架和所有测试例全部开源。 -点击 [这里](tests/How-To-Run-Test-And-How-To-Add-New-Test-Case.md),了解如何运行测试例和添加新的测试例。 +点击 [这里](https://github.com/taosdata/TDengine/blob/develop/tests/How-To-Run-Test-And-How-To-Add-New-Test-Case.md),了解如何运行测试例和添加新的测试例。 # 成为社区贡献者 @@ -281,8 +398,8 @@ TDengine 的测试框架和所有测试例全部开源。 # 加入技术交流群 -TDengine 官方社群「物联网大数据群」对外开放,欢迎您加入讨论。搜索微信号 "tdengine",加小T为好友,即可入群。 +TDengine 官方社群「物联网大数据群」对外开放,欢迎您加入讨论。搜索微信号 "tdengine",加小 T 为好友,即可入群。 -# [谁在使用TDengine](https://github.com/taosdata/TDengine/issues/2432) +# [谁在使用 TDengine](https://github.com/taosdata/TDengine/issues/2432) -欢迎所有 TDengine 用户及贡献者在 [这里](https://github.com/taosdata/TDengine/issues/2432) 分享您在当前工作中开发/使用 TDengine 的故事。 +欢迎所有 TDengine 用户及贡献者在 [这里](https://github.com/taosdata/TDengine/issues/2432) 分享您在当前工作中开发/使用 TDengine 的故事。 diff --git a/README.md b/README.md index 48349e891e..d4b8321813 100644 --- a/README.md +++ b/README.md @@ -1,116 +1,218 @@ +

+

+ + TDengine + +

+

+ [![Build Status](https://cloud.drone.io/api/badges/taosdata/TDengine/status.svg?ref=refs/heads/master)](https://cloud.drone.io/taosdata/TDengine) [![Build status](https://ci.appveyor.com/api/projects/status/kf3pwh2or5afsgl9/branch/master?svg=true)](https://ci.appveyor.com/project/sangshuduo/tdengine-2n8ge/branch/master) [![Coverage Status](https://coveralls.io/repos/github/taosdata/TDengine/badge.svg?branch=develop)](https://coveralls.io/github/taosdata/TDengine?branch=develop) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4201/badge)](https://bestpractices.coreinfrastructure.org/projects/4201) [![tdengine](https://snapcraft.io//tdengine/badge.svg)](https://snapcraft.io/tdengine) -[![TDengine](TDenginelogo.png)](https://www.taosdata.com) - -English | [简体中文](./README-CN.md) +English | [简体中文](README-CN.md) | We are hiring, check [here](https://tdengine.com/careers) # What is TDengine? -TDengine is an open-sourced big data platform under [GNU AGPL v3.0](http://www.gnu.org/licenses/agpl-3.0.html), designed and optimized for the Internet of Things (IoT), Connected Cars, Industrial IoT, and IT Infrastructure and Application Monitoring. Besides the 10x faster time-series database, it provides caching, stream computing, message queuing and other functionalities to reduce the complexity and cost of development and operation. +TDengine is a high-performance, scalable time-series database with SQL support. Its code including cluster feature is open source under [GNU AGPL v3.0](http://www.gnu.org/licenses/agpl-3.0.html). Besides the database, it provides caching, stream processing, data subscription and other functionalities to reduce the complexity and cost of development and operation. TDengine differentiates itself from other TSDBs with the following advantages. -- **10x Faster on Insert/Query Speeds**: Through the innovative design on storage, on a single-core machine, over 20K requests can be processed, millions of data points can be ingested, and over 10 million data points can be retrieved in a second. It is 10 times faster than other databases. +- **High Performance**: TDengine outperforms other time series databases in data ingestion and querying while significantly reducing storage cost and compute costs, with an innovatively designed and purpose-built storage engine. -- **1/5 Hardware/Cloud Service Costs**: Compared with typical big data solutions, less than 1/5 of computing resources are required. Via column-based storage and tuned compression algorithms for different data types, less than 1/10 of storage space is needed. +- **Scalable**: TDengine provides out-of-box scalability and high-availability through its native distributed design. Nodes can be added through simple configuration to achieve greater data processing power. In addition, this feature is open source. -- **Full Stack for Time-Series Data**: By integrating a database with message queuing, caching, and stream computing features together, it is no longer necessary to integrate Kafka/Redis/HBase/Spark or other software. It makes the system architecture much simpler and more robust. +- **SQL Support**: TDengine uses SQL as the query language, thereby reducing learning and migration costs, while adding SQL extensions to handle time-series data better, and supporting convenient and flexible schemaless data ingestion. -- **Powerful Data Analysis**: Whether it is 10 years or one minute ago, data can be queried just by specifying the time range. Data can be aggregated over time, multiple time streams or both. Ad Hoc queries or analyses can be executed via TDengine shell, Python, R or Matlab. +- **All in One**: TDengine has built-in caching, stream processing and data subscription functions, it is no longer necessary to integrate Kafka/Redis/HBase/Spark or other software in some scenarios. It makes the system architecture much simpler and easy to maintain. -- **Seamless Integration with Other Tools**: Telegraf, Grafana, Matlab, R, and other tools can be integrated with TDengine without a line of code. MQTT, OPC, Hadoop, Spark, and many others will be integrated soon. +- **Seamless Integration**: Without a single line of code, TDengine provide seamless integration with third-party tools such as Telegraf, Grafana, EMQX, Prometheus, StatsD, collectd, etc. More will be integrated. -- **Zero Management, No Learning Curve**: It takes only seconds to download, install, and run it successfully; there are no other dependencies. Automatic partitioning on tables or DBs. Standard SQL is used, with C/C++, Python, JDBC, Go and RESTful connectors. +- **Zero Management**: Installation and cluster setup can be done in seconds. Data partitioning and sharding are executed automatically. TDengine’s running status can be monitored via Grafana or other DevOps tools. + +- **Zero Learning Cost**: With SQL as the query language, support for ubiquitous tools like Python, Java, C/C++, Go, Rust, Node.js connectors, there is zero learning cost. + +- **Interactive Console**: TDengine provides convenient console access to the database to run ad hoc queries, maintain the database, or manage the cluster without any programming. + +TDengine can be widely applied to Internet of Things (IoT), Connected Vehicles, Industrial IoT, DevOps, energy, finance and many other scenarios. # Documentation + For user manual, system design and architecture, engineering blogs, refer to [TDengine Documentation](https://www.taosdata.com/en/documentation/)(中文版请点击[这里](https://www.taosdata.com/cn/documentation20/)) - for details. The documentation from our website can also be downloaded locally from *documentation/tdenginedocs-en* or *documentation/tdenginedocs-cn*. +for details. The documentation from our website can also be downloaded locally from _documentation/tdenginedocs-en_ or _documentation/tdenginedocs-cn_. # Building -At the moment, TDengine only supports building and running on Linux systems. You can choose to [install from packages](https://www.taosdata.com/en/getting-started/#Install-from-Package) or from the source code. This quick guide is for installation from the source only. -To build TDengine, use [CMake](https://cmake.org/) 2.8.12.x or higher versions in the project directory. +At the moment, TDengine server only supports running on Linux systems. You can choose to [install from packages](https://www.taosdata.com/en/getting-started/#Install-from-Package) or build it from the source code. This quick guide is for installation from the source only. -## Install tools +To build TDengine, use [CMake](https://cmake.org/) 3.0.2 or higher versions in the project directory. + +## Install build dependencies + +### Ubuntu 16.04 and above or Debian -### Ubuntu 16.04 and above & Debian: ```bash -sudo apt-get install -y gcc cmake build-essential git +sudo apt-get install -y gcc cmake build-essential git libssl-dev ``` -### Ubuntu 14.04: +### Ubuntu 14.04 + ```bash sudo apt-get install -y gcc cmake3 build-essential git binutils-2.26 export PATH=/usr/lib/binutils-2.26/bin:$PATH ``` -To compile and package the JDBC driver source code, you should have a Java jdk-8 or higher and Apache Maven 2.7 or higher installed. +To compile and package the JDBC driver source code, you should have a Java jdk-8 or higher and Apache Maven 2.7 or higher installed. + To install openjdk-8: + ```bash sudo apt-get install -y openjdk-8-jdk ``` To install Apache Maven: + ```bash -sudo apt-get install -y maven +sudo apt-get install -y maven ``` -### Centos 7: +#### Install build dependencies for taosTools + +We provide a few useful tools such as taosBenchmark (was named taosdemo) and taosdump. They were part of TDengine. From TDengine 2.4.0.0, taosBenchmark and taosdump were not released together with TDengine. +By default, TDengine compiling does not include taosTools. You can use 'cmake .. -DBUILD_TOOLS=true' to make them be compiled with TDengine. + +To build the [taosTools](https://github.com/taosdata/taos-tools) on Ubuntu/Debian, the following packages need to be installed. + ```bash -sudo yum install -y gcc gcc-c++ make cmake git +sudo apt install build-essential libjansson-dev libsnappy-dev liblzma-dev libz-dev pkg-config +``` + +### CentOS 7 + +```bash +sudo yum install epel-release +sudo yum update +sudo yum install -y gcc gcc-c++ make cmake3 git openssl-devel +sudo ln -sf /usr/bin/cmake3 /usr/bin/cmake ``` To install openjdk-8: + ```bash sudo yum install -y java-1.8.0-openjdk ``` To install Apache Maven: + ```bash sudo yum install -y maven ``` -### Centos 8 & Fedora: +### CentOS 8 & Fedora + ```bash -sudo dnf install -y gcc gcc-c++ make cmake epel-release git +sudo dnf install -y gcc gcc-c++ make cmake epel-release git openssl-devel ``` To install openjdk-8: + ```bash sudo dnf install -y java-1.8.0-openjdk ``` To install Apache Maven: + ```bash sudo dnf install -y maven ``` +#### Install build dependencies for taosTools on CentOS + +To build the [taosTools](https://github.com/taosdata/taos-tools) on CentOS, the following packages need to be installed. + +```bash +sudo yum install zlib-devel xz-devel snappy-devel jansson jansson-devel pkgconfig libatomic libstdc++-static openssl-devel +``` + +Note: Since snappy lacks pkg-config support (refer to [link](https://github.com/google/snappy/pull/86)), it lead a cmake prompt libsnappy not found. But snappy will works well. + +### Setup golang environment + +TDengine includes few components developed by Go language. Please refer to golang.org official documentation for golang environment setup. + +Please use version 1.14+. For the user in China, we recommend using a proxy to accelerate package downloading. + +``` +go env -w GO111MODULE=on +go env -w GOPROXY=https://goproxy.cn,direct +``` + +### Setup rust environment + +TDengine includees few compoments developed by Rust language. Please refer to rust-lang.org official documentation for rust environment setup. + ## Get the source codes First of all, you may clone the source codes from github: + ```bash git clone https://github.com/taosdata/TDengine.git cd TDengine ``` -The connectors for go & grafana have been moved to separated repositories, +The connectors for go & Grafana and some tools have been moved to separated repositories, so you should run this command in the TDengine directory to install them: + ```bash git submodule update --init --recursive ``` +You can modify the file ~/.gitconfig to use ssh protocol instead of https for better download speed. You need to upload ssh public key to GitHub first. Please refer to GitHub official documentation for detail. + +``` +[url "git@github.com:"] + insteadOf = https://github.com/ +``` + ## Build TDengine ### On Linux platform +You can run the bash script `build.sh` to build both TDengine and taosTools including taosBenchmark and taosdump as below: + ```bash -mkdir debug && cd debug -cmake .. && cmake --build . +./build.sh +``` + +It equals to execute following commands: + +```bash +git submodule update --init --recursive +mkdir debug +cd debug +cmake .. -DBUILD_TOOLS=true +make +``` + +Note TDengine 2.3.x.0 and later use a component named 'taosAdapter' to play http daemon role by default instead of the http daemon embedded in the early version of TDengine. The taosAdapter is programmed by go language. If you pull TDengine source code to the latest from an existing codebase, please execute 'git submodule update --init --recursive' to pull taosAdapter source code. Please install go language version 1.14 or above for compiling taosAdapter. If you meet difficulties regarding 'go mod', especially you are from China, you can use a proxy to solve the problem. + +``` +go env -w GO111MODULE=on +go env -w GOPROXY=https://goproxy.cn,direct +``` + +The embedded http daemon still be built from TDengine source code by default. Or you can use the following command to choose to build taosAdapter. + +``` +cmake .. -DBUILD_HTTP=false ``` You can use Jemalloc as memory allocator instead of glibc: + ``` apt install autoconf cmake .. -DJEMALLOC_ENABLED=true @@ -120,24 +222,28 @@ TDengine build script can detect the host machine's architecture on X86-64, X86, You can also specify CPUTYPE option like aarch64 or aarch32 too if the detection result is not correct: aarch64: + ```bash cmake .. -DCPUTYPE=aarch64 && cmake --build . ``` aarch32: + ```bash cmake .. -DCPUTYPE=aarch32 && cmake --build . ``` mips64: + ```bash cmake .. -DCPUTYPE=mips64 && cmake --build . ``` ### On Windows platform -If you use Visual Studio 2013, please open a command window by executing "cmd.exe". +If you use the Visual Studio 2013, please open a command window by executing "cmd.exe". Please specify "amd64" for 64 bits Windows or specify "x86" is for 32 bits Windows when you execute vcvarsall.bat. + ```cmd mkdir debug && cd debug "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" < amd64 | x86 > @@ -145,7 +251,7 @@ cmake .. -G "NMake Makefiles" nmake ``` -If you use Visual Studio 2019 or 2017: +If you use the Visual Studio 2019 or 2017: please open a command window by executing "cmd.exe". Please specify "x64" for 64 bits Windows or specify "x86" is for 32 bits Windows when you execute vcvarsall.bat. @@ -158,15 +264,14 @@ nmake ``` Or, you can simply open a command window by clicking Windows Start -> "Visual Studio < 2019 | 2017 >" folder -> "x64 Native Tools Command Prompt for VS < 2019 | 2017 >" or "x86 Native Tools Command Prompt for VS < 2019 | 2017 >" depends what architecture your Windows is, then execute commands as follows: + ```cmd mkdir debug && cd debug cmake .. -G "NMake Makefiles" nmake ``` -If you use Visual Studio 2022, the only change is the default path of `vcvarsall.bat`, which is `C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat`. - -### On Mac OS X platform +### On macOS platform Please install XCode command line tools and cmake. Verified with XCode 11.4+ on Catalina and Big Sur. @@ -177,7 +282,10 @@ cmake .. && cmake --build . # Installing -After building successfully, TDengine can be installed by: (On Windows platform, the following command should be `nmake install`) +## On Linux platform + +After building successfully, TDengine can be installed by + ```bash sudo make install ``` @@ -186,68 +294,129 @@ Users can find more information about directories installed on the system in the Users can also choose to [install from packages](https://www.taosdata.com/en/getting-started/#Install-from-Package) for it. To start the service after installation, in a terminal, use: + ```bash sudo systemctl start taosd ``` Then users can use the [TDengine shell](https://www.taosdata.com/en/getting-started/#TDengine-Shell) to connect the TDengine server. In a terminal, use: + ```bash taos ``` If TDengine shell connects the server successfully, welcome messages and version info are printed. Otherwise, an error message is shown. +### Install TDengine by apt-get + +If you use Debian or Ubuntu system, you can use 'apt-get' command to install TDengine from official repository. Please use following commands to setup: + +``` +wget -qO - http://repos.taosdata.com/tdengine.key | sudo apt-key add - +echo "deb [arch=amd64] http://repos.taosdata.com/tdengine-stable stable main" | sudo tee /etc/apt/sources.list.d/tdengine-stable.list +[Optional] echo "deb [arch=amd64] http://repos.taosdata.com/tdengine-beta beta main" | sudo tee /etc/apt/sources.list.d/tdengine-beta.list +sudo apt-get update +apt-cache policy tdengine +sudo apt-get install tdengine +``` + +## On Windows platform + +After building successfully, TDengine can be installed by: + +```cmd +nmake install +``` + +## On macOS platform + +After building successfully, TDengine can be installed by: + +```bash +sudo make install +``` + +To start the service after installation, config `.plist` file first, in a terminal, use: + +```bash +sudo cp ../packaging/macOS/com.taosdata.tdengine.plist /Library/LaunchDaemons +``` + +To start the service, in a terminal, use: + +```bash +sudo launchctl load /Library/LaunchDaemons/com.taosdata.tdengine.plist +``` + +To stop the service, in a terminal, use: + +```bash +sudo launchctl unload /Library/LaunchDaemons/com.taosdata.tdengine.plist +``` + ## Quick Run If you don't want to run TDengine as a service, you can run it in current shell. For example, to quickly start a TDengine server after building, run the command below in terminal: (We take Linux as an example, command on Windows will be `taosd.exe`) + ```bash ./build/bin/taosd -c test/cfg ``` In another terminal, use the TDengine shell to connect the server: + ```bash ./build/bin/taos -c test/cfg ``` -option "-c test/cfg" specifies the system configuration file directory. +option "-c test/cfg" specifies the system configuration file directory. # Try TDengine + It is easy to run SQL commands from TDengine shell which is the same as other SQL databases. + ```sql -create database db; -use db; -create table t (ts timestamp, a int); -insert into t values ('2019-07-15 00:00:00', 1); -insert into t values ('2019-07-15 01:00:00', 2); -select * from t; -drop database db; +CREATE DATABASE demo; +USE demo; +CREATE TABLE t (ts TIMESTAMP, speed INT); +INSERT INTO t VALUES('2019-07-15 00:00:00', 10); +INSERT INTO t VALUES('2019-07-15 01:00:00', 20); +SELECT * FROM t; + ts | speed | +=================================== + 19-07-15 00:00:00.000| 10| + 19-07-15 01:00:00.000| 20| +Query OK, 2 row(s) in set (0.001700s) ``` # Developing with TDengine -### Official Connectors + +## Official Connectors TDengine provides abundant developing tools for users to develop on TDengine. Follow the links below to find your desired connectors and relevant documentation. -- [Java](https://www.taosdata.com/en/documentation/connector/#Java-Connector) -- [C/C++](https://www.taosdata.com/en/documentation/connector/#C/C++-Connector) -- [Python](https://www.taosdata.com/en/documentation/connector/#Python-Connector) -- [Go](https://www.taosdata.com/en/documentation/connector/#Go-Connector) -- [RESTful API](https://www.taosdata.com/en/documentation/connector/#RESTful-Connector) -- [Node.js](https://www.taosdata.com/en/documentation/connector/#Node.js-Connector) +- [Java](https://www.taosdata.com/en/documentation/connector/java) +- [C/C++](https://www.taosdata.com/en/documentation/connector#c-cpp) +- [Python](https://www.taosdata.com/en/documentation/connector#python) +- [Go](https://www.taosdata.com/en/documentation/connector#go) +- [RESTful API](https://www.taosdata.com/en/documentation/connector#restful) +- [Node.js](https://www.taosdata.com/en/documentation/connector#nodejs) +- [Rust](https://www.taosdata.com/en/documentation/connector/rust) -### Third Party Connectors +## Third Party Connectors The TDengine community has also kindly built some of their own connectors! Follow the links below to find the source code for them. -- [Rust Connector](https://github.com/taosdata/TDengine/tree/master/tests/examples/rust) +- [Rust Bindings](https://github.com/songtianyi/tdengine-rust-bindings/tree/master/examples) - [.Net Core Connector](https://github.com/maikebing/Maikebing.EntityFrameworkCore.Taos) - [Lua Connector](https://github.com/taosdata/TDengine/tree/develop/tests/examples/lua) -# How to run the test cases and how to add a new test case? - TDengine's test framework and all test cases are fully open source. - Please refer to [this document](tests/How-To-Run-Test-And-How-To-Add-New-Test-Case.md) for how to run test and develop new test case. +# How to run the test cases and how to add a new test case + +TDengine's test framework and all test cases are fully open source. +Please refer to [this document](https://github.com/taosdata/TDengine/blob/develop/tests/How-To-Run-Test-And-How-To-Add-New-Test-Case.md) for how to run test and develop new test case. # TDengine Roadmap + - Support event-driven stream computing - Support user defined functions - Support MQTT connection diff --git a/cmake/cmake.define b/cmake/cmake.define index 1cc28ec6fd..a33db902ca 100644 --- a/cmake/cmake.define +++ b/cmake/cmake.define @@ -18,6 +18,14 @@ if (NOT DEFINED TD_GRANT) SET(TD_GRANT FALSE) endif() +IF ("${WEBSOCKET}" MATCHES "true") + SET(TD_WEBSOCKET TRUE) + MESSAGE("Enable websocket") + ADD_DEFINITIONS(-DWEBSOCKET) +ELSE () + SET(TD_WEBSOCKET FALSE) +ENDIF () + IF ("${BUILD_HTTP}" STREQUAL "") IF (TD_LINUX) IF (TD_ARM_32) diff --git a/packaging/deb/DEBIAN/preinst b/packaging/deb/DEBIAN/preinst index 5217a82295..c9957fc89c 100644 --- a/packaging/deb/DEBIAN/preinst +++ b/packaging/deb/DEBIAN/preinst @@ -37,4 +37,5 @@ if [ -f "${install_main_dir}/taosadapter.service" ]; then fi # there can not libtaos.so*, otherwise ln -s error -${csudo}rm -f ${install_main_dir}/driver/libtaos* || : +${csudo}rm -f ${install_main_dir}/driver/libtaos.* || : +${csudo}rm -f ${install_main_dir}/driver/libtaosws.* || : diff --git a/packaging/deb/DEBIAN/prerm b/packaging/deb/DEBIAN/prerm index 501398f350..5ff970bb70 100644 --- a/packaging/deb/DEBIAN/prerm +++ b/packaging/deb/DEBIAN/prerm @@ -29,8 +29,12 @@ else ${csudo}rm -f ${bin_link_dir}/taosdemo || : ${csudo}rm -f ${cfg_link_dir}/* || : ${csudo}rm -f ${inc_link_dir}/taos.h || : + ${csudo}rm -f ${inc_link_dir}/taosdef.h || : + ${csudo}rm -f ${inc_link_dir}/taoserror.h || : ${csudo}rm -f ${inc_link_dir}/taosudf.h || : + ${csudo}rm -f ${inc_link_dir}/taosws.h || : ${csudo}rm -f ${lib_link_dir}/libtaos.* || : + ${csudo}rm -f ${lib_link_dir}/libtaosws.* || : ${csudo}rm -f ${log_link_dir} || : ${csudo}rm -f ${data_link_dir} || : diff --git a/packaging/deb/makedeb.sh b/packaging/deb/makedeb.sh index 043c1456b8..1a4131ec6f 100755 --- a/packaging/deb/makedeb.sh +++ b/packaging/deb/makedeb.sh @@ -30,6 +30,7 @@ mkdir -p ${pkg_dir} cd ${pkg_dir} libfile="libtaos.so.${tdengine_ver}" +wslibfile="libtaosws.so" # create install dir install_home_path="/usr/local/taos" @@ -67,10 +68,12 @@ fi cp ${compile_dir}/build/bin/taos ${pkg_dir}${install_home_path}/bin cp ${compile_dir}/build/lib/${libfile} ${pkg_dir}${install_home_path}/driver +cp ${compile_dir}/build/lib/${wslibfile} ${pkg_dir}${install_home_path}/driver ||: cp ${compile_dir}/../include/client/taos.h ${pkg_dir}${install_home_path}/include cp ${compile_dir}/../include/common/taosdef.h ${pkg_dir}${install_home_path}/include cp ${compile_dir}/../include/util/taoserror.h ${pkg_dir}${install_home_path}/include cp ${compile_dir}/../include/libs/function/taosudf.h ${pkg_dir}${install_home_path}/include +cp ${compile_dir}/../src/inc/taosws.h ${pkg_dir}${install_home_path}/include ||: cp -r ${top_dir}/examples/* ${pkg_dir}${install_home_path}/examples #cp -r ${top_dir}/src/connector/python ${pkg_dir}${install_home_path}/connector #cp -r ${top_dir}/src/connector/go ${pkg_dir}${install_home_path}/connector diff --git a/packaging/rpm/tdengine.spec b/packaging/rpm/tdengine.spec index f440f72aa2..02e7e9b5e5 100644 --- a/packaging/rpm/tdengine.spec +++ b/packaging/rpm/tdengine.spec @@ -42,6 +42,7 @@ echo version: %{_version} echo buildroot: %{buildroot} libfile="libtaos.so.%{_version}" +wslibfile="libtaosws.so" # create install path, and cp file mkdir -p %{buildroot}%{homepath}/bin @@ -74,10 +75,12 @@ if [ -f %{_compiledir}/build/bin/taosadapter ]; then cp %{_compiledir}/build/bin/taosadapter %{buildroot}%{homepath}/bin ||: fi cp %{_compiledir}/build/lib/${libfile} %{buildroot}%{homepath}/driver +cp %{_compiledir}/build/lib/${wslibfile} %{buildroot}%{homepath}/driver ||: cp %{_compiledir}/../include/client/taos.h %{buildroot}%{homepath}/include cp %{_compiledir}/../include/common/taosdef.h %{buildroot}%{homepath}/include cp %{_compiledir}/../include/util/taoserror.h %{buildroot}%{homepath}/include cp %{_compiledir}/../include/libs/function/taosudf.h %{buildroot}%{homepath}/include +cp %{_compiledir}/../src/inc/taosws.h %{buildroot}%{homepath}/include ||: #cp -r %{_compiledir}/../src/connector/python %{buildroot}%{homepath}/connector #cp -r %{_compiledir}/../src/connector/go %{buildroot}%{homepath}/connector #cp -r %{_compiledir}/../src/connector/nodejs %{buildroot}%{homepath}/connector diff --git a/packaging/tools/install.sh b/packaging/tools/install.sh index 2d17ef4812..bcc2df4b91 100755 --- a/packaging/tools/install.sh +++ b/packaging/tools/install.sh @@ -227,9 +227,13 @@ function install_lib() { ${csudo}ln -s ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1 ${csudo}ln -s ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so + ${csudo}ln -s ${lib_link_dir}/libtaosws.so ${lib_link_dir}/libtaosws.so || : + if [[ -d ${lib64_link_dir} && ! -e ${lib64_link_dir}/libtaos.so ]]; then ${csudo}ln -s ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1 || : ${csudo}ln -s ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so || : + + ${csudo}ln -s ${lib64_link_dir}/libtaosws.so ${lib64_link_dir}/libtaosws.so || : fi ${csudo}ldconfig @@ -313,11 +317,16 @@ function install_jemalloc() { function install_header() { ${csudo}rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taosdef.h ${inc_link_dir}/taoserror.h ${inc_link_dir}/taosudf.h || : + + ${csudo}rm -f ${inc_link_dir}/taosws.h || : + ${csudo}cp -f ${script_dir}/inc/* ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/* ${csudo}ln -s ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h ${csudo}ln -s ${install_main_dir}/include/taosdef.h ${inc_link_dir}/taosdef.h ${csudo}ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h ${csudo}ln -s ${install_main_dir}/include/taosudf.h ${inc_link_dir}/taosudf.h + + ${csudo}ln -s ${install_main_dir}/include/taosws.h ${inc_link_dir}/taosws.h || : } function add_newHostname_to_hosts() { diff --git a/packaging/tools/make_install.sh b/packaging/tools/make_install.sh index 4e4ebb72c0..8ad42811d4 100755 --- a/packaging/tools/make_install.sh +++ b/packaging/tools/make_install.sh @@ -294,21 +294,29 @@ function install_avro() { function install_lib() { # Remove links ${csudo}rm -f ${lib_link_dir}/libtaos.* || : + ${csudo}rm -f ${lib_link_dir}/libtaosws.* || : if [ "$osType" != "Darwin" ]; then ${csudo}rm -f ${lib64_link_dir}/libtaos.* || : + ${csudo}rm -f ${lib64_link_dir}/libtaosws.* || : fi if [ "$osType" != "Darwin" ]; then ${csudo}cp ${binary_dir}/build/lib/libtaos.so.${verNumber} \ ${install_main_dir}/driver && - ${csudo}chmod 777 ${install_main_dir}/driver/* + ${csudo}chmod 777 ${install_main_dir}/driver/libtaos.so.${verNumber} + + ${csudo}cp ${binary_dir}/build/lib/libtaosws.so \ + ${install_main_dir}/driver && + ${csudo}chmod 777 ${install_main_dir}/driver/libtaosws.so ${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1 ${csudo}ln -sf ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so + ${csudo}ln -sf ${install_main_dir}/driver/libtaosws.so ${lib_link_dir}/libtaosws.so || : if [ -d "${lib64_link_dir}" ]; then ${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1 ${csudo}ln -sf ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so + ${csudo}ln -sf ${lib64_link_dir}/libtaosws.so ${lib64_link_dir}/libtaosws.so || : fi else ${csudo}cp -Rf ${binary_dir}/build/lib/libtaos.${verNumber}.dylib \ @@ -337,8 +345,8 @@ function install_lib() { fi install_jemalloc - install_avro lib - install_avro lib64 + #install_avro lib + #install_avro lib64 if [ "$osType" != "Darwin" ]; then ${csudo}ldconfig @@ -350,11 +358,19 @@ function install_header() { if [ "$osType" != "Darwin" ]; then ${csudo}rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taosdef.h ${inc_link_dir}/taoserror.h ${inc_link_dir}/taosudf.h || : ${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \ + ${csudo}rm -f ${inc_link_dir}/taosws.h || : + + ${csudo}cp -f ${source_dir}/src/inc/taos.h ${source_dir}/src/inc/taosdef.h ${source_dir}/src/inc/taoserror.h \ ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/* + + ${csudo}cp -f ${binary_dir}/build/include/taosws.h ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/taosws.h + ${csudo}ln -s ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h ${csudo}ln -s ${install_main_dir}/include/taosdef.h ${inc_link_dir}/taosdef.h ${csudo}ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h ${csudo}ln -s ${install_main_dir}/include/taosudf.h ${inc_link_dir}/taosudf.h + + ${csudo}ln -s ${install_main_dir}/include/taosws.h ${inc_link_dir}/taosws.h || : else ${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \ ${install_main_dir}/include || diff --git a/packaging/tools/makepkg.sh b/packaging/tools/makepkg.sh index cd656fe6f2..2965a02b49 100755 --- a/packaging/tools/makepkg.sh +++ b/packaging/tools/makepkg.sh @@ -92,8 +92,11 @@ else fi lib_files="${build_dir}/lib/libtaos.so.${version}" +wslib_files="${build_dir}/lib/libtaosws.so." header_files="${code_dir}/include/client/taos.h ${code_dir}/include/common/taosdef.h ${code_dir}/include/util/taoserror.h ${code_dir}/include/libs/function/taosudf.h" +wsheader_files="${code_dir}/inc/taosws.h" + if [ "$dbName" != "taos" ]; then cfg_dir="${top_dir}/../enterprise/packaging/cfg" else @@ -109,6 +112,9 @@ init_file_rpm=${script_dir}/../rpm/taosd # make directories. mkdir -p ${install_dir} mkdir -p ${install_dir}/inc && cp ${header_files} ${install_dir}/inc + +${wsheader_files} ${install_dir}/inc || : + mkdir -p ${install_dir}/cfg && cp ${cfg_dir}/${configFile} ${install_dir}/cfg/${configFile} if [ -f "${compile_dir}/test/cfg/taosadapter.toml" ]; then @@ -283,6 +289,7 @@ fi # Copy driver mkdir -p ${install_dir}/driver && cp ${lib_files} ${install_dir}/driver && echo "${versionComp}" >${install_dir}/driver/vercomp.txt +cp ${wslib_files} ${install_dir}/driver || : # Copy connector if [ "$verMode" == "cluster" ]; then diff --git a/packaging/tools/remove.sh b/packaging/tools/remove.sh index d34c81a4f5..ec836f2eac 100755 --- a/packaging/tools/remove.sh +++ b/packaging/tools/remove.sh @@ -102,7 +102,10 @@ function clean_local_bin() { function clean_lib() { # Remove link ${csudo}rm -f ${lib_link_dir}/libtaos.* || : + ${csudo}rm -f ${lib_link_dir}/libtaosws.* || : + ${csudo}rm -f ${lib64_link_dir}/libtaos.* || : + ${csudo}rm -f ${lib64_link_dir}/libtaosws.* || : #${csudo}rm -rf ${v15_java_app_dir} || : } @@ -111,6 +114,8 @@ function clean_header() { ${csudo}rm -f ${inc_link_dir}/taos.h || : ${csudo}rm -f ${inc_link_dir}/taosdef.h || : ${csudo}rm -f ${inc_link_dir}/taoserror.h || : + + ${csudo}rm -f ${inc_link_dir}/taosws.h || : } function clean_config() { diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index da1afe84a7..59908cca8a 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,3 +1,27 @@ +IF (TD_WEBSOCKET) + MESSAGE("${Green} use libtaos-ws${ColourReset}") + IF (TD_LINUX) + include(ExternalProject) + ExternalProject_Add(taosws-rs + PREFIX "taosws-rs" + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosws-rs + BUILD_ALWAYS off + DEPENDS taos + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND cmake -E echo "taosws-rs no need cmake to config" + PATCH_COMMAND + COMMAND git clean -f -d + BUILD_COMMAND + COMMAND cargo build --release -p taos-ws-sys + COMMAND ./taos-ws-sys/ci/package.sh + INSTALL_COMMAND + COMMAND cmake -E copy target/libtaosws/libtaosws.so ${CMAKE_BINARY_DIR}/build/lib + COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/build/include + COMMAND cmake -E copy target/libtaosws/taosws.h ${CMAKE_BINARY_DIR}/build/include + ) + ENDIF() +ENDIF () + IF (TD_TAOS_TOOLS) INCLUDE_DIRECTORIES(${TD_SOURCE_DIR}/tools/taos_tools/deps/avro/lang/c/src) INCLUDE_DIRECTORIES(${TD_SOURCE_DIR}/include/client) diff --git a/tools/shell/CMakeLists.txt b/tools/shell/CMakeLists.txt index 295fae68b3..2dc5870c4a 100644 --- a/tools/shell/CMakeLists.txt +++ b/tools/shell/CMakeLists.txt @@ -1,10 +1,19 @@ aux_source_directory(src SHELL_SRC) add_executable(shell ${SHELL_SRC}) + +IF (TD_LINUX AND TD_WEBSOCKET) + ADD_DEFINITIONS(-DWEBSOCKET -I${CMAKE_BINARY_DIR}/build/include -ltaosws) + SET(LINK_WEBSOCKET "-L${CMAKE_BINARY_DIR}/build/lib -ltaosws") + ADD_DEPENDENCIES(shell taosws-rs) +ELSE () + SET(LINK_WEBSOCKET "") +ENDIF () + if(TD_WINDOWS) - target_link_libraries(shell PUBLIC taos_static) + target_link_libraries(shell PUBLIC taos_static ${LINK_WEBSOCKET}) else() - target_link_libraries(shell PUBLIC taos) + target_link_libraries(shell PUBLIC taos ${LINK_WEBSOCKET}) endif () target_link_libraries( shell diff --git a/tools/taosws-rs b/tools/taosws-rs new file mode 160000 index 0000000000..430982a0c2 --- /dev/null +++ b/tools/taosws-rs @@ -0,0 +1 @@ +Subproject commit 430982a0c2c29a819ffc414d11f49f2d424ca3fe