From f9d6551de6025380739fe1d986dabd3387e0e918 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 15 Sep 2022 20:51:14 +0800 Subject: [PATCH 01/21] fix(tsc): avoid mem leak --- source/client/src/clientMsgHandler.c | 14 +- source/client/src/clientTmq.c | 4 + source/libs/catalog/src/ctgAsync.c | 621 +++++++++++++------------- source/libs/catalog/src/ctgRemote.c | 86 ++-- source/libs/scheduler/src/schRemote.c | 3 +- 5 files changed, 371 insertions(+), 357 deletions(-) diff --git a/source/client/src/clientMsgHandler.c b/source/client/src/clientMsgHandler.c index a7a16d484c..ebccc5ea1a 100644 --- a/source/client/src/clientMsgHandler.c +++ b/source/client/src/clientMsgHandler.c @@ -34,6 +34,7 @@ int32_t genericRspCallback(void* param, SDataBuf* pMsg, int32_t code) { removeMeta(pRequest->pTscObj, pRequest->targetTableList); } + taosMemoryFree(pMsg->pEpSet); taosMemoryFree(pMsg->pData); if (pRequest->body.queryFp != NULL) { pRequest->body.queryFp(pRequest->body.param, pRequest, code); @@ -62,6 +63,7 @@ int32_t processConnectRsp(void* param, SDataBuf* pMsg, int32_t code) { if (delta > timestampDeltaLimit) { code = TSDB_CODE_TIME_UNSYNCED; tscError("time diff:%ds is too big", delta); + taosMemoryFree(pMsg->pEpSet); taosMemoryFree(pMsg->pData); setErrno(pRequest, code); tsem_post(&pRequest->body.rspSem); @@ -114,6 +116,7 @@ int32_t processConnectRsp(void* param, SDataBuf* pMsg, int32_t code) { pTscObj->pAppInfo->numOfConns); taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); tsem_post(&pRequest->body.rspSem); return 0; } @@ -137,6 +140,7 @@ int32_t processCreateDbRsp(void* param, SDataBuf* pMsg, int32_t code) { // todo rsp with the vnode id list SRequestObj* pRequest = param; taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); if (code != TSDB_CODE_SUCCESS) { setErrno(pRequest, code); } @@ -173,6 +177,7 @@ int32_t processUseDbRsp(void* param, SDataBuf* pMsg, int32_t code) { if (code != TSDB_CODE_SUCCESS) { taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); setErrno(pRequest, code); if (pRequest->body.queryFp != NULL) { @@ -220,6 +225,7 @@ int32_t processUseDbRsp(void* param, SDataBuf* pMsg, int32_t code) { setConnectionDB(pRequest->pTscObj, db); taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); if (pRequest->body.queryFp != NULL) { pRequest->body.queryFp(pRequest->body.param, pRequest, pRequest->code); @@ -237,7 +243,7 @@ int32_t processCreateSTableRsp(void* param, SDataBuf* pMsg, int32_t code) { setErrno(pRequest, code); } else { SMCreateStbRsp createRsp = {0}; - SDecoder coder = {0}; + SDecoder coder = {0}; tDecoderInit(&coder, pMsg->pData, pMsg->len); tDecodeSMCreateStbRsp(&coder, &createRsp); tDecoderClear(&coder); @@ -246,6 +252,7 @@ int32_t processCreateSTableRsp(void* param, SDataBuf* pMsg, int32_t code) { pRequest->body.resInfo.execRes.res = createRsp.pMeta; } + taosMemoryFree(pMsg->pEpSet); taosMemoryFree(pMsg->pData); if (pRequest->body.queryFp != NULL) { @@ -262,7 +269,7 @@ int32_t processCreateSTableRsp(void* param, SDataBuf* pMsg, int32_t code) { code = ret; } } - + pRequest->body.queryFp(pRequest->body.param, pRequest, code); } else { tsem_post(&pRequest->body.rspSem); @@ -284,6 +291,7 @@ int32_t processDropDbRsp(void* param, SDataBuf* pMsg, int32_t code) { } taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); if (pRequest->body.queryFp != NULL) { pRequest->body.queryFp(pRequest->body.param, pRequest, code); @@ -309,6 +317,7 @@ int32_t processAlterStbRsp(void* param, SDataBuf* pMsg, int32_t code) { } taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); if (pRequest->body.queryFp != NULL) { SExecResult* pRes = &pRequest->body.resInfo.execRes; @@ -420,6 +429,7 @@ int32_t processShowVariablesRsp(void* param, SDataBuf* pMsg, int32_t code) { } taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); if (pRequest->body.queryFp != NULL) { pRequest->body.queryFp(pRequest->body.param, pRequest, code); diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 9f9a14952e..f6874c6101 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -1077,6 +1077,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tsem_destroy(&pParam->rspSem); taosMemoryFree(pParam); taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); terrno = TSDB_CODE_TMQ_CONSUMER_CLOSED; return -1; } @@ -1115,6 +1116,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tmqEpoch); tsem_post(&tmq->rspSem); taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); return 0; } @@ -1128,6 +1130,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { SMqPollRspWrapper* pRspWrapper = taosAllocateQitem(sizeof(SMqPollRspWrapper), DEF_QITEM); if (pRspWrapper == NULL) { taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); tscWarn("msg discard from vgId:%d, epoch %d since out of memory", vgId, epoch); goto CREATE_MSG_FAIL; } @@ -1164,6 +1167,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { } taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); taosWriteQitem(tmq->mqueue, pRspWrapper); tsem_post(&tmq->rspSem); diff --git a/source/libs/catalog/src/ctgAsync.c b/source/libs/catalog/src/ctgAsync.c index 585b33930c..3c4cc9f7a2 100644 --- a/source/libs/catalog/src/ctgAsync.c +++ b/source/libs/catalog/src/ctgAsync.c @@ -13,15 +13,15 @@ * along with this program. If not, see . */ -#include "trpc.h" -#include "query.h" -#include "tname.h" #include "catalogInt.h" +#include "query.h" #include "systable.h" +#include "tname.h" #include "tref.h" +#include "trpc.h" -int32_t ctgInitGetTbMetaTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - SName *name = (SName*)param; +int32_t ctgInitGetTbMetaTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + SName* name = (SName*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_TB_META; @@ -45,13 +45,14 @@ int32_t ctgInitGetTbMetaTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tbName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), name->tname); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tbName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), name->tname); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetTbMetasTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - SName *name = (SName*)param; +int32_t ctgInitGetTbMetasTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + SName* name = (SName*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_TB_META_BATCH; @@ -69,14 +70,14 @@ int32_t ctgInitGetTbMetasTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbNum:%d, tbNum:%d", - pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), taosArrayGetSize(ctx->pNames), pJob->tbMetaNum); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbNum:%d, tbNum:%d", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), taosArrayGetSize(ctx->pNames), pJob->tbMetaNum); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetDbVgTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - char *dbFName = (char*)param; +int32_t ctgInitGetDbVgTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + char* dbFName = (char*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_DB_VGROUP; @@ -94,13 +95,14 @@ int32_t ctgInitGetDbVgTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbFName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), dbFName); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbFName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), dbFName); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetDbCfgTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - char *dbFName = (char*)param; +int32_t ctgInitGetDbCfgTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + char* dbFName = (char*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_DB_CFG; @@ -118,13 +120,14 @@ int32_t ctgInitGetDbCfgTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbFName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), dbFName); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbFName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), dbFName); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetDbInfoTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - char *dbFName = (char*)param; +int32_t ctgInitGetDbInfoTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + char* dbFName = (char*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_DB_INFO; @@ -142,14 +145,14 @@ int32_t ctgInitGetDbInfoTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbFName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), dbFName); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbFName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), dbFName); return TSDB_CODE_SUCCESS; } - -int32_t ctgInitGetTbHashTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - SName *name = (SName*)param; +int32_t ctgInitGetTbHashTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + SName* name = (SName*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_TB_HASH; @@ -173,13 +176,14 @@ int32_t ctgInitGetTbHashTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tableName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), name->tname); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tableName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), name->tname); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetTbHashsTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - SName *name = (SName*)param; +int32_t ctgInitGetTbHashsTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + SName* name = (SName*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_TB_HASH_BATCH; @@ -197,14 +201,13 @@ int32_t ctgInitGetTbHashsTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbNum:%d, tbNum:%d", - pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), taosArrayGetSize(ctx->pNames), pJob->tbHashNum); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, dbNum:%d, tbNum:%d", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), taosArrayGetSize(ctx->pNames), pJob->tbHashNum); return TSDB_CODE_SUCCESS; } - -int32_t ctgInitGetQnodeTask(SCtgJob *pJob, int32_t taskIdx, void* param) { +int32_t ctgInitGetQnodeTask(SCtgJob* pJob, int32_t taskIdx, void* param) { SCtgTask task = {0}; task.type = CTG_TASK_GET_QNODE; @@ -219,7 +222,7 @@ int32_t ctgInitGetQnodeTask(SCtgJob *pJob, int32_t taskIdx, void* param) { return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetDnodeTask(SCtgJob *pJob, int32_t taskIdx, void* param) { +int32_t ctgInitGetDnodeTask(SCtgJob* pJob, int32_t taskIdx, void* param) { SCtgTask task = {0}; task.type = CTG_TASK_GET_DNODE; @@ -234,8 +237,8 @@ int32_t ctgInitGetDnodeTask(SCtgJob *pJob, int32_t taskIdx, void* param) { return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetIndexTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - char *name = (char*)param; +int32_t ctgInitGetIndexTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + char* name = (char*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_INDEX; @@ -253,13 +256,14 @@ int32_t ctgInitGetIndexTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, indexFName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), name); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, indexFName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), name); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetUdfTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - char *name = (char*)param; +int32_t ctgInitGetUdfTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + char* name = (char*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_UDF; @@ -277,14 +281,15 @@ int32_t ctgInitGetUdfTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, udfName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), name); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, udfName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), name); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetUserTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - SUserAuthInfo *user = (SUserAuthInfo*)param; - SCtgTask task = {0}; +int32_t ctgInitGetUserTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + SUserAuthInfo* user = (SUserAuthInfo*)param; + SCtgTask task = {0}; task.type = CTG_TASK_GET_USER; task.taskId = taskIdx; @@ -301,12 +306,13 @@ int32_t ctgInitGetUserTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, user:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), user->user); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, user:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), user->user); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetSvrVerTask(SCtgJob *pJob, int32_t taskIdx, void* param) { +int32_t ctgInitGetSvrVerTask(SCtgJob* pJob, int32_t taskIdx, void* param) { SCtgTask task = {0}; task.type = CTG_TASK_GET_SVR_VER; @@ -320,8 +326,8 @@ int32_t ctgInitGetSvrVerTask(SCtgJob *pJob, int32_t taskIdx, void* param) { return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetTbIndexTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - SName *name = (SName*)param; +int32_t ctgInitGetTbIndexTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + SName* name = (SName*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_TB_INDEX; @@ -344,13 +350,14 @@ int32_t ctgInitGetTbIndexTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tbName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), name->tname); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tbName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), name->tname); return TSDB_CODE_SUCCESS; } -int32_t ctgInitGetTbCfgTask(SCtgJob *pJob, int32_t taskIdx, void* param) { - SName *name = (SName*)param; +int32_t ctgInitGetTbCfgTask(SCtgJob* pJob, int32_t taskIdx, void* param) { + SName* name = (SName*)param; SCtgTask task = {0}; task.type = CTG_TASK_GET_TB_CFG; @@ -373,13 +380,13 @@ int32_t ctgInitGetTbCfgTask(SCtgJob *pJob, int32_t taskIdx, void* param) { taosArrayPush(pJob->pTasks, &task); - qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tbName:%s", pJob->queryId, taskIdx, ctgTaskTypeStr(task.type), name->tname); + qDebug("QID:0x%" PRIx64 " the %dth task type %s initialized, tbName:%s", pJob->queryId, taskIdx, + ctgTaskTypeStr(task.type), name->tname); return TSDB_CODE_SUCCESS; } - -int32_t ctgHandleForceUpdate(SCatalog* pCtg, int32_t taskNum, SCtgJob *pJob, const SCatalogReq* pReq) { +int32_t ctgHandleForceUpdate(SCatalog* pCtg, int32_t taskNum, SCtgJob* pJob, const SCatalogReq* pReq) { SHashObj* pDb = taosHashInit(taskNum, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); SHashObj* pTb = taosHashInit(taskNum, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); if (NULL == pDb || NULL == pTb) { @@ -427,7 +434,7 @@ int32_t ctgHandleForceUpdate(SCatalog* pCtg, int32_t taskNum, SCtgJob *pJob, con for (int32_t i = 0; i < pJob->tbCfgNum; ++i) { SName* name = taosArrayGet(pReq->pTableCfg, i); - char dbFName[TSDB_DB_FNAME_LEN]; + char dbFName[TSDB_DB_FNAME_LEN]; tNameGetFullDbName(name, dbFName); taosHashPut(pDb, dbFName, strlen(dbFName), dbFName, TSDB_DB_FNAME_LEN); } @@ -455,7 +462,6 @@ int32_t ctgHandleForceUpdate(SCatalog* pCtg, int32_t taskNum, SCtgJob *pJob, con taosHashCleanup(pTb); - for (int32_t i = 0; i < pJob->tbIndexNum; ++i) { SName* name = taosArrayGet(pReq->pTableIndex, i); ctgDropTbIndexEnqueue(pCtg, name, true); @@ -464,7 +470,7 @@ int32_t ctgHandleForceUpdate(SCatalog* pCtg, int32_t taskNum, SCtgJob *pJob, con return TSDB_CODE_SUCCESS; } -int32_t ctgInitTask(SCtgJob *pJob, CTG_TASK_TYPE type, void* param, int32_t *taskId) { +int32_t ctgInitTask(SCtgJob* pJob, CTG_TASK_TYPE type, void* param, int32_t* taskId) { int32_t tid = atomic_fetch_add_32(&pJob->taskIdx, 1); CTG_LOCK(CTG_WRITE, &pJob->taskLock); @@ -478,7 +484,8 @@ int32_t ctgInitTask(SCtgJob *pJob, CTG_TASK_TYPE type, void* param, int32_t *tas return TSDB_CODE_SUCCESS; } -int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo *pConn, SCtgJob** job, const SCatalogReq* pReq, catalogCallback fp, void* param) { +int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo* pConn, SCtgJob** job, const SCatalogReq* pReq, catalogCallback fp, + void* param) { int32_t code = 0; int32_t tbMetaNum = (int32_t)ctgGetTablesReqNum(pReq->pTableMeta); int32_t dbVgNum = (int32_t)taosArrayGetSize(pReq->pDbVgroup); @@ -494,7 +501,8 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo *pConn, SCtgJob** job, const int32_t tbIndexNum = (int32_t)taosArrayGetSize(pReq->pTableIndex); int32_t tbCfgNum = (int32_t)taosArrayGetSize(pReq->pTableCfg); - int32_t taskNum = tbMetaNum + dbVgNum + udfNum + tbHashNum + qnodeNum + dnodeNum + svrVerNum + dbCfgNum + indexNum + userNum + dbInfoNum + tbIndexNum + tbCfgNum; + int32_t taskNum = tbMetaNum + dbVgNum + udfNum + tbHashNum + qnodeNum + dnodeNum + svrVerNum + dbCfgNum + indexNum + + userNum + dbInfoNum + tbIndexNum + tbCfgNum; *job = taosMemoryCalloc(1, sizeof(SCtgJob)); if (NULL == *job) { @@ -502,13 +510,13 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo *pConn, SCtgJob** job, const CTG_ERR_RET(TSDB_CODE_OUT_OF_MEMORY); } - SCtgJob *pJob = *job; + SCtgJob* pJob = *job; pJob->subTaskNum = taskNum; pJob->queryId = pConn->requestId; pJob->userFp = fp; - pJob->pCtg = pCtg; - pJob->conn = *pConn; + pJob->pCtg = pCtg; + pJob->conn = *pConn; pJob->userParam = param; pJob->tbMetaNum = tbMetaNum; @@ -526,7 +534,8 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo *pConn, SCtgJob** job, const pJob->svrVerNum = svrVerNum; #if CTG_BATCH_FETCH - pJob->pBatchs = taosHashInit(CTG_DEFAULT_BATCH_NUM, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK); + pJob->pBatchs = + taosHashInit(CTG_DEFAULT_BATCH_NUM, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK); if (NULL == pJob->pBatchs) { ctgError("taosHashInit %d batch failed", CTG_DEFAULT_BATCH_NUM); CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); @@ -625,10 +634,10 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo *pConn, SCtgJob** job, const taosAcquireRef(gCtgMgmt.jobPool, pJob->refId); - qDebug("QID:0x%" PRIx64 ", jobId: 0x%" PRIx64 " initialized, task num %d, forceUpdate %d", pJob->queryId, pJob->refId, taskNum, pReq->forceUpdate); + qDebug("QID:0x%" PRIx64 ", jobId: 0x%" PRIx64 " initialized, task num %d, forceUpdate %d", pJob->queryId, pJob->refId, + taskNum, pReq->forceUpdate); return TSDB_CODE_SUCCESS; - _return: ctgFreeJob(*job); @@ -658,7 +667,6 @@ int32_t ctgDumpTbMetasRes(SCtgTask* pTask) { return TSDB_CODE_SUCCESS; } - int32_t ctgDumpDbVgRes(SCtgTask* pTask) { SCtgJob* pJob = pTask->pJob; if (NULL == pJob->jobRes.pDbVgroup) { @@ -772,7 +780,6 @@ int32_t ctgDumpDnodeRes(SCtgTask* pTask) { return TSDB_CODE_SUCCESS; } - int32_t ctgDumpDbCfgRes(SCtgTask* pTask) { SCtgJob* pJob = pTask->pJob; if (NULL == pJob->jobRes.pDbCfg) { @@ -848,15 +855,15 @@ int32_t ctgDumpSvrVer(SCtgTask* pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgCallSubCb(SCtgTask *pTask) { +int32_t ctgCallSubCb(SCtgTask* pTask) { int32_t code = 0; CTG_LOCK(CTG_WRITE, &pTask->lock); int32_t parentNum = taosArrayGetSize(pTask->pParents); for (int32_t i = 0; i < parentNum; ++i) { - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); - SCtgTask* pParent = taosArrayGetP(pTask->pParents, i); + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgTask* pParent = taosArrayGetP(pTask->pParents, i); pParent->subRes.code = pTask->code; if (TSDB_CODE_SUCCESS == pTask->code) { @@ -866,7 +873,7 @@ int32_t ctgCallSubCb(SCtgTask *pTask) { } } - SCtgMsgCtx *pParMsgCtx = CTG_GET_TASK_MSGCTX(pParent, -1); + SCtgMsgCtx* pParMsgCtx = CTG_GET_TASK_MSGCTX(pParent, -1); pParMsgCtx->pBatchs = pMsgCtx->pBatchs; CTG_ERR_JRET(pParent->subRes.fp(pParent)); @@ -895,7 +902,7 @@ int32_t ctgCallUserCb(void* param) { int32_t ctgHandleTaskEnd(SCtgTask* pTask, int32_t rspCode) { SCtgJob* pJob = pTask->pJob; - int32_t code = 0; + int32_t code = 0; if (CTG_TASK_DONE == pTask->status) { return TSDB_CODE_SUCCESS; @@ -910,7 +917,8 @@ int32_t ctgHandleTaskEnd(SCtgTask* pTask, int32_t rspCode) { int32_t taskDone = atomic_add_fetch_32(&pJob->taskDone, 1); if (taskDone < taosArrayGetSize(pJob->pTasks)) { - qDebug("QID:0x%" PRIx64 " task done: %d, total: %d", pJob->queryId, taskDone, (int32_t)taosArrayGetSize(pJob->pTasks)); + qDebug("QID:0x%" PRIx64 " task done: %d, total: %d", pJob->queryId, taskDone, + (int32_t)taosArrayGetSize(pJob->pTasks)); return TSDB_CODE_SUCCESS; } @@ -920,25 +928,25 @@ _return: pJob->jobResCode = code; - //taosSsleep(2); - //qDebug("QID:0x%" PRIx64 " ctg after sleep", pJob->queryId); + // taosSsleep(2); + // qDebug("QID:0x%" PRIx64 " ctg after sleep", pJob->queryId); taosAsyncExec(ctgCallUserCb, pJob, NULL); CTG_RET(code); } -int32_t ctgHandleGetTbMetaRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; - SCtgDBCache *dbCache = NULL; - SCtgTask* pTask = tReq->pTask; - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgHandleGetTbMetaRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; + SCtgDBCache* dbCache = NULL; + SCtgTask* pTask = tReq->pTask; + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx); - SCtgTbMetaCtx* ctx = (SCtgTbMetaCtx*)pTask->taskCtx; - SName* pName = ctx->pName; - int32_t flag = ctx->flag; - int32_t* vgId = &ctx->vgId; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx); + SCtgTbMetaCtx* ctx = (SCtgTbMetaCtx*)pTask->taskCtx; + SName* pName = ctx->pName; + int32_t flag = ctx->flag; + int32_t* vgId = &ctx->vgId; CTG_ERR_JRET(ctgProcessRspMsg(pMsgCtx->out, reqType, pMsg->pData, pMsg->len, rspCode, pMsgCtx->target)); @@ -1057,25 +1065,25 @@ int32_t ctgHandleGetTbMetaRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf memcpy(pOut->tbMeta, &pOut->ctbMeta, sizeof(pOut->ctbMeta)); } -/* - else if (CTG_IS_META_CTABLE(pOut->metaType)) { - SName stbName = *pName; - strcpy(stbName.tname, pOut->tbName); - SCtgTbMetaCtx stbCtx = {0}; - stbCtx.flag = flag; - stbCtx.pName = &stbName; + /* + else if (CTG_IS_META_CTABLE(pOut->metaType)) { + SName stbName = *pName; + strcpy(stbName.tname, pOut->tbName); + SCtgTbMetaCtx stbCtx = {0}; + stbCtx.flag = flag; + stbCtx.pName = &stbName; - CTG_ERR_JRET(ctgReadTbMetaFromCache(pCtg, &stbCtx, &pOut->tbMeta)); - if (NULL == pOut->tbMeta) { - ctgDebug("stb no longer exist, stbName:%s", stbName.tname); - CTG_ERR_JRET(ctgRelaunchGetTbMetaTask(pTask)); + CTG_ERR_JRET(ctgReadTbMetaFromCache(pCtg, &stbCtx, &pOut->tbMeta)); + if (NULL == pOut->tbMeta) { + ctgDebug("stb no longer exist, stbName:%s", stbName.tname); + CTG_ERR_JRET(ctgRelaunchGetTbMetaTask(pTask)); - return TSDB_CODE_SUCCESS; + return TSDB_CODE_SUCCESS; + } + + memcpy(pOut->tbMeta, &pOut->ctbMeta, sizeof(pOut->ctbMeta)); } - - memcpy(pOut->tbMeta, &pOut->ctbMeta, sizeof(pOut->ctbMeta)); - } -*/ + */ TSWAP(pTask->res, pOut->tbMeta); @@ -1092,20 +1100,19 @@ _return: CTG_RET(code); } - -int32_t ctgHandleGetTbMetasRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; - SCtgDBCache *dbCache = NULL; - SCtgTask* pTask = tReq->pTask; - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgHandleGetTbMetasRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; + SCtgDBCache* dbCache = NULL; + SCtgTask* pTask = tReq->pTask; + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx); - SCtgTbMetasCtx* ctx = (SCtgTbMetasCtx*)pTask->taskCtx; - SCtgFetch* pFetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); - SName* pName = ctgGetFetchName(ctx->pNames, pFetch); - int32_t flag = pFetch->flag; - int32_t* vgId = &pFetch->vgId; - bool taskDone = false; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx); + SCtgTbMetasCtx* ctx = (SCtgTbMetasCtx*)pTask->taskCtx; + SCtgFetch* pFetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); + SName* pName = ctgGetFetchName(ctx->pNames, pFetch); + int32_t flag = pFetch->flag; + int32_t* vgId = &pFetch->vgId; + bool taskDone = false; CTG_ERR_JRET(ctgProcessRspMsg(pMsgCtx->out, reqType, pMsg->pData, pMsg->len, rspCode, pMsgCtx->target)); @@ -1225,25 +1232,25 @@ int32_t ctgHandleGetTbMetasRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBu memcpy(pOut->tbMeta, &pOut->ctbMeta, sizeof(pOut->ctbMeta)); } -/* - else if (CTG_IS_META_CTABLE(pOut->metaType)) { - SName stbName = *pName; - strcpy(stbName.tname, pOut->tbName); - SCtgTbMetaCtx stbCtx = {0}; - stbCtx.flag = flag; - stbCtx.pName = &stbName; + /* + else if (CTG_IS_META_CTABLE(pOut->metaType)) { + SName stbName = *pName; + strcpy(stbName.tname, pOut->tbName); + SCtgTbMetaCtx stbCtx = {0}; + stbCtx.flag = flag; + stbCtx.pName = &stbName; - CTG_ERR_JRET(ctgReadTbMetaFromCache(pCtg, &stbCtx, &pOut->tbMeta)); - if (NULL == pOut->tbMeta) { - ctgDebug("stb no longer exist, stbName:%s", stbName.tname); - CTG_ERR_JRET(ctgRelaunchGetTbMetaTask(pTask)); + CTG_ERR_JRET(ctgReadTbMetaFromCache(pCtg, &stbCtx, &pOut->tbMeta)); + if (NULL == pOut->tbMeta) { + ctgDebug("stb no longer exist, stbName:%s", stbName.tname); + CTG_ERR_JRET(ctgRelaunchGetTbMetaTask(pTask)); - return TSDB_CODE_SUCCESS; + return TSDB_CODE_SUCCESS; + } + + memcpy(pOut->tbMeta, &pOut->ctbMeta, sizeof(pOut->ctbMeta)); } - - memcpy(pOut->tbMeta, &pOut->ctbMeta, sizeof(pOut->ctbMeta)); - } -*/ + */ SMetaRes* pRes = taosArrayGet(ctx->pResList, pFetch->resIdx); pRes->code = 0; @@ -1277,19 +1284,18 @@ _return: CTG_RET(code); } - -int32_t ctgHandleGetDbVgRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; - SCtgTask* pTask = tReq->pTask; +int32_t ctgHandleGetDbVgRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; + SCtgTask* pTask = tReq->pTask; SCtgDbVgCtx* ctx = (SCtgDbVgCtx*)pTask->taskCtx; - SCatalog* pCtg = pTask->pJob->pCtg; + SCatalog* pCtg = pTask->pJob->pCtg; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); switch (reqType) { case TDMT_MND_USE_DB: { SUseDbOutput* pOut = (SUseDbOutput*)pTask->msgCtx.out; - SDBVgInfo* pDb = NULL; + SDBVgInfo* pDb = NULL; CTG_ERR_JRET(ctgGenerateVgList(pCtg, pOut->dbVgroup->vgHash, (SArray**)&pTask->res)); @@ -1304,7 +1310,6 @@ int32_t ctgHandleGetDbVgRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf * break; } - _return: ctgHandleTaskEnd(pTask, code); @@ -1312,11 +1317,11 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetTbHashRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; - SCtgTask* pTask = tReq->pTask; +int32_t ctgHandleGetTbHashRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; + SCtgTask* pTask = tReq->pTask; SCtgTbHashCtx* ctx = (SCtgTbHashCtx*)pTask->taskCtx; - SCatalog* pCtg = pTask->pJob->pCtg; + SCatalog* pCtg = pTask->pJob->pCtg; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1342,7 +1347,6 @@ int32_t ctgHandleGetTbHashRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf break; } - _return: ctgHandleTaskEnd(pTask, code); @@ -1350,14 +1354,14 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetTbHashsRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; - SCtgTask* pTask = tReq->pTask; +int32_t ctgHandleGetTbHashsRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; + SCtgTask* pTask = tReq->pTask; SCtgTbHashsCtx* ctx = (SCtgTbHashsCtx*)pTask->taskCtx; - SCatalog* pCtg = pTask->pJob->pCtg; - SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx); - SCtgFetch* pFetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); - bool taskDone = false; + SCatalog* pCtg = pTask->pJob->pCtg; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx); + SCtgFetch* pFetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); + bool taskDone = false; CTG_ERR_JRET(ctgProcessRspMsg(pMsgCtx->out, reqType, pMsg->pData, pMsg->len, rspCode, pMsgCtx->target)); @@ -1388,9 +1392,9 @@ _return: if (code) { STablesReq* pReq = taosArrayGet(ctx->pNames, pFetch->dbIdx); - int32_t num = taosArrayGetSize(pReq->pTables); + int32_t num = taosArrayGetSize(pReq->pTables); for (int32_t i = 0; i < num; ++i) { - SMetaRes *pRes = taosArrayGet(ctx->pResList, pFetch->resIdx + i); + SMetaRes* pRes = taosArrayGet(ctx->pResList, pFetch->resIdx + i); pRes->code = code; pRes->pRes = NULL; } @@ -1408,14 +1412,13 @@ _return: CTG_RET(code); } - -int32_t ctgHandleGetTbIndexRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetTbIndexRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); STableIndex* pOut = (STableIndex*)pTask->msgCtx.out; - SArray* pInfo = NULL; + SArray* pInfo = NULL; CTG_ERR_JRET(ctgCloneTableIndex(pOut->pIndex, &pInfo)); pTask->res = pInfo; @@ -1432,8 +1435,8 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetTbCfgRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetTbCfgRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(&pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1446,8 +1449,8 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetDbCfgRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetDbCfgRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1460,13 +1463,12 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetDbInfoRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { +int32_t ctgHandleGetDbInfoRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { CTG_RET(TSDB_CODE_APP_ERROR); } - -int32_t ctgHandleGetQnodeRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetQnodeRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1479,8 +1481,8 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetDnodeRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetDnodeRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(&pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1493,8 +1495,8 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetIndexRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetIndexRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1507,8 +1509,8 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetUdfRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetUdfRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1521,12 +1523,12 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetUserRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; - SCtgTask* pTask = tReq->pTask; - SCtgUserCtx* ctx = (SCtgUserCtx*)pTask->taskCtx; - SCatalog* pCtg = pTask->pJob->pCtg; - bool pass = false; +int32_t ctgHandleGetUserRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; + SCtgTask* pTask = tReq->pTask; + SCtgUserCtx* ctx = (SCtgUserCtx*)pTask->taskCtx; + SCatalog* pCtg = pTask->pJob->pCtg; + bool pass = false; SGetUserAuthRsp* pOut = (SGetUserAuthRsp*)pTask->msgCtx.out; CTG_ERR_JRET(ctgProcessRspMsg(pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1541,9 +1543,11 @@ int32_t ctgHandleGetUserRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf * goto _return; } - if (ctx->user.type == AUTH_TYPE_READ && pOut->readDbs && taosHashGet(pOut->readDbs, ctx->user.dbFName, strlen(ctx->user.dbFName))) { + if (ctx->user.type == AUTH_TYPE_READ && pOut->readDbs && + taosHashGet(pOut->readDbs, ctx->user.dbFName, strlen(ctx->user.dbFName))) { pass = true; - } else if (ctx->user.type == AUTH_TYPE_WRITE && pOut->writeDbs && taosHashGet(pOut->writeDbs, ctx->user.dbFName, strlen(ctx->user.dbFName))) { + } else if (ctx->user.type == AUTH_TYPE_WRITE && pOut->writeDbs && + taosHashGet(pOut->writeDbs, ctx->user.dbFName, strlen(ctx->user.dbFName))) { pass = true; } @@ -1566,8 +1570,8 @@ _return: CTG_RET(code); } -int32_t ctgHandleGetSvrVerRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf *pMsg, int32_t rspCode) { - int32_t code = 0; +int32_t ctgHandleGetSvrVerRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* pMsg, int32_t rspCode) { + int32_t code = 0; SCtgTask* pTask = tReq->pTask; CTG_ERR_JRET(ctgProcessRspMsg(&pTask->msgCtx.out, reqType, pMsg->pData, pMsg->len, rspCode, pTask->msgCtx.target)); @@ -1581,16 +1585,16 @@ _return: CTG_RET(code); } -int32_t ctgAsyncRefreshTbMeta(SCtgTaskReq *tReq, int32_t flag, SName* pName, int32_t* vgId) { - SCtgTask* pTask = tReq->pTask; - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgAsyncRefreshTbMeta(SCtgTaskReq* tReq, int32_t flag, SName* pName, int32_t* vgId) { + SCtgTask* pTask = tReq->pTask; + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - int32_t code = 0; + int32_t code = 0; if (CTG_FLAG_IS_SYS_DB(flag)) { ctgDebug("will refresh sys db tbmeta, tbName:%s", tNameGetTableName(pName)); - CTG_RET(ctgGetTbMetaFromMnodeImpl(pCtg, pConn, (char *)pName->dbname, (char *)pName->tname, NULL, tReq)); + CTG_RET(ctgGetTbMetaFromMnodeImpl(pCtg, pConn, (char*)pName->dbname, (char*)pName->tname, NULL, tReq)); } if (CTG_FLAG_IS_STB(flag)) { @@ -1600,8 +1604,8 @@ int32_t ctgAsyncRefreshTbMeta(SCtgTaskReq *tReq, int32_t flag, SName* pName, int CTG_RET(ctgGetTbMetaFromMnode(pCtg, pConn, pName, NULL, tReq)); } - SCtgDBCache *dbCache = NULL; - char dbFName[TSDB_DB_FNAME_LEN] = {0}; + SCtgDBCache* dbCache = NULL; + char dbFName[TSDB_DB_FNAME_LEN] = {0}; tNameGetFullDbName(pName, dbFName); CTG_ERR_RET(ctgAcquireVgInfoFromCache(pCtg, dbFName, &dbCache)); @@ -1631,11 +1635,11 @@ _return: CTG_RET(code); } -int32_t ctgLaunchGetTbMetaTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetTbMetaTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1647,7 +1651,7 @@ int32_t ctgLaunchGetTbMetaTask(SCtgTask *pTask) { } SCtgTbMetaCtx* pCtx = (SCtgTbMetaCtx*)pTask->taskCtx; - SCtgTaskReq tReq; + SCtgTaskReq tReq; tReq.pTask = pTask; tReq.msgIdx = -1; CTG_ERR_RET(ctgAsyncRefreshTbMeta(&tReq, pCtx->flag, pCtx->pName, &pCtx->vgId)); @@ -1655,11 +1659,11 @@ int32_t ctgLaunchGetTbMetaTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetTbMetasTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetTbMetasTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgTbMetasCtx* pCtx = (SCtgTbMetasCtx*)pTask->taskCtx; - SCtgJob* pJob = pTask->pJob; + SCtgTbMetasCtx* pCtx = (SCtgTbMetasCtx*)pTask->taskCtx; + SCtgJob* pJob = pTask->pJob; int32_t dbNum = taosArrayGetSize(pCtx->pNames); int32_t fetchIdx = 0; @@ -1683,9 +1687,9 @@ int32_t ctgLaunchGetTbMetasTask(SCtgTask *pTask) { taosArraySetSize(pTask->msgCtxs, pCtx->fetchNum); for (int32_t i = 0; i < pCtx->fetchNum; ++i) { - SCtgFetch* pFetch = taosArrayGet(pCtx->pFetchs, i); - SName* pName = ctgGetFetchName(pCtx->pNames, pFetch); - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, i); + SCtgFetch* pFetch = taosArrayGet(pCtx->pFetchs, i); + SName* pName = ctgGetFetchName(pCtx->pNames, pFetch); + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, i); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1699,14 +1703,14 @@ int32_t ctgLaunchGetTbMetasTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetDbVgTask(SCtgTask *pTask) { - int32_t code = 0; - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetDbVgTask(SCtgTask* pTask) { + int32_t code = 0; + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgDBCache *dbCache = NULL; - SCtgDbVgCtx* pCtx = (SCtgDbVgCtx*)pTask->taskCtx; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgDBCache* dbCache = NULL; + SCtgDbVgCtx* pCtx = (SCtgDbVgCtx*)pTask->taskCtx; + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1740,14 +1744,14 @@ _return: CTG_RET(code); } -int32_t ctgLaunchGetTbHashTask(SCtgTask *pTask) { - int32_t code = 0; - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetTbHashTask(SCtgTask* pTask) { + int32_t code = 0; + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgDBCache *dbCache = NULL; - SCtgTbHashCtx* pCtx = (SCtgTbHashCtx*)pTask->taskCtx; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgDBCache* dbCache = NULL; + SCtgTbHashCtx* pCtx = (SCtgTbHashCtx*)pTask->taskCtx; + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1785,16 +1789,16 @@ _return: CTG_RET(code); } -int32_t ctgLaunchGetTbHashsTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetTbHashsTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgTbHashsCtx* pCtx = (SCtgTbHashsCtx*)pTask->taskCtx; - SCtgDBCache *dbCache = NULL; - SCtgJob* pJob = pTask->pJob; - int32_t dbNum = taosArrayGetSize(pCtx->pNames); - int32_t fetchIdx = 0; - int32_t baseResIdx = 0; - int32_t code = 0; + SCtgTbHashsCtx* pCtx = (SCtgTbHashsCtx*)pTask->taskCtx; + SCtgDBCache* dbCache = NULL; + SCtgJob* pJob = pTask->pJob; + int32_t dbNum = taosArrayGetSize(pCtx->pNames); + int32_t fetchIdx = 0; + int32_t baseResIdx = 0; + int32_t code = 0; for (int32_t i = 0; i < dbNum; ++i) { STablesReq* pReq = taosArrayGet(pCtx->pNames, i); @@ -1805,7 +1809,8 @@ int32_t ctgLaunchGetTbHashsTask(SCtgTask *pTask) { SCtgTaskReq tReq; tReq.pTask = pTask; tReq.msgIdx = -1; - CTG_ERR_JRET(ctgGetVgInfosFromHashValue(pCtg, &tReq, dbCache->vgCache.vgInfo, pCtx, pReq->dbFName, pReq->pTables, false)); + CTG_ERR_JRET( + ctgGetVgInfosFromHashValue(pCtg, &tReq, dbCache->vgCache.vgInfo, pCtx, pReq->dbFName, pReq->pTables, false)); ctgReleaseVgInfoToCache(pCtg, dbCache); dbCache = NULL; @@ -1831,9 +1836,9 @@ int32_t ctgLaunchGetTbHashsTask(SCtgTask *pTask) { taosArraySetSize(pTask->msgCtxs, pCtx->fetchNum); for (int32_t i = 0; i < pCtx->fetchNum; ++i) { - SCtgFetch* pFetch = taosArrayGet(pCtx->pFetchs, i); + SCtgFetch* pFetch = taosArrayGet(pCtx->pFetchs, i); STablesReq* pReq = taosArrayGet(pCtx->pNames, pFetch->dbIdx); - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, i); + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, i); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1858,15 +1863,14 @@ _return: return code; } - -int32_t ctgLaunchGetTbIndexTask(SCtgTask *pTask) { - int32_t code = 0; - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetTbIndexTask(SCtgTask* pTask) { + int32_t code = 0; + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgTbIndexCtx* pCtx = (SCtgTbIndexCtx*)pTask->taskCtx; - SArray* pRes = NULL; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgTbIndexCtx* pCtx = (SCtgTbIndexCtx*)pTask->taskCtx; + SArray* pRes = NULL; + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1883,16 +1887,16 @@ int32_t ctgLaunchGetTbIndexTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetTbCfgTask(SCtgTask *pTask) { - int32_t code = 0; - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetTbCfgTask(SCtgTask* pTask) { + int32_t code = 0; + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgTbCfgCtx* pCtx = (SCtgTbCfgCtx*)pTask->taskCtx; - SArray* pRes = NULL; - char dbFName[TSDB_DB_FNAME_LEN]; + SCtgTbCfgCtx* pCtx = (SCtgTbCfgCtx*)pTask->taskCtx; + SArray* pRes = NULL; + char dbFName[TSDB_DB_FNAME_LEN]; tNameGetFullDbName(pCtx->pName, dbFName); - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1930,12 +1934,11 @@ _return: CTG_RET(code); } - -int32_t ctgLaunchGetQnodeTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetQnodeTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1944,11 +1947,11 @@ int32_t ctgLaunchGetQnodeTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetDnodeTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetDnodeTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1957,13 +1960,12 @@ int32_t ctgLaunchGetDnodeTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } - -int32_t ctgLaunchGetDbCfgTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetDbCfgTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgDbCfgCtx* pCtx = (SCtgDbCfgCtx*)pTask->taskCtx; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgDbCfgCtx* pCtx = (SCtgDbCfgCtx*)pTask->taskCtx; + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -1973,13 +1975,13 @@ int32_t ctgLaunchGetDbCfgTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetDbInfoTask(SCtgTask *pTask) { - int32_t code = 0; - SCatalog* pCtg = pTask->pJob->pCtg; - SCtgDBCache *dbCache = NULL; +int32_t ctgLaunchGetDbInfoTask(SCtgTask* pTask) { + int32_t code = 0; + SCatalog* pCtg = pTask->pJob->pCtg; + SCtgDBCache* dbCache = NULL; SCtgDbInfoCtx* pCtx = (SCtgDbInfoCtx*)pTask->taskCtx; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -2013,12 +2015,12 @@ _return: CTG_RET(code); } -int32_t ctgLaunchGetIndexTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetIndexTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgIndexCtx* pCtx = (SCtgIndexCtx*)pTask->taskCtx; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgIndexCtx* pCtx = (SCtgIndexCtx*)pTask->taskCtx; + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -2028,12 +2030,12 @@ int32_t ctgLaunchGetIndexTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetUdfTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetUdfTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgUdfCtx* pCtx = (SCtgUdfCtx*)pTask->taskCtx; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgUdfCtx* pCtx = (SCtgUdfCtx*)pTask->taskCtx; + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -2043,14 +2045,14 @@ int32_t ctgLaunchGetUdfTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetUserTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetUserTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgUserCtx* pCtx = (SCtgUserCtx*)pTask->taskCtx; - bool inCache = false; - bool pass = false; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgUserCtx* pCtx = (SCtgUserCtx*)pTask->taskCtx; + bool inCache = false; + bool pass = false; + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -2072,11 +2074,11 @@ int32_t ctgLaunchGetUserTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchGetSvrVerTask(SCtgTask *pTask) { - SCatalog* pCtg = pTask->pJob->pCtg; +int32_t ctgLaunchGetSvrVerTask(SCtgTask* pTask) { + SCatalog* pCtg = pTask->pJob->pCtg; SRequestConnInfo* pConn = &pTask->pJob->conn; - SCtgJob* pJob = pTask->pJob; - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgJob* pJob = pTask->pJob; + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); if (NULL == pMsgCtx->pBatchs) { pMsgCtx->pBatchs = pJob->pBatchs; } @@ -2086,7 +2088,7 @@ int32_t ctgLaunchGetSvrVerTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgRelaunchGetTbMetaTask(SCtgTask *pTask) { +int32_t ctgRelaunchGetTbMetaTask(SCtgTask* pTask) { ctgResetTbMetaTask(pTask); CTG_ERR_RET(ctgLaunchGetTbMetaTask(pTask)); @@ -2094,7 +2096,7 @@ int32_t ctgRelaunchGetTbMetaTask(SCtgTask *pTask) { return TSDB_CODE_SUCCESS; } -int32_t ctgGetTbCfgCb(SCtgTask *pTask) { +int32_t ctgGetTbCfgCb(SCtgTask* pTask) { int32_t code = 0; CTG_ERR_JRET(pTask->subRes.code); @@ -2124,7 +2126,6 @@ int32_t ctgCompDbVgTasks(SCtgTask* pTask, void* param, bool* equal) { return TSDB_CODE_SUCCESS; } - int32_t ctgCompTbMetaTasks(SCtgTask* pTask, void* param, bool* equal) { SCtgTbMetaCtx* ctx = pTask->taskCtx; @@ -2145,38 +2146,38 @@ int32_t ctgCloneDbVg(SCtgTask* pTask, void** pRes) { CTG_RET(cloneDbVgInfo(pOut->dbVgroup, (SDBVgInfo**)pRes)); } - SCtgAsyncFps gCtgAsyncFps[] = { - {ctgInitGetQnodeTask, ctgLaunchGetQnodeTask, ctgHandleGetQnodeRsp, ctgDumpQnodeRes, NULL, NULL}, - {ctgInitGetDnodeTask, ctgLaunchGetDnodeTask, ctgHandleGetDnodeRsp, ctgDumpDnodeRes, NULL, NULL}, - {ctgInitGetDbVgTask, ctgLaunchGetDbVgTask, ctgHandleGetDbVgRsp, ctgDumpDbVgRes, ctgCompDbVgTasks, ctgCloneDbVg}, - {ctgInitGetDbCfgTask, ctgLaunchGetDbCfgTask, ctgHandleGetDbCfgRsp, ctgDumpDbCfgRes, NULL, NULL}, - {ctgInitGetDbInfoTask, ctgLaunchGetDbInfoTask, ctgHandleGetDbInfoRsp, ctgDumpDbInfoRes, NULL, NULL}, - {ctgInitGetTbMetaTask, ctgLaunchGetTbMetaTask, ctgHandleGetTbMetaRsp, ctgDumpTbMetaRes, ctgCompTbMetaTasks, ctgCloneTbMeta}, - {ctgInitGetTbHashTask, ctgLaunchGetTbHashTask, ctgHandleGetTbHashRsp, ctgDumpTbHashRes, NULL, NULL}, - {ctgInitGetTbIndexTask, ctgLaunchGetTbIndexTask, ctgHandleGetTbIndexRsp, ctgDumpTbIndexRes, NULL, NULL}, - {ctgInitGetTbCfgTask, ctgLaunchGetTbCfgTask, ctgHandleGetTbCfgRsp, ctgDumpTbCfgRes, NULL, NULL}, - {ctgInitGetIndexTask, ctgLaunchGetIndexTask, ctgHandleGetIndexRsp, ctgDumpIndexRes, NULL, NULL}, - {ctgInitGetUdfTask, ctgLaunchGetUdfTask, ctgHandleGetUdfRsp, ctgDumpUdfRes, NULL, NULL}, - {ctgInitGetUserTask, ctgLaunchGetUserTask, ctgHandleGetUserRsp, ctgDumpUserRes, NULL, NULL}, - {ctgInitGetSvrVerTask, ctgLaunchGetSvrVerTask, ctgHandleGetSvrVerRsp, ctgDumpSvrVer, NULL, NULL}, - {ctgInitGetTbMetasTask, ctgLaunchGetTbMetasTask, ctgHandleGetTbMetasRsp, ctgDumpTbMetasRes, NULL, NULL}, - {ctgInitGetTbHashsTask, ctgLaunchGetTbHashsTask, ctgHandleGetTbHashsRsp, ctgDumpTbHashsRes, NULL, NULL}, + {ctgInitGetQnodeTask, ctgLaunchGetQnodeTask, ctgHandleGetQnodeRsp, ctgDumpQnodeRes, NULL, NULL}, + {ctgInitGetDnodeTask, ctgLaunchGetDnodeTask, ctgHandleGetDnodeRsp, ctgDumpDnodeRes, NULL, NULL}, + {ctgInitGetDbVgTask, ctgLaunchGetDbVgTask, ctgHandleGetDbVgRsp, ctgDumpDbVgRes, ctgCompDbVgTasks, ctgCloneDbVg}, + {ctgInitGetDbCfgTask, ctgLaunchGetDbCfgTask, ctgHandleGetDbCfgRsp, ctgDumpDbCfgRes, NULL, NULL}, + {ctgInitGetDbInfoTask, ctgLaunchGetDbInfoTask, ctgHandleGetDbInfoRsp, ctgDumpDbInfoRes, NULL, NULL}, + {ctgInitGetTbMetaTask, ctgLaunchGetTbMetaTask, ctgHandleGetTbMetaRsp, ctgDumpTbMetaRes, ctgCompTbMetaTasks, + ctgCloneTbMeta}, + {ctgInitGetTbHashTask, ctgLaunchGetTbHashTask, ctgHandleGetTbHashRsp, ctgDumpTbHashRes, NULL, NULL}, + {ctgInitGetTbIndexTask, ctgLaunchGetTbIndexTask, ctgHandleGetTbIndexRsp, ctgDumpTbIndexRes, NULL, NULL}, + {ctgInitGetTbCfgTask, ctgLaunchGetTbCfgTask, ctgHandleGetTbCfgRsp, ctgDumpTbCfgRes, NULL, NULL}, + {ctgInitGetIndexTask, ctgLaunchGetIndexTask, ctgHandleGetIndexRsp, ctgDumpIndexRes, NULL, NULL}, + {ctgInitGetUdfTask, ctgLaunchGetUdfTask, ctgHandleGetUdfRsp, ctgDumpUdfRes, NULL, NULL}, + {ctgInitGetUserTask, ctgLaunchGetUserTask, ctgHandleGetUserRsp, ctgDumpUserRes, NULL, NULL}, + {ctgInitGetSvrVerTask, ctgLaunchGetSvrVerTask, ctgHandleGetSvrVerRsp, ctgDumpSvrVer, NULL, NULL}, + {ctgInitGetTbMetasTask, ctgLaunchGetTbMetasTask, ctgHandleGetTbMetasRsp, ctgDumpTbMetasRes, NULL, NULL}, + {ctgInitGetTbHashsTask, ctgLaunchGetTbHashsTask, ctgHandleGetTbHashsRsp, ctgDumpTbHashsRes, NULL, NULL}, }; -int32_t ctgMakeAsyncRes(SCtgJob *pJob) { +int32_t ctgMakeAsyncRes(SCtgJob* pJob) { int32_t code = 0; int32_t taskNum = taosArrayGetSize(pJob->pTasks); for (int32_t i = 0; i < taskNum; ++i) { - SCtgTask *pTask = taosArrayGet(pJob->pTasks, i); + SCtgTask* pTask = taosArrayGet(pJob->pTasks, i); CTG_ERR_RET((*gCtgAsyncFps[pTask->type].dumpResFp)(pTask)); } return TSDB_CODE_SUCCESS; } -int32_t ctgSearchExistingTask(SCtgJob *pJob, CTG_TASK_TYPE type, void* param, int32_t* taskId) { +int32_t ctgSearchExistingTask(SCtgJob* pJob, CTG_TASK_TYPE type, void* param, int32_t* taskId) { bool equal = false; SCtgTask* pTask = NULL; int32_t code = 0; @@ -2186,7 +2187,7 @@ int32_t ctgSearchExistingTask(SCtgJob *pJob, CTG_TASK_TYPE type, void* param, in int32_t taskNum = taosArrayGetSize(pJob->pTasks); for (int32_t i = 0; i < taskNum; ++i) { pTask = taosArrayGet(pJob->pTasks, i); - if (type != pTask->type) { + if (type != pTask->type) { continue; } @@ -2206,15 +2207,15 @@ _return: CTG_RET(code); } -int32_t ctgSetSubTaskCb(SCtgTask *pSub, SCtgTask *pTask) { +int32_t ctgSetSubTaskCb(SCtgTask* pSub, SCtgTask* pTask) { int32_t code = 0; CTG_LOCK(CTG_WRITE, &pSub->lock); if (CTG_TASK_DONE == pSub->status) { pTask->subRes.code = pSub->code; CTG_ERR_JRET((*gCtgAsyncFps[pTask->type].cloneFp)(pSub, &pTask->subRes.res)); - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); - SCtgMsgCtx *pSubMsgCtx = CTG_GET_TASK_MSGCTX(pSub, -1); + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgMsgCtx* pSubMsgCtx = CTG_GET_TASK_MSGCTX(pSub, -1); pMsgCtx->pBatchs = pSubMsgCtx->pBatchs; CTG_ERR_JRET(pTask->subRes.fp(pTask)); @@ -2233,8 +2234,7 @@ _return: CTG_RET(code); } - -int32_t ctgLaunchSubTask(SCtgTask *pTask, CTG_TASK_TYPE type, ctgSubTaskCbFp fp, void* param) { +int32_t ctgLaunchSubTask(SCtgTask* pTask, CTG_TASK_TYPE type, ctgSubTaskCbFp fp, void* param) { SCtgJob* pJob = pTask->pJob; int32_t subTaskId = -1; bool newTask = false; @@ -2254,8 +2254,8 @@ int32_t ctgLaunchSubTask(SCtgTask *pTask, CTG_TASK_TYPE type, ctgSubTaskCbFp fp, CTG_ERR_RET(ctgSetSubTaskCb(pSub, pTask)); if (newTask) { - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); - SCtgMsgCtx *pSubMsgCtx = CTG_GET_TASK_MSGCTX(pSub, -1); + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgMsgCtx* pSubMsgCtx = CTG_GET_TASK_MSGCTX(pSub, -1); pSubMsgCtx->pBatchs = pMsgCtx->pBatchs; CTG_ERR_RET((*gCtgAsyncFps[pSub->type].launchFp)(pSub)); @@ -2265,11 +2265,11 @@ int32_t ctgLaunchSubTask(SCtgTask *pTask, CTG_TASK_TYPE type, ctgSubTaskCbFp fp, return TSDB_CODE_SUCCESS; } -int32_t ctgLaunchJob(SCtgJob *pJob) { +int32_t ctgLaunchJob(SCtgJob* pJob) { int32_t taskNum = taosArrayGetSize(pJob->pTasks); for (int32_t i = 0; i < taskNum; ++i) { - SCtgTask *pTask = taosArrayGet(pJob->pTasks, i); + SCtgTask* pTask = taosArrayGet(pJob->pTasks, i); qDebug("QID:0x%" PRIx64 " ctg launch [%dth] task", pJob->queryId, pTask->taskId); CTG_ERR_RET((*gCtgAsyncFps[pTask->type].launchFp)(pTask)); @@ -2289,6 +2289,3 @@ int32_t ctgLaunchJob(SCtgJob *pJob) { return TSDB_CODE_SUCCESS; } - - - diff --git a/source/libs/catalog/src/ctgRemote.c b/source/libs/catalog/src/ctgRemote.c index 1fdf84e120..7b8c66e368 100644 --- a/source/libs/catalog/src/ctgRemote.c +++ b/source/libs/catalog/src/ctgRemote.c @@ -68,14 +68,15 @@ int32_t ctgHandleBatchRsp(SCtgJob* pJob, SCtgTaskCallbackParam* cbParam, SDataBu taskMsg.pData = NULL; taskMsg.len = 0; } - + SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = rsp.msgIdx; + tReq.msgIdx = rsp.msgIdx; SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq.msgIdx); pMsgCtx->pBatchs = pBatchs; - ctgDebug("QID:0x%" PRIx64 " ctg task %d idx %d start to handle rsp %s, pBatchs: %p", pJob->queryId, pTask->taskId, rsp.msgIdx, TMSG_INFO(taskMsg.msgType + 1), pBatchs); + ctgDebug("QID:0x%" PRIx64 " ctg task %d idx %d start to handle rsp %s, pBatchs: %p", pJob->queryId, pTask->taskId, + rsp.msgIdx, TMSG_INFO(taskMsg.msgType + 1), pBatchs); (*gCtgAsyncFps[pTask->type].handleRspFp)(&tReq, rsp.reqType, &taskMsg, (rsp.rspCode ? rsp.rspCode : rspCode)); } @@ -344,13 +345,14 @@ int32_t ctgHandleMsgCallback(void* param, SDataBuf* pMsg, int32_t rspCode) { CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } - SCtgMsgCtx *pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); + SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, -1); pMsgCtx->pBatchs = pBatchs; #endif SCtgTaskReq tReq; tReq.pTask = pTask; tReq.msgIdx = -1; + CTG_ERR_JRET((*gCtgAsyncFps[pTask->type].handleRspFp)(&tReq, cbParam->reqType, pMsg, rspCode)); #if CTG_BATCH_FETCH @@ -361,6 +363,7 @@ int32_t ctgHandleMsgCallback(void* param, SDataBuf* pMsg, int32_t rspCode) { _return: taosMemoryFree(pMsg->pData); + taosMemoryFree(pMsg->pEpSet); if (pJob) { taosReleaseRef(gCtgMgmt.jobPool, cbParam->refId); @@ -442,17 +445,17 @@ _return: CTG_RET(code); } -int32_t ctgAddBatch(SCatalog* pCtg, int32_t vgId, SRequestConnInfo* pConn, SCtgTaskReq* tReq, int32_t msgType, void* msg, - uint32_t msgSize) { - int32_t code = 0; - SCtgTask* pTask = tReq->pTask; +int32_t ctgAddBatch(SCatalog* pCtg, int32_t vgId, SRequestConnInfo* pConn, SCtgTaskReq* tReq, int32_t msgType, + void* msg, uint32_t msgSize) { + int32_t code = 0; + SCtgTask* pTask = tReq->pTask; SCtgMsgCtx* pMsgCtx = CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx); - SHashObj* pBatchs = pMsgCtx->pBatchs; - SCtgJob* pJob = pTask->pJob; - SCtgBatch* pBatch = taosHashGet(pBatchs, &vgId, sizeof(vgId)); - SCtgBatch newBatch = {0}; - SBatchMsg req = {0}; - + SHashObj* pBatchs = pMsgCtx->pBatchs; + SCtgJob* pJob = pTask->pJob; + SCtgBatch* pBatch = taosHashGet(pBatchs, &vgId, sizeof(vgId)); + SCtgBatch newBatch = {0}; + SBatchMsg req = {0}; + if (NULL == pBatch) { newBatch.pMsgs = taosArrayInit(pJob->subTaskNum, sizeof(SBatchMsg)); newBatch.pTaskIds = taosArrayInit(pJob->subTaskNum, sizeof(int32_t)); @@ -487,7 +490,7 @@ int32_t ctgAddBatch(SCatalog* pCtg, int32_t vgId, SRequestConnInfo* pConn, SCtgT } else if (TDMT_VND_TABLE_META == msgType) { if (CTG_TASK_GET_TB_META_BATCH == pTask->type) { SCtgTbMetasCtx* ctx = (SCtgTbMetasCtx*)pTask->taskCtx; - SCtgFetch* fetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); + SCtgFetch* fetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); pName = ctgGetFetchName(ctx->pNames, fetch); } else { SCtgTbMetaCtx* ctx = (SCtgTbMetaCtx*)pTask->taskCtx; @@ -521,14 +524,14 @@ int32_t ctgAddBatch(SCatalog* pCtg, int32_t vgId, SRequestConnInfo* pConn, SCtgT if (NULL == taosArrayPush(pBatch->pMsgs, &req)) { CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } - msg = NULL; + msg = NULL; if (NULL == taosArrayPush(pBatch->pTaskIds, &pTask->taskId)) { CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } if (NULL == taosArrayPush(pBatch->pMsgIdxs, &req.msgIdx)) { CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } - + pBatch->msgSize += sizeof(req) + msgSize - POINTER_BYTES; if (vgId > 0) { @@ -539,7 +542,7 @@ int32_t ctgAddBatch(SCatalog* pCtg, int32_t vgId, SRequestConnInfo* pConn, SCtgT } else if (TDMT_VND_TABLE_META == msgType) { if (CTG_TASK_GET_TB_META_BATCH == pTask->type) { SCtgTbMetasCtx* ctx = (SCtgTbMetasCtx*)pTask->taskCtx; - SCtgFetch* fetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); + SCtgFetch* fetch = taosArrayGet(ctx->pFetchs, tReq->msgIdx); pName = ctgGetFetchName(ctx->pNames, fetch); } else { SCtgTbMetaCtx* ctx = (SCtgTbMetaCtx*)pTask->taskCtx; @@ -550,7 +553,7 @@ int32_t ctgAddBatch(SCatalog* pCtg, int32_t vgId, SRequestConnInfo* pConn, SCtgT CTG_ERR_JRET(TSDB_CODE_APP_ERROR); } - tNameGetFullDbName(pName, pBatch->dbFName); + tNameGetFullDbName(pName, pBatch->dbFName); } ctgDebug("task %d %s req added to batch %d, target vgId %d", pTask->taskId, TMSG_INFO(msgType), pBatch->batchId, @@ -583,7 +586,7 @@ int32_t ctgBuildBatchReqMsg(SCtgBatch* pBatch, int32_t vgId, void** msg) { for (int32_t i = 0; i < num; ++i) { SBatchMsg* pReq = taosArrayGet(pBatch->pMsgs, i); *(int32_t*)((char*)(*msg) + offset) = htonl(pReq->msgIdx); - offset += sizeof(pReq->msgIdx); + offset += sizeof(pReq->msgIdx); *(int32_t*)((char*)(*msg) + offset) = htonl(pReq->msgType); offset += sizeof(pReq->msgType); *(int32_t*)((char*)(*msg) + offset) = htonl(pReq->msgLen); @@ -611,7 +614,7 @@ int32_t ctgLaunchBatchs(SCatalog* pCtg, SCtgJob* pJob, SHashObj* pBatchs) { ctgDebug("QID:0x%" PRIx64 " ctg start to launch batch %d", pJob->queryId, pBatch->batchId); CTG_ERR_JRET(ctgBuildBatchReqMsg(pBatch, *vgId, &msg)); - code = ctgAsyncSendMsg(pCtg, &pBatch->conn, pJob, pBatch->pTaskIds, pBatch->batchId, pBatch->pMsgIdxs, + code = ctgAsyncSendMsg(pCtg, &pBatch->conn, pJob, pBatch->pTaskIds, pBatch->batchId, pBatch->pMsgIdxs, pBatch->dbFName, *vgId, pBatch->msgType, msg, pBatch->msgSize); pBatch->pTaskIds = NULL; CTG_ERR_JRET(code); @@ -656,7 +659,7 @@ int32_t ctgGetQnodeListFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, SArray #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -705,7 +708,7 @@ int32_t ctgGetDnodeListFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, SArray #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -736,9 +739,9 @@ int32_t ctgGetDnodeListFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, SArray int32_t ctgGetDBVgInfoFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, SBuildUseDBInput* input, SUseDbOutput* out, SCtgTaskReq* tReq) { - char* msg = NULL; - int32_t msgLen = 0; - int32_t reqType = TDMT_MND_USE_DB; + char* msg = NULL; + int32_t msgLen = 0; + int32_t reqType = TDMT_MND_USE_DB; SCtgTask* pTask = tReq ? tReq->pTask : NULL; void* (*mallocFp)(int32_t) = pTask ? taosMemoryMalloc : rpcMallocCont; @@ -813,7 +816,7 @@ int32_t ctgGetDBCfgFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, const char #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -868,7 +871,7 @@ int32_t ctgGetIndexInfoFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, const #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -919,13 +922,13 @@ int32_t ctgGetTbIndexFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, SName* n if (NULL == pOut) { CTG_ERR_RET(TSDB_CODE_OUT_OF_MEMORY); } - + CTG_ERR_RET(ctgUpdateMsgCtx(CTG_GET_TASK_MSGCTX(pTask, -1), reqType, pOut, (char*)tbFName)); #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -980,7 +983,7 @@ int32_t ctgGetUdfInfoFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, const ch #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -1035,7 +1038,7 @@ int32_t ctgGetUserDbAuthFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, const #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -1066,7 +1069,7 @@ int32_t ctgGetUserDbAuthFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, const int32_t ctgGetTbMetaFromMnodeImpl(SCatalog* pCtg, SRequestConnInfo* pConn, char* dbFName, char* tbName, STableMetaOutput* out, SCtgTaskReq* tReq) { - SCtgTask *pTask = tReq ? tReq->pTask : NULL; + SCtgTask* pTask = tReq ? tReq->pTask : NULL; SBuildTableInput bInput = {.vgId = 0, .dbFName = dbFName, .tbName = tbName}; char* msg = NULL; SEpSet* pVnodeEpSet = NULL; @@ -1091,7 +1094,7 @@ int32_t ctgGetTbMetaFromMnodeImpl(SCatalog* pCtg, SRequestConnInfo* pConn, char* } CTG_ERR_RET(ctgUpdateMsgCtx(CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx), reqType, pOut, tbFName)); - + #if CTG_BATCH_FETCH CTG_RET(ctgAddBatch(pCtg, 0, pConn, tReq, reqType, msg, msgLen)); #else @@ -1131,8 +1134,8 @@ int32_t ctgGetTbMetaFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, const SNa int32_t ctgGetTbMetaFromVnode(SCatalog* pCtg, SRequestConnInfo* pConn, const SName* pTableName, SVgroupInfo* vgroupInfo, STableMetaOutput* out, SCtgTaskReq* tReq) { - SCtgTask *pTask = tReq ? tReq->pTask : NULL; - char dbFName[TSDB_DB_FNAME_LEN]; + SCtgTask* pTask = tReq ? tReq->pTask : NULL; + char dbFName[TSDB_DB_FNAME_LEN]; tNameGetFullDbName(pTableName, dbFName); int32_t reqType = TDMT_VND_TABLE_META; char tbFName[TSDB_TABLE_FNAME_LEN]; @@ -1165,7 +1168,7 @@ int32_t ctgGetTbMetaFromVnode(SCatalog* pCtg, SRequestConnInfo* pConn, const SNa .requestObjRefId = pConn->requestObjRefId, .mgmtEps = vgroupInfo->epSet}; - CTG_ERR_RET(ctgUpdateMsgCtx(CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx), reqType, pOut, tbFName)); + CTG_ERR_RET(ctgUpdateMsgCtx(CTG_GET_TASK_MSGCTX(pTask, tReq->msgIdx), reqType, pOut, tbFName)); #if CTG_BATCH_FETCH CTG_RET(ctgAddBatch(pCtg, vgroupInfo->vgId, &vConn, tReq, reqType, msg, msgLen)); @@ -1231,7 +1234,7 @@ int32_t ctgGetTableCfgFromVnode(SCatalog* pCtg, SRequestConnInfo* pConn, const S #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, vgroupInfo->vgId, &vConn, &tReq, reqType, msg, msgLen)); #else SCtgTbCfgCtx* ctx = (SCtgTbCfgCtx*)pTask->taskCtx; @@ -1243,7 +1246,8 @@ int32_t ctgGetTableCfgFromVnode(SCatalog* pCtg, SRequestConnInfo* pConn, const S } taosArrayPush(pTaskId, &pTask->taskId); - CTG_RET(ctgAsyncSendMsg(pCtg, &vConn, pTask->pJob, pTaskId, -1, NULL, dbFName, ctx->pVgInfo->vgId, reqType, msg, msgLen)); + CTG_RET(ctgAsyncSendMsg(pCtg, &vConn, pTask->pJob, pTaskId, -1, NULL, dbFName, ctx->pVgInfo->vgId, reqType, msg, + msgLen)); #endif } @@ -1289,7 +1293,7 @@ int32_t ctgGetTableCfgFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, const S #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); @@ -1338,7 +1342,7 @@ int32_t ctgGetSvrVerFromMnode(SCatalog* pCtg, SRequestConnInfo* pConn, char** ou #if CTG_BATCH_FETCH SCtgTaskReq tReq; tReq.pTask = pTask; - tReq.msgIdx = -1; + tReq.msgIdx = -1; CTG_RET(ctgAddBatch(pCtg, 0, pConn, &tReq, reqType, msg, msgLen)); #else SArray* pTaskId = taosArrayInit(1, sizeof(int32_t)); diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c index 275fbb8016..c6dc57d752 100644 --- a/source/libs/scheduler/src/schRemote.c +++ b/source/libs/scheduler/src/schRemote.c @@ -384,8 +384,7 @@ _return: taosMemoryFreeClear(msg); SCH_RET(schProcessOnTaskFailure(pJob, pTask, code)); -} - +} int32_t schHandleCallback(void *param, SDataBuf *pMsg, int32_t rspCode) { int32_t code = 0; SSchTaskCallbackParam *pParam = (SSchTaskCallbackParam *)param; From 90fac9b8da70a11ccb6ddcbbe3cf03fc298cb0b7 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 15 Sep 2022 21:11:12 +0800 Subject: [PATCH 02/21] fix(tsc): avoid mem leak --- source/client/src/clientMsgHandler.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/client/src/clientMsgHandler.c b/source/client/src/clientMsgHandler.c index ebccc5ea1a..cdf977bea3 100644 --- a/source/client/src/clientMsgHandler.c +++ b/source/client/src/clientMsgHandler.c @@ -47,6 +47,7 @@ int32_t genericRspCallback(void* param, SDataBuf* pMsg, int32_t code) { int32_t processConnectRsp(void* param, SDataBuf* pMsg, int32_t code) { SRequestObj* pRequest = param; if (code != TSDB_CODE_SUCCESS) { + taosMemoryFree(pMsg->pEpSet); taosMemoryFree(pMsg->pData); setErrno(pRequest, code); tsem_post(&pRequest->body.rspSem); @@ -72,6 +73,7 @@ int32_t processConnectRsp(void* param, SDataBuf* pMsg, int32_t code) { /*assert(connectRsp.epSet.numOfEps > 0);*/ if (connectRsp.epSet.numOfEps == 0) { + taosMemoryFree(pMsg->pEpSet); taosMemoryFree(pMsg->pData); setErrno(pRequest, TSDB_CODE_MND_APP_ERROR); tsem_post(&pRequest->body.rspSem); From 3398de8a35ba6409a745a5625a06a14eaa0f99c4 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 15 Sep 2022 21:35:54 +0800 Subject: [PATCH 03/21] fix(tsc): avoid mem leak --- source/dnode/mgmt/node_mgmt/src/dmTransport.c | 2 +- source/libs/transport/src/transCli.c | 4 +--- source/libs/transport/src/transSvr.c | 4 ++++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/source/dnode/mgmt/node_mgmt/src/dmTransport.c b/source/dnode/mgmt/node_mgmt/src/dmTransport.c index b91b82b72e..f57943b9dd 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmTransport.c +++ b/source/dnode/mgmt/node_mgmt/src/dmTransport.c @@ -270,7 +270,7 @@ int32_t dmInitClient(SDnode *pDnode) { SRpcInit rpcInit = {0}; rpcInit.label = "DND-C"; - rpcInit.numOfThreads = 1; + rpcInit.numOfThreads = 4; rpcInit.cfp = (RpcCfp)dmProcessRpcMsg; rpcInit.sessions = 1024; rpcInit.connType = TAOS_CONN_CLIENT; diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index dcfa93431b..191011111d 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -1498,9 +1498,7 @@ int transSendRequest(void* shandle, const SEpSet* pEpSet, STransMsg* pReq, STran pCtx->ahandle = pReq->info.ahandle; pCtx->msgType = pReq->msgType; - if (ctx != NULL) { - pCtx->appCtx = *ctx; - } + if (ctx != NULL) pCtx->appCtx = *ctx; SCliMsg* cliMsg = taosMemoryCalloc(1, sizeof(SCliMsg)); cliMsg->ctx = pCtx; diff --git a/source/libs/transport/src/transSvr.c b/source/libs/transport/src/transSvr.c index d3277d1cc1..70a47fe079 100644 --- a/source/libs/transport/src/transSvr.c +++ b/source/libs/transport/src/transSvr.c @@ -1148,6 +1148,7 @@ int transReleaseSrvHandle(void* handle) { tTrace("%s conn %p start to release", transLabel(pThrd->pTransInst), exh->handle); transAsyncSend(pThrd->asyncPool, &m->q); + transReleaseExHandle(transGetRefMgt(), refId); return 0; _return1: @@ -1177,8 +1178,10 @@ int transSendResponse(const STransMsg* msg) { STraceId* trace = (STraceId*)&msg->info.traceId; tGTrace("conn %p start to send resp (1/2)", exh->handle); transAsyncSend(pThrd->asyncPool, &m->q); + transReleaseExHandle(transGetRefMgt(), refId); return 0; + _return1: tTrace("handle %p failed to send resp", exh); rpcFreeCont(msg->pCont); @@ -1207,6 +1210,7 @@ int transRegisterMsg(const STransMsg* msg) { STrans* pTransInst = pThrd->pTransInst; tTrace("%s conn %p start to register brokenlink callback", transLabel(pTransInst), exh->handle); transAsyncSend(pThrd->asyncPool, &m->q); + transReleaseExHandle(transGetRefMgt(), refId); return 0; From b9a2d3251cff3627e101bf11518770e61082a9a0 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Thu, 15 Sep 2022 22:45:03 +0800 Subject: [PATCH 04/21] enh: plan serialization optimize --- source/libs/nodes/src/nodesMsgFuncs.c | 953 ++++++++++++++++++-------- 1 file changed, 660 insertions(+), 293 deletions(-) diff --git a/source/libs/nodes/src/nodesMsgFuncs.c b/source/libs/nodes/src/nodesMsgFuncs.c index efe820fee2..3d6bd4e0ac 100644 --- a/source/libs/nodes/src/nodesMsgFuncs.c +++ b/source/libs/nodes/src/nodesMsgFuncs.c @@ -18,6 +18,7 @@ #include "tdatablock.h" #define NODES_MSG_DEFAULT_LEN 1024 +#define TLV_TYPE_ARRAY_ELEM 0 #define tlvForEach(pDecoder, pTlv, code) \ while (TSDB_CODE_SUCCESS == code && TSDB_CODE_SUCCESS == (code = tlvGetNextTlv(pDecoder, &pTlv)) && NULL != pTlv) @@ -26,7 +27,7 @@ typedef struct STlv { int16_t type; int32_t len; char value[0]; -} STlv; +} __attribute__((packed, aligned(1))) STlv; typedef struct STlvEncoder { int32_t allocSize; @@ -89,46 +90,100 @@ static int32_t tlvEncodeImpl(STlvEncoder* pEncoder, int16_t type, const void* pV return TSDB_CODE_SUCCESS; } +static int32_t tlvEncodeValueImpl(STlvEncoder* pEncoder, const void* pValue, int32_t len) { + if (pEncoder->offset + len > pEncoder->allocSize) { + void* pNewBuf = taosMemoryRealloc(pEncoder->pBuf, pEncoder->allocSize * 2); + if (NULL == pNewBuf) { + return TSDB_CODE_OUT_OF_MEMORY; + } + pEncoder->pBuf = pNewBuf; + pEncoder->allocSize = pEncoder->allocSize * 2; + } + memcpy(pEncoder->pBuf + pEncoder->offset, pValue, len); + pEncoder->offset += len; + return TSDB_CODE_SUCCESS; +} + static int32_t tlvEncodeI8(STlvEncoder* pEncoder, int16_t type, int8_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueI8(STlvEncoder* pEncoder, int8_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeI16(STlvEncoder* pEncoder, int16_t type, int16_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueI16(STlvEncoder* pEncoder, int16_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeI32(STlvEncoder* pEncoder, int16_t type, int32_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueI32(STlvEncoder* pEncoder, int32_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeI64(STlvEncoder* pEncoder, int16_t type, int64_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueI64(STlvEncoder* pEncoder, int64_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeU8(STlvEncoder* pEncoder, int16_t type, uint8_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueU8(STlvEncoder* pEncoder, uint8_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeU16(STlvEncoder* pEncoder, int16_t type, uint16_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueU16(STlvEncoder* pEncoder, uint16_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeU64(STlvEncoder* pEncoder, int16_t type, uint64_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueU64(STlvEncoder* pEncoder, uint64_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeDouble(STlvEncoder* pEncoder, int16_t type, double value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueDouble(STlvEncoder* pEncoder, double value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeEnum(STlvEncoder* pEncoder, int16_t type, int32_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } -static int32_t tlvEncodeBool(STlvEncoder* pEncoder, int16_t type, bool value) { +static int32_t tlvEncodeValueEnum(STlvEncoder* pEncoder, int32_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + +static int32_t tlvEncodeBool(STlvEncoder* pEncoder, int16_t type, int8_t value) { return tlvEncodeImpl(pEncoder, type, &value, sizeof(value)); } +static int32_t tlvEncodeValueBool(STlvEncoder* pEncoder, int8_t value) { + return tlvEncodeValueImpl(pEncoder, &value, sizeof(value)); +} + static int32_t tlvEncodeCStr(STlvEncoder* pEncoder, int16_t type, const char* pValue) { if (NULL == pValue) { return TSDB_CODE_SUCCESS; @@ -136,6 +191,15 @@ static int32_t tlvEncodeCStr(STlvEncoder* pEncoder, int16_t type, const char* pV return tlvEncodeImpl(pEncoder, type, pValue, strlen(pValue)); } +static int32_t tlvEncodeValueCStr(STlvEncoder* pEncoder, const char* pValue) { + int16_t len = strlen(pValue); + int32_t code = tlvEncodeValueImpl(pEncoder, &len, sizeof(len)); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueImpl(pEncoder, pValue, len); + } + return code; +} + static int32_t tlvEncodeBinary(STlvEncoder* pEncoder, int16_t type, const void* pValue, int32_t len) { return tlvEncodeImpl(pEncoder, type, pValue, len); } @@ -153,6 +217,7 @@ static int32_t tlvEncodeObj(STlvEncoder* pEncoder, int16_t type, FToMsg func, co pTlv->type = type; pTlv->len = pEncoder->offset - start - sizeof(STlv); } + ++(pEncoder->tlvCount); return code; } @@ -163,7 +228,7 @@ static int32_t tlvEncodeObjArray(STlvEncoder* pEncoder, int16_t type, FToMsg fun int32_t start = pEncoder->offset; pEncoder->offset += sizeof(STlv); for (size_t i = 0; TSDB_CODE_SUCCESS == code && i < num; ++i) { - code = tlvEncodeObj(pEncoder, 0, func, (const char*)pArray + i * itemSize); + code = tlvEncodeObj(pEncoder, TLV_TYPE_ARRAY_ELEM, func, (const char*)pArray + i * itemSize); } if (TSDB_CODE_SUCCESS == code) { STlv* pTlv = (STlv*)(pEncoder->pBuf + start); @@ -174,6 +239,15 @@ static int32_t tlvEncodeObjArray(STlvEncoder* pEncoder, int16_t type, FToMsg fun return code; } +static int32_t tlvEncodeValueArray(STlvEncoder* pEncoder, FToMsg func, const void* pArray, int32_t itemSize, + int32_t num) { + int32_t code = tlvEncodeValueI32(pEncoder, num); + for (size_t i = 0; TSDB_CODE_SUCCESS == code && i < num; ++i) { + code = func((const char*)pArray + i * itemSize, pEncoder); + } + return code; +} + static int32_t tlvGetNextTlv(STlvDecoder* pDecoder, STlv** pTlv) { if (pDecoder->offset == pDecoder->bufSize) { *pTlv = NULL; @@ -198,27 +272,64 @@ static int32_t tlvDecodeImpl(STlv* pTlv, void* pValue, int32_t len) { return TSDB_CODE_SUCCESS; } +static int32_t tlvDecodeValueImpl(STlvDecoder* pDecoder, void* pValue, int32_t len) { + if (pDecoder->offset + len > pDecoder->bufSize) { + return TSDB_CODE_FAILED; + } + memcpy(pValue, pDecoder->pBuf + pDecoder->offset, len); + pDecoder->offset += len; + return TSDB_CODE_SUCCESS; +} + static int32_t tlvDecodeI8(STlv* pTlv, int8_t* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueI8(STlvDecoder* pDecoder, int8_t* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} + static int32_t tlvDecodeI16(STlv* pTlv, int16_t* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueI16(STlvDecoder* pDecoder, int16_t* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} + static int32_t tlvDecodeI32(STlv* pTlv, int32_t* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueI32(STlvDecoder* pDecoder, int32_t* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} + static int32_t tlvDecodeI64(STlv* pTlv, int64_t* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueI64(STlvDecoder* pDecoder, int64_t* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} + static int32_t tlvDecodeU8(STlv* pTlv, uint8_t* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueU8(STlvDecoder* pDecoder, uint8_t* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} + static int32_t tlvDecodeU16(STlv* pTlv, uint16_t* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueU16(STlvDecoder* pDecoder, uint16_t* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} + static int32_t tlvDecodeU64(STlv* pTlv, uint64_t* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueU64(STlvDecoder* pDecoder, uint64_t* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} + static int32_t tlvDecodeDouble(STlv* pTlv, double* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } -static int32_t tlvDecodeBool(STlv* pTlv, bool* pValue) { return tlvDecodeImpl(pTlv, pValue, sizeof(*pValue)); } +static int32_t tlvDecodeValueDouble(STlvDecoder* pDecoder, double* pValue) { + return tlvDecodeValueImpl(pDecoder, pValue, sizeof(*pValue)); +} -static int32_t tlvDecodeEnum(STlv* pTlv, void* pValue, int16_t len) { - int32_t value = 0; - memcpy(&value, pTlv->value, pTlv->len); +static int32_t convertIntegerType(int32_t value, void* pValue, int16_t len) { switch (len) { case 1: *(int8_t*)pValue = value; @@ -235,11 +346,56 @@ static int32_t tlvDecodeEnum(STlv* pTlv, void* pValue, int16_t len) { return TSDB_CODE_SUCCESS; } +static int32_t tlvDecodeBool(STlv* pTlv, bool* pValue) { + int8_t value = 0; + int32_t code = tlvDecodeI8(pTlv, &value); + if (TSDB_CODE_SUCCESS == code) { + code = convertIntegerType(value, pValue, sizeof(bool)); + } + return code; +} + +static int32_t tlvDecodeValueBool(STlvDecoder* pDecoder, bool* pValue) { + int8_t value = 0; + int32_t code = tlvDecodeValueI8(pDecoder, &value); + if (TSDB_CODE_SUCCESS == code) { + code = convertIntegerType(value, pValue, sizeof(bool)); + } + return code; +} + +static int32_t tlvDecodeEnum(STlv* pTlv, void* pValue, int16_t len) { + int32_t value = 0; + int32_t code = tlvDecodeI32(pTlv, &value); + if (TSDB_CODE_SUCCESS == code) { + code = convertIntegerType(value, pValue, len); + } + return code; +} + +static int32_t tlvDecodeValueEnum(STlvDecoder* pDecoder, void* pValue, int16_t len) { + int32_t value = 0; + int32_t code = tlvDecodeValueI32(pDecoder, &value); + if (TSDB_CODE_SUCCESS == code) { + code = convertIntegerType(value, pValue, len); + } + return code; +} + static int32_t tlvDecodeCStr(STlv* pTlv, char* pValue) { memcpy(pValue, pTlv->value, pTlv->len); return TSDB_CODE_SUCCESS; } +static int32_t tlvDecodeValueCStr(STlvDecoder* pDecoder, char* pValue) { + int16_t len = 0; + int32_t code = tlvDecodeValueI16(pDecoder, &len); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueImpl(pDecoder, pValue, len); + } + return code; +} + static int32_t tlvDecodeCStrP(STlv* pTlv, char** pValue) { *pValue = strndup(pTlv->value, pTlv->len); return NULL == *pValue ? TSDB_CODE_OUT_OF_MEMORY : TSDB_CODE_SUCCESS; @@ -281,6 +437,15 @@ static int32_t tlvDecodeObjArray(STlvDecoder* pDecoder, FToObject func, void* pA return code; } +static int32_t tlvDecodeValueArray(STlvDecoder* pDecoder, FToObject func, void* pArray, int32_t itemSize, + int32_t* pNum) { + int32_t code = tlvDecodeValueI32(pDecoder, pNum); + for (size_t i = 0; TSDB_CODE_SUCCESS == code && i < *pNum; ++i) { + code = func(pDecoder, (char*)pArray + i * itemSize); + } + return code; +} + static int32_t tlvDecodeObjArrayFromTlv(STlv* pTlv, FToObject func, void* pArray, int32_t itemSize) { STlvDecoder decoder = {.bufSize = pTlv->len, .offset = 0, .pBuf = pTlv->value}; return tlvDecodeObjArray(&decoder, func, pArray, itemSize); @@ -305,6 +470,23 @@ static int32_t tlvDecodeDynObj(STlvDecoder* pDecoder, FMakeObject makeFunc, FToO enum { DATA_TYPE_CODE_TYPE = 1, DATA_TYPE_CODE_PRECISION, DATA_TYPE_CODE_SCALE, DATA_TYPE_CODE_BYTES }; +static int32_t dataTypeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SDataType* pNode = (const SDataType*)pObj; + + int32_t code = tlvEncodeValueI8(pEncoder, pNode->type); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueU8(pEncoder, pNode->precision); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueU8(pEncoder, pNode->scale); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->bytes); + } + + return code; +} + static int32_t dataTypeToMsg(const void* pObj, STlvEncoder* pEncoder) { const SDataType* pNode = (const SDataType*)pObj; @@ -322,6 +504,23 @@ static int32_t dataTypeToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToDataTypeInline(STlvDecoder* pDecoder, void* pObj) { + SDataType* pNode = (SDataType*)pObj; + + int32_t code = tlvDecodeValueI8(pDecoder, &pNode->type); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueU8(pDecoder, &pNode->precision); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueU8(pDecoder, &pNode->scale); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->bytes); + } + + return code; +} + static int32_t msgToDataType(STlvDecoder* pDecoder, void* pObj) { SDataType* pNode = (SDataType*)pObj; @@ -374,53 +573,83 @@ static int32_t msgToExprNode(STlvDecoder* pDecoder, void* pObj) { return code; } -enum { - COLUMN_CODE_EXPR_BASE = 1, - COLUMN_CODE_TABLE_ID, - COLUMN_CODE_TABLE_TYPE, - COLUMN_CODE_COLUMN_ID, - COLUMN_CODE_COLUMN_TYPE, - COLUMN_CODE_DB_NAME, - COLUMN_CODE_TABLE_NAME, - COLUMN_CODE_TABLE_ALIAS, - COLUMN_CODE_COL_NAME, - COLUMN_CODE_DATABLOCK_ID, - COLUMN_CODE_SLOT_ID -}; +enum { COLUMN_CODE_INLINE_ATTRS = 1 }; -static int32_t columnNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { +static int32_t columnNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { const SColumnNode* pNode = (const SColumnNode*)pObj; - int32_t code = tlvEncodeObj(pEncoder, COLUMN_CODE_EXPR_BASE, exprNodeToMsg, pNode); + int32_t code = dataTypeInlineToMsg(&pNode->node.resType, pEncoder); if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeU64(pEncoder, COLUMN_CODE_TABLE_ID, pNode->tableId); + code = tlvEncodeValueU64(pEncoder, pNode->tableId); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI8(pEncoder, COLUMN_CODE_TABLE_TYPE, pNode->tableType); + code = tlvEncodeValueI8(pEncoder, pNode->tableType); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI16(pEncoder, COLUMN_CODE_COLUMN_ID, pNode->colId); + code = tlvEncodeValueI16(pEncoder, pNode->colId); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeEnum(pEncoder, COLUMN_CODE_COLUMN_TYPE, pNode->colType); + code = tlvEncodeValueEnum(pEncoder, pNode->colType); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeCStr(pEncoder, COLUMN_CODE_DB_NAME, pNode->dbName); + code = tlvEncodeValueCStr(pEncoder, pNode->dbName); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeCStr(pEncoder, COLUMN_CODE_TABLE_NAME, pNode->tableName); + code = tlvEncodeValueCStr(pEncoder, pNode->tableName); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeCStr(pEncoder, COLUMN_CODE_TABLE_ALIAS, pNode->tableAlias); + code = tlvEncodeValueCStr(pEncoder, pNode->tableAlias); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeCStr(pEncoder, COLUMN_CODE_COL_NAME, pNode->colName); + code = tlvEncodeValueCStr(pEncoder, pNode->colName); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI16(pEncoder, COLUMN_CODE_DATABLOCK_ID, pNode->dataBlockId); + code = tlvEncodeValueI16(pEncoder, pNode->dataBlockId); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI16(pEncoder, COLUMN_CODE_SLOT_ID, pNode->slotId); + code = tlvEncodeValueI16(pEncoder, pNode->slotId); + } + + return code; +} + +static int32_t columnNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { + return tlvEncodeObj(pEncoder, COLUMN_CODE_INLINE_ATTRS, columnNodeInlineToMsg, pObj); +} + +static int32_t msgToColumnNodeInline(STlvDecoder* pDecoder, void* pObj) { + SColumnNode* pNode = (SColumnNode*)pObj; + + int32_t code = msgToDataTypeInline(pDecoder, &pNode->node.resType); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueU64(pDecoder, &pNode->tableId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI8(pDecoder, &pNode->tableType); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI16(pDecoder, &pNode->colId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueEnum(pDecoder, &pNode->colType, sizeof(pNode->colType)); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueCStr(pDecoder, pNode->dbName); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueCStr(pDecoder, pNode->tableName); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueCStr(pDecoder, pNode->tableAlias); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueCStr(pDecoder, pNode->colName); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI16(pDecoder, &pNode->dataBlockId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI16(pDecoder, &pNode->slotId); } return code; @@ -433,38 +662,8 @@ static int32_t msgToColumnNode(STlvDecoder* pDecoder, void* pObj) { STlv* pTlv = NULL; tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { - case COLUMN_CODE_EXPR_BASE: - code = tlvDecodeObjFromTlv(pTlv, msgToExprNode, &pNode->node); - break; - case COLUMN_CODE_TABLE_ID: - code = tlvDecodeU64(pTlv, &pNode->tableId); - break; - case COLUMN_CODE_TABLE_TYPE: - code = tlvDecodeI8(pTlv, &pNode->tableType); - break; - case COLUMN_CODE_COLUMN_ID: - code = tlvDecodeI16(pTlv, &pNode->colId); - break; - case COLUMN_CODE_COLUMN_TYPE: - code = tlvDecodeEnum(pTlv, &pNode->colType, sizeof(pNode->colType)); - break; - case COLUMN_CODE_DB_NAME: - code = tlvDecodeCStr(pTlv, pNode->dbName); - break; - case COLUMN_CODE_TABLE_NAME: - code = tlvDecodeCStr(pTlv, pNode->tableName); - break; - case COLUMN_CODE_TABLE_ALIAS: - code = tlvDecodeCStr(pTlv, pNode->tableAlias); - break; - case COLUMN_CODE_COL_NAME: - code = tlvDecodeCStr(pTlv, pNode->colName); - break; - case COLUMN_CODE_DATABLOCK_ID: - code = tlvDecodeI16(pTlv, &pNode->dataBlockId); - break; - case COLUMN_CODE_SLOT_ID: - code = tlvDecodeI16(pTlv, &pNode->slotId); + case COLUMN_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToColumnNodeInline, pNode); break; default: break; @@ -983,7 +1182,7 @@ enum { NODE_LIST_CODE_DATA_TYPE = 1, NODE_LIST_CODE_NODE_LIST }; static int32_t nodeListNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { const SNodeListNode* pNode = (const SNodeListNode*)pObj; - int32_t code = tlvEncodeObj(pEncoder, NODE_LIST_CODE_DATA_TYPE, dataTypeToMsg, &pNode->dataType); + int32_t code = tlvEncodeObj(pEncoder, NODE_LIST_CODE_DATA_TYPE, dataTypeInlineToMsg, &pNode->dataType); if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeObj(pEncoder, NODE_LIST_CODE_NODE_LIST, nodeListToMsg, pNode->pNodeList); } @@ -999,7 +1198,7 @@ static int32_t msgToNodeListNode(STlvDecoder* pDecoder, void* pObj) { tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { case NODE_LIST_CODE_DATA_TYPE: - code = tlvDecodeObjFromTlv(pTlv, msgToDataType, &pNode->dataType); + code = tlvDecodeObjFromTlv(pTlv, msgToDataTypeInline, &pNode->dataType); break; case NODE_LIST_CODE_NODE_LIST: code = msgToNodeListFromTlv(pTlv, (void**)&pNode->pNodeList); @@ -1012,15 +1211,23 @@ static int32_t msgToNodeListNode(STlvDecoder* pDecoder, void* pObj) { return code; } -enum { TARGET_CODE_DATA_BLOCK_ID = 1, TARGET_CODE_SLOT_ID, TARGET_CODE_EXPR }; +enum { TARGET_CODE_INLINE_ATTRS = 1, TARGET_CODE_EXPR }; + +static int32_t targetNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const STargetNode* pNode = (const STargetNode*)pObj; + + int32_t code = tlvEncodeValueI16(pEncoder, pNode->dataBlockId); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI16(pEncoder, pNode->slotId); + } + + return code; +} static int32_t targetNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { const STargetNode* pNode = (const STargetNode*)pObj; - int32_t code = tlvEncodeI16(pEncoder, TARGET_CODE_DATA_BLOCK_ID, pNode->dataBlockId); - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI16(pEncoder, TARGET_CODE_SLOT_ID, pNode->slotId); - } + int32_t code = tlvEncodeObj(pEncoder, TARGET_CODE_INLINE_ATTRS, targetNodeInlineToMsg, pNode); if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeObj(pEncoder, TARGET_CODE_EXPR, nodeToMsg, pNode->pExpr); } @@ -1028,6 +1235,17 @@ static int32_t targetNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToTargetNodeInline(STlvDecoder* pDecoder, void* pObj) { + STargetNode* pNode = (STargetNode*)pObj; + + int32_t code = tlvDecodeValueI16(pDecoder, &pNode->dataBlockId); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI16(pDecoder, &pNode->slotId); + } + + return code; +} + static int32_t msgToTargetNode(STlvDecoder* pDecoder, void* pObj) { STargetNode* pNode = (STargetNode*)pObj; @@ -1035,11 +1253,8 @@ static int32_t msgToTargetNode(STlvDecoder* pDecoder, void* pObj) { STlv* pTlv = NULL; tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { - case TARGET_CODE_DATA_BLOCK_ID: - code = tlvDecodeI16(pTlv, &pNode->dataBlockId); - break; - case TARGET_CODE_SLOT_ID: - code = tlvDecodeI16(pTlv, &pNode->slotId); + case TARGET_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToTargetNodeInline, pNode); break; case TARGET_CODE_EXPR: code = msgToNodeFromTlv(pTlv, (void**)&pNode->pExpr); @@ -1052,29 +1267,48 @@ static int32_t msgToTargetNode(STlvDecoder* pDecoder, void* pObj) { return code; } -enum { - DATA_BLOCK_DESC_CODE_DATA_BLOCK_ID = 1, - DATA_BLOCK_DESC_CODE_SLOTS, - DATA_BLOCK_DESC_CODE_TOTAL_ROW_SIZE, - DATA_BLOCK_DESC_CODE_OUTPUT_ROW_SIZE, - DATA_BLOCK_DESC_CODE_PRECISION -}; +enum { DATA_BLOCK_DESC_CODE_INLINE_ATTRS = 1, DATA_BLOCK_DESC_CODE_SLOTS }; + +static int32_t dataBlockDescNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SDataBlockDescNode* pNode = (const SDataBlockDescNode*)pObj; + + int32_t code = tlvEncodeValueI16(pEncoder, pNode->dataBlockId); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->totalRowSize); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->outputRowSize); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueU8(pEncoder, pNode->precision); + } + + return code; +} static int32_t dataBlockDescNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { const SDataBlockDescNode* pNode = (const SDataBlockDescNode*)pObj; - int32_t code = tlvEncodeI16(pEncoder, DATA_BLOCK_DESC_CODE_DATA_BLOCK_ID, pNode->dataBlockId); + int32_t code = tlvEncodeObj(pEncoder, DATA_BLOCK_DESC_CODE_INLINE_ATTRS, dataBlockDescNodeInlineToMsg, pNode); if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeObj(pEncoder, DATA_BLOCK_DESC_CODE_SLOTS, nodeListToMsg, pNode->pSlots); } + + return code; +} + +static int32_t msgToDataBlockDescNodeInline(STlvDecoder* pDecoder, void* pObj) { + SDataBlockDescNode* pNode = (SDataBlockDescNode*)pObj; + + int32_t code = tlvDecodeValueI16(pDecoder, &pNode->dataBlockId); if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, DATA_BLOCK_DESC_CODE_TOTAL_ROW_SIZE, pNode->totalRowSize); + code = tlvDecodeValueI32(pDecoder, &pNode->totalRowSize); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, DATA_BLOCK_DESC_CODE_OUTPUT_ROW_SIZE, pNode->outputRowSize); + code = tlvDecodeValueI32(pDecoder, &pNode->outputRowSize); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeU8(pEncoder, DATA_BLOCK_DESC_CODE_PRECISION, pNode->precision); + code = tlvDecodeValueU8(pDecoder, &pNode->precision); } return code; @@ -1087,21 +1321,12 @@ static int32_t msgToDataBlockDescNode(STlvDecoder* pDecoder, void* pObj) { STlv* pTlv = NULL; tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { - case DATA_BLOCK_DESC_CODE_DATA_BLOCK_ID: - code = tlvDecodeI16(pTlv, &pNode->dataBlockId); + case DATA_BLOCK_DESC_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToDataBlockDescNodeInline, pNode); break; case DATA_BLOCK_DESC_CODE_SLOTS: code = msgToNodeListFromTlv(pTlv, (void**)&pNode->pSlots); break; - case DATA_BLOCK_DESC_CODE_TOTAL_ROW_SIZE: - code = tlvDecodeI32(pTlv, &pNode->totalRowSize); - break; - case DATA_BLOCK_DESC_CODE_OUTPUT_ROW_SIZE: - code = tlvDecodeI32(pTlv, &pNode->outputRowSize); - break; - case DATA_BLOCK_DESC_CODE_PRECISION: - code = tlvDecodeU8(pTlv, &pNode->precision); - break; default: break; } @@ -1110,29 +1335,47 @@ static int32_t msgToDataBlockDescNode(STlvDecoder* pDecoder, void* pObj) { return code; } -enum { - SLOT_DESC_CODE_SLOT_ID = 1, - SLOT_DESC_CODE_DATA_TYPE, - SLOT_DESC_CODE_RESERVE, - SLOT_DESC_CODE_OUTPUT, - SLOT_DESC_CODE_TAG -}; +enum { SLOT_DESC_CODE_INLINE_ATTRS = 1 }; -static int32_t slotDescNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { +static int32_t slotDescNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { const SSlotDescNode* pNode = (const SSlotDescNode*)pObj; - int32_t code = tlvEncodeI16(pEncoder, SLOT_DESC_CODE_SLOT_ID, pNode->slotId); + int32_t code = tlvEncodeValueI16(pEncoder, pNode->slotId); if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeObj(pEncoder, SLOT_DESC_CODE_DATA_TYPE, dataTypeToMsg, &pNode->dataType); + code = dataTypeInlineToMsg(&pNode->dataType, pEncoder); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeBool(pEncoder, SLOT_DESC_CODE_RESERVE, pNode->reserve); + code = tlvEncodeValueBool(pEncoder, pNode->reserve); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeBool(pEncoder, SLOT_DESC_CODE_OUTPUT, pNode->output); + code = tlvEncodeValueBool(pEncoder, pNode->output); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeBool(pEncoder, SLOT_DESC_CODE_TAG, pNode->tag); + code = tlvEncodeValueBool(pEncoder, pNode->tag); + } + + return code; +} + +static int32_t slotDescNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { + return tlvEncodeObj(pEncoder, SLOT_DESC_CODE_INLINE_ATTRS, slotDescNodeInlineToMsg, pObj); +} + +static int32_t msgToSlotDescNodeInline(STlvDecoder* pDecoder, void* pObj) { + SSlotDescNode* pNode = (SSlotDescNode*)pObj; + + int32_t code = tlvDecodeValueI16(pDecoder, &pNode->slotId); + if (TSDB_CODE_SUCCESS == code) { + code = msgToDataTypeInline(pDecoder, &pNode->dataType); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueBool(pDecoder, &pNode->reserve); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueBool(pDecoder, &pNode->output); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueBool(pDecoder, &pNode->tag); } return code; @@ -1145,20 +1388,8 @@ static int32_t msgToSlotDescNode(STlvDecoder* pDecoder, void* pObj) { STlv* pTlv = NULL; tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { - case SLOT_DESC_CODE_SLOT_ID: - code = tlvDecodeI16(pTlv, &pNode->slotId); - break; - case SLOT_DESC_CODE_DATA_TYPE: - code = tlvDecodeObjFromTlv(pTlv, msgToDataType, &pNode->dataType); - break; - case SLOT_DESC_CODE_RESERVE: - code = tlvDecodeBool(pTlv, &pNode->reserve); - break; - case SLOT_DESC_CODE_OUTPUT: - code = tlvDecodeBool(pTlv, &pNode->output); - break; - case SLOT_DESC_CODE_TAG: - code = tlvDecodeBool(pTlv, &pNode->tag); + case SLOT_DESC_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToSlotDescNodeInline, pNode); break; default: break; @@ -1170,6 +1401,17 @@ static int32_t msgToSlotDescNode(STlvDecoder* pDecoder, void* pObj) { enum { EP_CODE_FQDN = 1, EP_CODE_port }; +static int32_t epInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SEp* pNode = (const SEp*)pObj; + + int32_t code = tlvEncodeValueCStr(pEncoder, pNode->fqdn); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueU16(pEncoder, pNode->port); + } + + return code; +} + static int32_t epToMsg(const void* pObj, STlvEncoder* pEncoder) { const SEp* pNode = (const SEp*)pObj; @@ -1181,6 +1423,17 @@ static int32_t epToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToEpInline(STlvDecoder* pDecoder, void* pObj) { + SEp* pNode = (SEp*)pObj; + + int32_t code = tlvDecodeValueCStr(pDecoder, pNode->fqdn); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueU16(pDecoder, &pNode->port); + } + + return code; +} + static int32_t msgToEp(STlvDecoder* pDecoder, void* pObj) { SEp* pNode = (SEp*)pObj; @@ -1204,6 +1457,17 @@ static int32_t msgToEp(STlvDecoder* pDecoder, void* pObj) { enum { EP_SET_CODE_IN_USE = 1, EP_SET_CODE_NUM_OF_EPS, EP_SET_CODE_EPS }; +static int32_t epSetInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SEpSet* pNode = (const SEpSet*)pObj; + + int32_t code = tlvEncodeValueI8(pEncoder, pNode->inUse); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueArray(pEncoder, epInlineToMsg, pNode->eps, sizeof(SEp), pNode->numOfEps); + } + + return code; +} + static int32_t epSetToMsg(const void* pObj, STlvEncoder* pEncoder) { const SEpSet* pNode = (const SEpSet*)pObj; @@ -1218,6 +1482,19 @@ static int32_t epSetToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToEpSetInline(STlvDecoder* pDecoder, void* pObj) { + SEpSet* pNode = (SEpSet*)pObj; + + int32_t code = tlvDecodeValueI8(pDecoder, &pNode->inUse); + if (TSDB_CODE_SUCCESS == code) { + int32_t numOfEps = 0; + code = tlvDecodeValueArray(pDecoder, msgToEpInline, pNode->eps, sizeof(SEp), &numOfEps); + pNode->numOfEps = numOfEps; + } + + return code; +} + static int32_t msgToEpSet(STlvDecoder* pDecoder, void* pObj) { SEpSet* pNode = (SEpSet*)pObj; @@ -1244,6 +1521,17 @@ static int32_t msgToEpSet(STlvDecoder* pDecoder, void* pObj) { enum { QUERY_NODE_ADDR_CODE_NODE_ID = 1, QUERY_NODE_ADDR_CODE_EP_SET }; +static int32_t queryNodeAddrInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SQueryNodeAddr* pNode = (const SQueryNodeAddr*)pObj; + + int32_t code = tlvEncodeValueI32(pEncoder, pNode->nodeId); + if (TSDB_CODE_SUCCESS == code) { + code = epSetInlineToMsg(&pNode->epSet, pEncoder); + } + + return code; +} + static int32_t queryNodeAddrToMsg(const void* pObj, STlvEncoder* pEncoder) { const SQueryNodeAddr* pNode = (const SQueryNodeAddr*)pObj; @@ -1255,6 +1543,17 @@ static int32_t queryNodeAddrToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToQueryNodeAddrInline(STlvDecoder* pDecoder, void* pObj) { + SQueryNodeAddr* pNode = (SQueryNodeAddr*)pObj; + + int32_t code = tlvDecodeValueI32(pDecoder, &pNode->nodeId); + if (TSDB_CODE_SUCCESS == code) { + code = msgToEpSetInline(pDecoder, &pNode->epSet); + } + + return code; +} + static int32_t msgToQueryNodeAddr(STlvDecoder* pDecoder, void* pObj) { SQueryNodeAddr* pNode = (SQueryNodeAddr*)pObj; @@ -1274,29 +1573,47 @@ static int32_t msgToQueryNodeAddr(STlvDecoder* pDecoder, void* pObj) { return code; } -enum { - DOWNSTREAM_SOURCE_CODE_ADDR = 1, - DOWNSTREAM_SOURCE_CODE_TASK_ID, - DOWNSTREAM_SOURCE_CODE_SCHED_ID, - DOWNSTREAM_SOURCE_CODE_EXEC_ID, - DOWNSTREAM_SOURCE_CODE_FETCH_MSG_TYPE -}; +enum { DOWNSTREAM_SOURCE_CODE_INLINE_ATTRS = 1 }; -static int32_t downstreamSourceNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { +static int32_t downstreamSourceNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { const SDownstreamSourceNode* pNode = (const SDownstreamSourceNode*)pObj; - int32_t code = tlvEncodeObj(pEncoder, DOWNSTREAM_SOURCE_CODE_ADDR, queryNodeAddrToMsg, &pNode->addr); + int32_t code = queryNodeAddrInlineToMsg(&pNode->addr, pEncoder); if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeU64(pEncoder, DOWNSTREAM_SOURCE_CODE_TASK_ID, pNode->taskId); + code = tlvEncodeValueU64(pEncoder, pNode->taskId); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeU64(pEncoder, DOWNSTREAM_SOURCE_CODE_SCHED_ID, pNode->schedId); + code = tlvEncodeValueU64(pEncoder, pNode->schedId); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, DOWNSTREAM_SOURCE_CODE_EXEC_ID, pNode->execId); + code = tlvEncodeValueI32(pEncoder, pNode->execId); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, DOWNSTREAM_SOURCE_CODE_FETCH_MSG_TYPE, pNode->fetchMsgType); + code = tlvEncodeValueI32(pEncoder, pNode->fetchMsgType); + } + + return code; +} + +static int32_t downstreamSourceNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { + return tlvEncodeObj(pEncoder, DOWNSTREAM_SOURCE_CODE_INLINE_ATTRS, downstreamSourceNodeInlineToMsg, pObj); +} + +static int32_t msgToDownstreamSourceNodeInlineToMsg(STlvDecoder* pDecoder, void* pObj) { + SDownstreamSourceNode* pNode = (SDownstreamSourceNode*)pObj; + + int32_t code = msgToQueryNodeAddrInline(pDecoder, &pNode->addr); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueU64(pDecoder, &pNode->taskId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueU64(pDecoder, &pNode->schedId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->execId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->fetchMsgType); } return code; @@ -1309,20 +1626,8 @@ static int32_t msgToDownstreamSourceNode(STlvDecoder* pDecoder, void* pObj) { STlv* pTlv = NULL; tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { - case DOWNSTREAM_SOURCE_CODE_ADDR: - code = tlvDecodeObjFromTlv(pTlv, msgToQueryNodeAddr, &pNode->addr); - break; - case DOWNSTREAM_SOURCE_CODE_TASK_ID: - code = tlvDecodeU64(pTlv, &pNode->taskId); - break; - case DOWNSTREAM_SOURCE_CODE_SCHED_ID: - code = tlvDecodeU64(pTlv, &pNode->schedId); - break; - case DOWNSTREAM_SOURCE_CODE_EXEC_ID: - code = tlvDecodeI32(pTlv, &pNode->execId); - break; - case DOWNSTREAM_SOURCE_CODE_FETCH_MSG_TYPE: - code = tlvDecodeI32(pTlv, &pNode->fetchMsgType); + case DOWNSTREAM_SOURCE_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToDownstreamSourceNodeInlineToMsg, pNode); break; default: break; @@ -1504,43 +1809,70 @@ static int32_t msgToPhysiLastRowScanNode(STlvDecoder* pDecoder, void* pObj) { enum { PHY_TABLE_SCAN_CODE_SCAN = 1, - PHY_TABLE_SCAN_CODE_SCAN_COUNT, - PHY_TABLE_SCAN_CODE_REVERSE_SCAN_COUNT, - PHY_TABLE_SCAN_CODE_SCAN_RANGE, - PHY_TABLE_SCAN_CODE_RATIO, - PHY_TABLE_SCAN_CODE_DATA_REQUIRED, + PHY_TABLE_SCAN_CODE_INLINE_ATTRS, PHY_TABLE_SCAN_CODE_DYN_SCAN_FUNCS, - PHY_TABLE_SCAN_CODE_GROUP_TAGS, - PHY_TABLE_SCAN_CODE_GROUP_SORT, - PHY_TABLE_SCAN_CODE_INTERVAL, - PHY_TABLE_SCAN_CODE_OFFSET, - PHY_TABLE_SCAN_CODE_SLIDING, - PHY_TABLE_SCAN_CODE_INTERVAL_UNIT, - PHY_TABLE_SCAN_CODE_SLIDING_UNIT, - PHY_TABLE_SCAN_CODE_TRIGGER_TYPE, - PHY_TABLE_SCAN_CODE_WATERMARK, - PHY_TABLE_SCAN_CODE_IG_EXPIRED, - PHY_TABLE_SCAN_CODE_ASSIGN_BLOCK_UID, + PHY_TABLE_SCAN_CODE_GROUP_TAGS }; +static int32_t physiTableScanNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const STableScanPhysiNode* pNode = (const STableScanPhysiNode*)pObj; + + int32_t code = tlvEncodeValueU8(pEncoder, pNode->scanSeq[0]); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueU8(pEncoder, pNode->scanSeq[1]); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI64(pEncoder, pNode->scanRange.skey); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI64(pEncoder, pNode->scanRange.ekey); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueDouble(pEncoder, pNode->ratio); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->dataRequired); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueBool(pEncoder, pNode->groupSort); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI64(pEncoder, pNode->interval); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI64(pEncoder, pNode->offset); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI64(pEncoder, pNode->sliding); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI8(pEncoder, pNode->intervalUnit); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI8(pEncoder, pNode->slidingUnit); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI8(pEncoder, pNode->triggerType); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI64(pEncoder, pNode->watermark); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI8(pEncoder, pNode->igExpired); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueBool(pEncoder, pNode->assignBlockUid); + } + + return code; +} + static int32_t physiTableScanNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { const STableScanPhysiNode* pNode = (const STableScanPhysiNode*)pObj; int32_t code = tlvEncodeObj(pEncoder, PHY_TABLE_SCAN_CODE_SCAN, physiScanNodeToMsg, &pNode->scan); if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeU8(pEncoder, PHY_TABLE_SCAN_CODE_SCAN_COUNT, pNode->scanSeq[0]); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeU8(pEncoder, PHY_TABLE_SCAN_CODE_REVERSE_SCAN_COUNT, pNode->scanSeq[1]); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeObj(pEncoder, PHY_TABLE_SCAN_CODE_SCAN_RANGE, timeWindowToMsg, &pNode->scanRange); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeDouble(pEncoder, PHY_TABLE_SCAN_CODE_RATIO, pNode->ratio); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, PHY_TABLE_SCAN_CODE_DATA_REQUIRED, pNode->dataRequired); + code = tlvEncodeObj(pEncoder, PHY_TABLE_SCAN_CODE_INLINE_ATTRS, physiTableScanNodeInlineToMsg, pNode); } if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeObj(pEncoder, PHY_TABLE_SCAN_CODE_DYN_SCAN_FUNCS, nodeListToMsg, pNode->pDynamicScanFuncs); @@ -1548,35 +1880,58 @@ static int32_t physiTableScanNodeToMsg(const void* pObj, STlvEncoder* pEncoder) if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeObj(pEncoder, PHY_TABLE_SCAN_CODE_GROUP_TAGS, nodeListToMsg, pNode->pGroupTags); } + + return code; +} + +static int32_t msgToPhysiTableScanNodeInline(STlvDecoder* pDecoder, void* pObj) { + STableScanPhysiNode* pNode = (STableScanPhysiNode*)pObj; + + int32_t code = tlvDecodeValueU8(pDecoder, pNode->scanSeq); if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeBool(pEncoder, PHY_TABLE_SCAN_CODE_GROUP_SORT, pNode->groupSort); + code = tlvDecodeValueU8(pDecoder, pNode->scanSeq + 1); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI64(pEncoder, PHY_TABLE_SCAN_CODE_INTERVAL, pNode->interval); + code = tlvDecodeValueI64(pDecoder, &pNode->scanRange.skey); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI64(pEncoder, PHY_TABLE_SCAN_CODE_OFFSET, pNode->offset); + code = tlvDecodeValueI64(pDecoder, &pNode->scanRange.ekey); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI64(pEncoder, PHY_TABLE_SCAN_CODE_SLIDING, pNode->sliding); + code = tlvDecodeValueDouble(pDecoder, &pNode->ratio); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI8(pEncoder, PHY_TABLE_SCAN_CODE_INTERVAL_UNIT, pNode->intervalUnit); + code = tlvDecodeValueI32(pDecoder, &pNode->dataRequired); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI8(pEncoder, PHY_TABLE_SCAN_CODE_SLIDING_UNIT, pNode->slidingUnit); + code = tlvDecodeValueBool(pDecoder, &pNode->groupSort); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI8(pEncoder, PHY_TABLE_SCAN_CODE_TRIGGER_TYPE, pNode->triggerType); + code = tlvDecodeValueI64(pDecoder, &pNode->interval); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI64(pEncoder, PHY_TABLE_SCAN_CODE_WATERMARK, pNode->watermark); + code = tlvDecodeValueI64(pDecoder, &pNode->offset); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI8(pEncoder, PHY_TABLE_SCAN_CODE_IG_EXPIRED, pNode->igExpired); + code = tlvDecodeValueI64(pDecoder, &pNode->sliding); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeBool(pEncoder, PHY_TABLE_SCAN_CODE_ASSIGN_BLOCK_UID, pNode->assignBlockUid); + code = tlvDecodeValueI8(pDecoder, &pNode->intervalUnit); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI8(pDecoder, &pNode->slidingUnit); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI8(pDecoder, &pNode->triggerType); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI64(pDecoder, &pNode->watermark); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI8(pDecoder, &pNode->igExpired); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueBool(pDecoder, &pNode->assignBlockUid); } return code; @@ -1592,20 +1947,8 @@ static int32_t msgToPhysiTableScanNode(STlvDecoder* pDecoder, void* pObj) { case PHY_TABLE_SCAN_CODE_SCAN: code = tlvDecodeObjFromTlv(pTlv, msgToPhysiScanNode, &pNode->scan); break; - case PHY_TABLE_SCAN_CODE_SCAN_COUNT: - code = tlvDecodeU8(pTlv, pNode->scanSeq); - break; - case PHY_TABLE_SCAN_CODE_REVERSE_SCAN_COUNT: - code = tlvDecodeU8(pTlv, pNode->scanSeq + 1); - break; - case PHY_TABLE_SCAN_CODE_SCAN_RANGE: - code = tlvDecodeObjFromTlv(pTlv, msgToTimeWindow, &pNode->scanRange); - break; - case PHY_TABLE_SCAN_CODE_RATIO: - code = tlvDecodeDouble(pTlv, &pNode->ratio); - break; - case PHY_TABLE_SCAN_CODE_DATA_REQUIRED: - code = tlvDecodeI32(pTlv, &pNode->dataRequired); + case PHY_TABLE_SCAN_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToPhysiTableScanNodeInline, pNode); break; case PHY_TABLE_SCAN_CODE_DYN_SCAN_FUNCS: code = msgToNodeListFromTlv(pTlv, (void**)&pNode->pDynamicScanFuncs); @@ -1613,36 +1956,6 @@ static int32_t msgToPhysiTableScanNode(STlvDecoder* pDecoder, void* pObj) { case PHY_TABLE_SCAN_CODE_GROUP_TAGS: code = msgToNodeListFromTlv(pTlv, (void**)&pNode->pGroupTags); break; - case PHY_TABLE_SCAN_CODE_GROUP_SORT: - code = tlvDecodeBool(pTlv, &pNode->groupSort); - break; - case PHY_TABLE_SCAN_CODE_INTERVAL: - code = tlvDecodeI64(pTlv, &pNode->interval); - break; - case PHY_TABLE_SCAN_CODE_OFFSET: - code = tlvDecodeI64(pTlv, &pNode->offset); - break; - case PHY_TABLE_SCAN_CODE_SLIDING: - code = tlvDecodeI64(pTlv, &pNode->sliding); - break; - case PHY_TABLE_SCAN_CODE_INTERVAL_UNIT: - code = tlvDecodeI8(pTlv, &pNode->intervalUnit); - break; - case PHY_TABLE_SCAN_CODE_SLIDING_UNIT: - code = tlvDecodeI8(pTlv, &pNode->slidingUnit); - break; - case PHY_TABLE_SCAN_CODE_TRIGGER_TYPE: - code = tlvDecodeI8(pTlv, &pNode->triggerType); - break; - case PHY_TABLE_SCAN_CODE_WATERMARK: - code = tlvDecodeI64(pTlv, &pNode->watermark); - break; - case PHY_TABLE_SCAN_CODE_IG_EXPIRED: - code = tlvDecodeI8(pTlv, &pNode->igExpired); - break; - case PHY_TABLE_SCAN_CODE_ASSIGN_BLOCK_UID: - code = tlvDecodeBool(pTlv, &pNode->assignBlockUid); - break; default: break; } @@ -2732,6 +3045,20 @@ static int32_t msgToPhysiDeleteNode(STlvDecoder* pDecoder, void* pObj) { enum { SUBPLAN_ID_CODE_QUERY_ID = 1, SUBPLAN_ID_CODE_GROUP_ID, SUBPLAN_ID_CODE_SUBPLAN_ID }; +static int32_t subplanIdInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SSubplanId* pNode = (const SSubplanId*)pObj; + + int32_t code = tlvEncodeValueU64(pEncoder, pNode->queryId); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->groupId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->subplanId); + } + + return code; +} + static int32_t subplanIdToMsg(const void* pObj, STlvEncoder* pEncoder) { const SSubplanId* pNode = (const SSubplanId*)pObj; @@ -2746,6 +3073,20 @@ static int32_t subplanIdToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToSubplanIdInline(STlvDecoder* pDecoder, void* pObj) { + SSubplanId* pNode = (SSubplanId*)pObj; + + int32_t code = tlvDecodeValueU64(pDecoder, &pNode->queryId); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->groupId); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->subplanId); + } + + return code; +} + static int32_t msgToSubplanId(STlvDecoder* pDecoder, void* pObj) { SSubplanId* pNode = (SSubplanId*)pObj; @@ -2771,41 +3112,43 @@ static int32_t msgToSubplanId(STlvDecoder* pDecoder, void* pObj) { } enum { - SUBPLAN_CODE_SUBPLAN_ID = 1, - SUBPLAN_CODE_SUBPLAN_TYPE, - SUBPLAN_CODE_MSG_TYPE, - SUBPLAN_CODE_LEVEL, - SUBPLAN_CODE_DBFNAME, - SUBPLAN_CODE_USER, - SUBPLAN_CODE_EXECNODE, + SUBPLAN_CODE_INLINE_ATTRS = 1, SUBPLAN_CODE_ROOT_NODE, SUBPLAN_CODE_DATA_SINK, SUBPLAN_CODE_TAG_COND, SUBPLAN_CODE_TAG_INDEX_COND }; +static int32_t subplanInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SSubplan* pNode = (const SSubplan*)pObj; + + int32_t code = subplanIdInlineToMsg(&pNode->id, pEncoder); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueEnum(pEncoder, pNode->subplanType); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->msgType); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->level); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueCStr(pEncoder, pNode->dbFName); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueCStr(pEncoder, pNode->user); + } + if (TSDB_CODE_SUCCESS == code) { + code = queryNodeAddrInlineToMsg(&pNode->execNode, pEncoder); + } + + return code; +} + static int32_t subplanToMsg(const void* pObj, STlvEncoder* pEncoder) { const SSubplan* pNode = (const SSubplan*)pObj; - int32_t code = tlvEncodeObj(pEncoder, SUBPLAN_CODE_SUBPLAN_ID, subplanIdToMsg, &pNode->id); - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeEnum(pEncoder, SUBPLAN_CODE_SUBPLAN_TYPE, pNode->subplanType); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, SUBPLAN_CODE_MSG_TYPE, pNode->msgType); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, SUBPLAN_CODE_LEVEL, pNode->level); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeCStr(pEncoder, SUBPLAN_CODE_DBFNAME, pNode->dbFName); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeCStr(pEncoder, SUBPLAN_CODE_USER, pNode->user); - } - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeObj(pEncoder, SUBPLAN_CODE_EXECNODE, queryNodeAddrToMsg, &pNode->execNode); - } + int32_t code = tlvEncodeObj(pEncoder, SUBPLAN_CODE_INLINE_ATTRS, subplanInlineToMsg, pNode); if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeObj(pEncoder, SUBPLAN_CODE_ROOT_NODE, nodeToMsg, pNode->pNode); } @@ -2822,6 +3165,32 @@ static int32_t subplanToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToSubplanInline(STlvDecoder* pDecoder, void* pObj) { + SSubplan* pNode = (SSubplan*)pObj; + + int32_t code = msgToSubplanIdInline(pDecoder, &pNode->id); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueEnum(pDecoder, &pNode->subplanType, sizeof(pNode->subplanType)); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->msgType); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->level); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueCStr(pDecoder, pNode->dbFName); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueCStr(pDecoder, pNode->user); + } + if (TSDB_CODE_SUCCESS == code) { + code = msgToQueryNodeAddrInline(pDecoder, &pNode->execNode); + } + + return code; +} + static int32_t msgToSubplan(STlvDecoder* pDecoder, void* pObj) { SSubplan* pNode = (SSubplan*)pObj; @@ -2829,26 +3198,8 @@ static int32_t msgToSubplan(STlvDecoder* pDecoder, void* pObj) { STlv* pTlv = NULL; tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { - case SUBPLAN_CODE_SUBPLAN_ID: - code = tlvDecodeObjFromTlv(pTlv, msgToSubplanId, &pNode->id); - break; - case SUBPLAN_CODE_SUBPLAN_TYPE: - code = tlvDecodeEnum(pTlv, &pNode->subplanType, sizeof(pNode->subplanType)); - break; - case SUBPLAN_CODE_MSG_TYPE: - code = tlvDecodeI32(pTlv, &pNode->msgType); - break; - case SUBPLAN_CODE_LEVEL: - code = tlvDecodeI32(pTlv, &pNode->level); - break; - case SUBPLAN_CODE_DBFNAME: - code = tlvDecodeCStr(pTlv, pNode->dbFName); - break; - case SUBPLAN_CODE_USER: - code = tlvDecodeCStr(pTlv, pNode->user); - break; - case SUBPLAN_CODE_EXECNODE: - code = tlvDecodeObjFromTlv(pTlv, msgToQueryNodeAddr, &pNode->execNode); + case SUBPLAN_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToSubplanInline, pNode); break; case SUBPLAN_CODE_ROOT_NODE: code = msgToNodeFromTlv(pTlv, (void**)&pNode->pNode); @@ -2870,15 +3221,23 @@ static int32_t msgToSubplan(STlvDecoder* pDecoder, void* pObj) { return code; } -enum { QUERY_PLAN_CODE_QUERY_ID = 1, QUERY_PLAN_CODE_NUM_OF_SUBPLANS, QUERY_PLAN_CODE_SUBPLANS }; +enum { QUERY_PLAN_CODE_INLINE_ATTRS = 1, QUERY_PLAN_CODE_SUBPLANS }; + +static int32_t queryPlanInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { + const SQueryPlan* pNode = (const SQueryPlan*)pObj; + + int32_t code = tlvEncodeValueU64(pEncoder, pNode->queryId); + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueI32(pEncoder, pNode->numOfSubplans); + } + + return code; +} static int32_t queryPlanToMsg(const void* pObj, STlvEncoder* pEncoder) { const SQueryPlan* pNode = (const SQueryPlan*)pObj; - int32_t code = tlvEncodeU64(pEncoder, QUERY_PLAN_CODE_QUERY_ID, pNode->queryId); - if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeI32(pEncoder, QUERY_PLAN_CODE_NUM_OF_SUBPLANS, pNode->numOfSubplans); - } + int32_t code = tlvEncodeObj(pEncoder, QUERY_PLAN_CODE_INLINE_ATTRS, queryPlanInlineToMsg, pNode); if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeObj(pEncoder, QUERY_PLAN_CODE_SUBPLANS, nodeListToMsg, pNode->pSubplans); } @@ -2886,6 +3245,17 @@ static int32_t queryPlanToMsg(const void* pObj, STlvEncoder* pEncoder) { return code; } +static int32_t msgToQueryPlanInline(STlvDecoder* pDecoder, void* pObj) { + SQueryPlan* pNode = (SQueryPlan*)pObj; + + int32_t code = tlvDecodeValueU64(pDecoder, &pNode->queryId); + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueI32(pDecoder, &pNode->numOfSubplans); + } + + return code; +} + static int32_t msgToQueryPlan(STlvDecoder* pDecoder, void* pObj) { SQueryPlan* pNode = (SQueryPlan*)pObj; @@ -2893,11 +3263,8 @@ static int32_t msgToQueryPlan(STlvDecoder* pDecoder, void* pObj) { STlv* pTlv = NULL; tlvForEach(pDecoder, pTlv, code) { switch (pTlv->type) { - case QUERY_PLAN_CODE_QUERY_ID: - code = tlvDecodeU64(pTlv, &pNode->queryId); - break; - case QUERY_PLAN_CODE_NUM_OF_SUBPLANS: - code = tlvDecodeI32(pTlv, &pNode->numOfSubplans); + case QUERY_PLAN_CODE_INLINE_ATTRS: + code = tlvDecodeObjFromTlv(pTlv, msgToQueryPlanInline, pNode); break; case QUERY_PLAN_CODE_SUBPLANS: code = msgToNodeListFromTlv(pTlv, (void**)&pNode->pSubplans); @@ -2911,6 +3278,7 @@ static int32_t msgToQueryPlan(STlvDecoder* pDecoder, void* pObj) { } static int32_t specificNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { + // nodesWarn("specificNodeToMsg node = %s, before tlv count = %d", nodesNodeName(nodeType(pObj)), pEncoder->tlvCount); int32_t code = TSDB_CODE_SUCCESS; switch (nodeType(pObj)) { case QUERY_NODE_COLUMN: @@ -3030,12 +3398,12 @@ static int32_t specificNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { code = queryPlanToMsg(pObj, pEncoder); break; default: - nodesWarn("specificNodeToMsg unknown node = %s", nodesNodeName(nodeType(pObj))); break; } if (TSDB_CODE_SUCCESS != code) { nodesError("specificNodeToMsg error node = %s", nodesNodeName(nodeType(pObj))); } + // nodesWarn("specificNodeToMsg node = %s, after tlv count = %d", nodesNodeName(nodeType(pObj)), pEncoder->tlvCount); return code; } @@ -3159,7 +3527,6 @@ static int32_t msgToSpecificNode(STlvDecoder* pDecoder, void* pObj) { code = msgToQueryPlan(pDecoder, pObj); break; default: - nodesWarn("msgToSpecificNode unknown node = %s", nodesNodeName(nodeType(pObj))); break; } if (TSDB_CODE_SUCCESS != code) { From 2992f50175045e0a1267f9533e008ec2d89d6d54 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 16 Sep 2022 10:10:24 +0800 Subject: [PATCH 05/21] enh: plan serialization optimize --- source/libs/nodes/src/nodesMsgFuncs.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/libs/nodes/src/nodesMsgFuncs.c b/source/libs/nodes/src/nodesMsgFuncs.c index 3d6bd4e0ac..8cc1ffe3aa 100644 --- a/source/libs/nodes/src/nodesMsgFuncs.c +++ b/source/libs/nodes/src/nodesMsgFuncs.c @@ -23,11 +23,15 @@ #define tlvForEach(pDecoder, pTlv, code) \ while (TSDB_CODE_SUCCESS == code && TSDB_CODE_SUCCESS == (code = tlvGetNextTlv(pDecoder, &pTlv)) && NULL != pTlv) +#pragma pack(push, 1) + typedef struct STlv { int16_t type; int32_t len; char value[0]; -} __attribute__((packed, aligned(1))) STlv; +} STlv; + +#pragma pack(pop) typedef struct STlvEncoder { int32_t allocSize; From c69746e85e72896251a6aaa033faa676bfe5f075 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 16 Sep 2022 10:13:34 +0800 Subject: [PATCH 06/21] fix: add debug info --- source/libs/qworker/src/qwUtil.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/libs/qworker/src/qwUtil.c b/source/libs/qworker/src/qwUtil.c index c7bf7ab7e7..34f638b774 100644 --- a/source/libs/qworker/src/qwUtil.c +++ b/source/libs/qworker/src/qwUtil.c @@ -275,6 +275,7 @@ void qwFreeTaskHandle(qTaskInfo_t *taskHandle) { qTaskInfo_t otaskHandle = atomic_load_ptr(taskHandle); if (otaskHandle && atomic_val_compare_exchange_ptr(taskHandle, otaskHandle, NULL)) { qDestroyTask(otaskHandle); + qDebug("task handle destryed"); } } @@ -305,6 +306,7 @@ void qwFreeTaskCtx(SQWTaskCtx *ctx) { if (ctx->sinkHandle) { dsDestroyDataSinker(ctx->sinkHandle); ctx->sinkHandle = NULL; + qDebug("sink handle destryed"); } } @@ -453,6 +455,8 @@ void qwDestroySchStatus(SQWSchStatus *pStatus) { taosHashCleanup(pStatus->tasksH void qwDestroyImpl(void *pMgmt) { SQWorker *mgmt = (SQWorker *)pMgmt; + qDebug("start to destroy qworker, type:%d, id:%d, handle:%p", mgmt->nodeType, mgmt->nodeId, mgmt); + taosTmrStop(mgmt->hbTimer); mgmt->hbTimer = NULL; taosTmrCleanUp(mgmt->timer); @@ -484,6 +488,8 @@ void qwDestroyImpl(void *pMgmt) { atomic_sub_fetch_32(&gQwMgmt.qwNum, 1); qwCloseRef(); + + qDebug("qworker destroyed, type:%d, id:%d, handle:%p", mgmt->nodeType, mgmt->nodeId, mgmt); } int32_t qwOpenRef(void) { From c57e6220d57f59eaf16a2602fa70b8b548ae59ea Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Thu, 15 Sep 2022 19:14:50 +0800 Subject: [PATCH 07/21] docs: add schemaless api --- docs/zh/08-connector/02-rest-api.mdx | 4 +- docs/zh/08-connector/05-schemaless-api.mdx | 38 +++++++++++++++++++ .../08-connector/{03-cpp.mdx => 10-cpp.mdx} | 0 .../08-connector/{04-java.mdx => 14-java.mdx} | 0 docs/zh/08-connector/{05-go.mdx => 20-go.mdx} | 0 .../08-connector/{06-rust.mdx => 26-rust.mdx} | 0 .../{07-python.mdx => 30-python.mdx} | 0 .../08-connector/{08-node.mdx => 35-node.mdx} | 0 .../{09-csharp.mdx => 40-csharp.mdx} | 0 .../08-connector/{10-php.mdx => 45-php.mdx} | 0 docs/zh/14-reference/04-taosadapter.md | 2 +- 11 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 docs/zh/08-connector/05-schemaless-api.mdx rename docs/zh/08-connector/{03-cpp.mdx => 10-cpp.mdx} (100%) rename docs/zh/08-connector/{04-java.mdx => 14-java.mdx} (100%) rename docs/zh/08-connector/{05-go.mdx => 20-go.mdx} (100%) rename docs/zh/08-connector/{06-rust.mdx => 26-rust.mdx} (100%) rename docs/zh/08-connector/{07-python.mdx => 30-python.mdx} (100%) rename docs/zh/08-connector/{08-node.mdx => 35-node.mdx} (100%) rename docs/zh/08-connector/{09-csharp.mdx => 40-csharp.mdx} (100%) rename docs/zh/08-connector/{10-php.mdx => 45-php.mdx} (100%) diff --git a/docs/zh/08-connector/02-rest-api.mdx b/docs/zh/08-connector/02-rest-api.mdx index e254244657..12a9cf5347 100644 --- a/docs/zh/08-connector/02-rest-api.mdx +++ b/docs/zh/08-connector/02-rest-api.mdx @@ -4,7 +4,7 @@ sidebar_label: REST API description: 详细介绍 TDengine 提供的 RESTful API. --- -为支持各种不同类型平台的开发,TDengine 提供符合 REST 设计标准的 API,即 REST API。为最大程度降低学习成本,不同于其他数据库 REST API 的设计方法,TDengine 直接通过 HTTP POST 请求 BODY 中包含的 SQL 语句来操作数据库,仅需要一个 URL。REST 连接器的使用参见 [视频教程](https://www.taosdata.com/blog/2020/11/11/1965.html)。 +为支持各种不同类型平台的开发,TDengine 提供符合 RESTful 设计标准的 API,即 REST API。为最大程度降低学习成本,不同于其他数据库 REST API 的设计方法,TDengine 直接通过 HTTP POST 请求 BODY 中包含的 SQL 语句来操作数据库,仅需要一个 URL。REST API 的使用参见 [视频教程](https://www.taosdata.com/blog/2020/11/11/1965.html)。 :::note 与原生连接器的一个区别是,RESTful 接口是无状态的,因此 `USE db_name` 指令没有效果,所有对表名、超级表名的引用都需要指定数据库名前缀。支持在 RESTful URL 中指定 db_name,这时如果 SQL 语句中没有指定数据库名前缀的话,会使用 URL 中指定的这个 db_name。 @@ -18,7 +18,7 @@ RESTful 接口不依赖于任何 TDengine 的库,因此客户端不需要安 在已经安装 TDengine 服务器端的情况下,可以按照如下方式进行验证。 -下面以 Ubuntu 环境中使用 curl 工具(确认已经安装)来验证 RESTful 接口的正常,验证前请确认 taosAdapter 服务已开启,在 Linux 系统上此服务默认由 systemd 管理,使用命令 `systemctl start taosadapter` 启动。 +下面以 Ubuntu 环境中使用 `curl` 工具(请确认已经安装)来验证 RESTful 接口是否工作正常,验证前请确认 taosAdapter 服务已开启,在 Linux 系统上此服务默认由 systemd 管理,使用命令 `systemctl start taosadapter` 启动。 下面示例是列出所有的数据库,请把 h1.taosdata.com 和 6041(缺省值)替换为实际运行的 TDengine 服务 FQDN 和端口号: diff --git a/docs/zh/08-connector/05-schemaless-api.mdx b/docs/zh/08-connector/05-schemaless-api.mdx new file mode 100644 index 0000000000..f6d7e09212 --- /dev/null +++ b/docs/zh/08-connector/05-schemaless-api.mdx @@ -0,0 +1,38 @@ +--- +title: Schemaless API +sidebar_label: Schemaless API +description: 详细介绍 TDengine 提供的 Schemaless API. +--- + +TDengine 提供了兼容 InfluxDB (v1) 和 OpenTSDB 行协议的 Schemaless API。支持 InfluxDB(v1) 或 OpenTSDB 行协议写入数据的第三方软件无需修改代码,只要修改配置的 EndPoint URL 就可以直接把数据写入 TDengine 数据库。 + +### 兼容 InfluxDB 行协议写入的方法 + +您可以配置任何支持使用 InfluxDB(v1) 行协议的应用访问地址 `http://:6041/` 来写入 InfluxDB 兼容格式的数据到 TDengine。EndPoint 如下: +```text +/influxdb/v1/write??... +``` + +支持 InfluxDB 查询参数如下: + +- `db` 指定 TDengine 使用的数据库名 +- `precision` TDengine 使用的时间精度 +- `u` TDengine 用户名 +- `p` TDengine 密码 + +注意: 目前不支持 InfluxDB 的 token 验证方式,仅支持 Basic 验证和查询参数验证。 + +参考链接:[InfluxDB v1 写接口](https://docs.influxdata.com/influxdb/v2.0/reference/api/influxdb-1x/write/) + +### 兼容 OpenTSDB 行协议写入的方法 + +您可以配置任何支持 OpenTSDB 行协议的应用访问地址 `http://:6041/` 来写入 OpenTSDB 兼容格式的数据到 TDengine。EndPoint 如下: + +```text +/opentsdb/v1/put/json/ +/opentsdb/v1/put/telnet/ +``` + +参考链接: + - [OpenTSDB JSON](http://opentsdb.net/docs/build/html/api_http/put.html) + - [OpenTSDB Telnet](http://opentsdb.net/docs/build/html/api_telnet/put.html) diff --git a/docs/zh/08-connector/03-cpp.mdx b/docs/zh/08-connector/10-cpp.mdx similarity index 100% rename from docs/zh/08-connector/03-cpp.mdx rename to docs/zh/08-connector/10-cpp.mdx diff --git a/docs/zh/08-connector/04-java.mdx b/docs/zh/08-connector/14-java.mdx similarity index 100% rename from docs/zh/08-connector/04-java.mdx rename to docs/zh/08-connector/14-java.mdx diff --git a/docs/zh/08-connector/05-go.mdx b/docs/zh/08-connector/20-go.mdx similarity index 100% rename from docs/zh/08-connector/05-go.mdx rename to docs/zh/08-connector/20-go.mdx diff --git a/docs/zh/08-connector/06-rust.mdx b/docs/zh/08-connector/26-rust.mdx similarity index 100% rename from docs/zh/08-connector/06-rust.mdx rename to docs/zh/08-connector/26-rust.mdx diff --git a/docs/zh/08-connector/07-python.mdx b/docs/zh/08-connector/30-python.mdx similarity index 100% rename from docs/zh/08-connector/07-python.mdx rename to docs/zh/08-connector/30-python.mdx diff --git a/docs/zh/08-connector/08-node.mdx b/docs/zh/08-connector/35-node.mdx similarity index 100% rename from docs/zh/08-connector/08-node.mdx rename to docs/zh/08-connector/35-node.mdx diff --git a/docs/zh/08-connector/09-csharp.mdx b/docs/zh/08-connector/40-csharp.mdx similarity index 100% rename from docs/zh/08-connector/09-csharp.mdx rename to docs/zh/08-connector/40-csharp.mdx diff --git a/docs/zh/08-connector/10-php.mdx b/docs/zh/08-connector/45-php.mdx similarity index 100% rename from docs/zh/08-connector/10-php.mdx rename to docs/zh/08-connector/45-php.mdx diff --git a/docs/zh/14-reference/04-taosadapter.md b/docs/zh/14-reference/04-taosadapter.md index 71bf5f4223..82efcab06f 100644 --- a/docs/zh/14-reference/04-taosadapter.md +++ b/docs/zh/14-reference/04-taosadapter.md @@ -196,7 +196,7 @@ AllowWebSockets - `u` TDengine 用户名 - `p` TDengine 密码 -注意: 目前不支持 InfluxDB 的 token 验证方式只支持 Basic 验证和查询参数验证。 +注意: 目前不支持 InfluxDB 的 token 验证方式,仅支持 Basic 验证和查询参数验证。 ### OpenTSDB From 42c54402b4d3b8d8f993c1a9597a57c294f9d4d2 Mon Sep 17 00:00:00 2001 From: afwerar <1296468573@qq.com> Date: Fri, 16 Sep 2022 11:49:01 +0800 Subject: [PATCH 08/21] os: special file name error --- source/os/src/osDir.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/source/os/src/osDir.c b/source/os/src/osDir.c index 3dfb1458ad..cc0e812df5 100644 --- a/source/os/src/osDir.c +++ b/source/os/src/osDir.c @@ -265,9 +265,21 @@ void taosRemoveOldFiles(const char *dirname, int32_t keepDays) { int32_t taosExpandDir(const char *dirname, char *outname, int32_t maxlen) { wordexp_t full_path; - if (0 != wordexp(dirname, &full_path, 0)) { - printf("failed to expand path:%s since %s", dirname, strerror(errno)); - wordfree(&full_path); + switch (wordexp (dirname, &full_path, 0)) { + case 0: + break; + case WRDE_NOSPACE: + wordfree (&full_path); + // printf("failed to expand path:%s since Out of memory\n", dirname); + return -1; + case WRDE_BADCHAR: + // printf("failed to expand path:%s since illegal occurrence of newline or one of |, &, ;, <, >, (, ), {, }\n", dirname); + return -1; + case WRDE_SYNTAX: + // printf("failed to expand path:%s since Shell syntax error, such as unbalanced parentheses or unmatched quotes\n", dirname); + return -1; + default: + // printf("failed to expand path:%s since %s\n", dirname, strerror(errno)); return -1; } From d66c49581e2052302cfd883dc3b44b0a950e6ec9 Mon Sep 17 00:00:00 2001 From: afwerar <1296468573@qq.com> Date: Fri, 16 Sep 2022 14:43:01 +0800 Subject: [PATCH 09/21] os: special file name error --- source/os/src/osDir.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/os/src/osDir.c b/source/os/src/osDir.c index cc0e812df5..418e86a40a 100644 --- a/source/os/src/osDir.c +++ b/source/os/src/osDir.c @@ -31,6 +31,15 @@ typedef struct TdDir { HANDLE hFind; } TdDir; +enum + { + WRDE_NOSPACE = 1, /* Ran out of memory. */ + WRDE_BADCHAR, /* A metachar appears in the wrong place. */ + WRDE_BADVAL, /* Undefined var reference with WRDE_UNDEF. */ + WRDE_CMDSUB, /* Command substitution with WRDE_NOCMD. */ + WRDE_SYNTAX /* Shell syntax error. */ + }; + int wordexp(char *words, wordexp_t *pwordexp, int flags) { pwordexp->we_offs = 0; pwordexp->we_wordc = 1; From 4ff42ad98007c05416df79b37646fb541d42ea73 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 16 Sep 2022 15:53:27 +0800 Subject: [PATCH 10/21] fix: parsing conflicts --- source/libs/parser/inc/sql.y | 42 +- source/libs/parser/src/sql.c | 2561 +++++++++++++++++----------------- 2 files changed, 1282 insertions(+), 1321 deletions(-) diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index bef2ed98ec..12224e2146 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -452,7 +452,7 @@ sma_stream_opt(A) ::= stream_options(B) WATERMARK duration_literal(C). sma_stream_opt(A) ::= stream_options(B) MAX_DELAY duration_literal(C). { ((SStreamOptions*)B)->pDelay = releaseRawExprNode(pCxt, C); A = B; } /************************************************ create/drop topic ***************************************************/ -cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) AS query_expression(C). { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C); } +cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) AS query_or_subquery(C). { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C); } cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) AS DATABASE db_name(C). { pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, A, &B, &C, false); } cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) WITH META AS DATABASE db_name(C). { pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, A, &B, &C, true); } @@ -471,7 +471,7 @@ cmd ::= DESCRIBE full_table_name(A). cmd ::= RESET QUERY CACHE. { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); } /************************************************ explain *************************************************************/ -cmd ::= EXPLAIN analyze_opt(A) explain_options(B) query_expression(C). { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); } +cmd ::= EXPLAIN analyze_opt(A) explain_options(B) query_or_subquery(C). { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); } %type analyze_opt { bool } %destructor analyze_opt { } @@ -502,7 +502,7 @@ bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B). /************************************************ create/drop stream **************************************************/ cmd ::= CREATE STREAM not_exists_opt(E) stream_name(A) - stream_options(B) INTO full_table_name(C) AS query_expression(D). { pCxt->pRootNode = createCreateStreamStmt(pCxt, E, &A, C, B, D); } + stream_options(B) INTO full_table_name(C) AS query_or_subquery(D). { pCxt->pRootNode = createCreateStreamStmt(pCxt, E, &A, C, B, D); } cmd ::= DROP STREAM exists_opt(A) stream_name(B). { pCxt->pRootNode = createDropStreamStmt(pCxt, A, &B); } stream_options(A) ::= . { A = createStreamOptions(pCxt); } @@ -535,12 +535,12 @@ dnode_list(A) ::= dnode_list(B) DNODE NK_INTEGER(C). cmd ::= DELETE FROM full_table_name(A) where_clause_opt(B). { pCxt->pRootNode = createDeleteStmt(pCxt, A, B); } /************************************************ select **************************************************************/ -cmd ::= query_expression(A). { pCxt->pRootNode = A; } +cmd ::= query_or_subquery(A). { pCxt->pRootNode = A; } /************************************************ insert **************************************************************/ cmd ::= INSERT INTO full_table_name(A) - NK_LP col_name_list(B) NK_RP query_expression(C). { pCxt->pRootNode = createInsertStmt(pCxt, A, B, C); } -cmd ::= INSERT INTO full_table_name(A) query_expression(B). { pCxt->pRootNode = createInsertStmt(pCxt, A, NULL, B); } + NK_LP col_name_list(B) NK_RP query_or_subquery(C). { pCxt->pRootNode = createInsertStmt(pCxt, A, B, C); } +cmd ::= INSERT INTO full_table_name(A) query_or_subquery(B). { pCxt->pRootNode = createInsertStmt(pCxt, A, NULL, B); } /************************************************ literal *************************************************************/ literal(A) ::= NK_INTEGER(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B)); } @@ -936,28 +936,26 @@ every_opt(A) ::= . every_opt(A) ::= EVERY NK_LP duration_literal(B) NK_RP. { A = releaseRawExprNode(pCxt, B); } /************************************************ query_expression ****************************************************/ -query_expression(A) ::= - query_expression_body(B) - order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E). { +query_expression(A) ::= query_simple(B) + order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E). { A = addOrderByClause(pCxt, B, C); A = addSlimitClause(pCxt, A, D); A = addLimitClause(pCxt, A, E); } -query_expression_body(A) ::= query_primary(B). { A = B; } -query_expression_body(A) ::= - query_expression_body(B) UNION ALL query_expression_body(D). { A = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, B, D); } -query_expression_body(A) ::= - query_expression_body(B) UNION query_expression_body(D). { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, D); } +query_simple(A) ::= query_specification(B). { A = B; } +query_simple(A) ::= union_query_expression(B). { A = B; } -query_primary(A) ::= query_specification(B). { A = B; } -query_primary(A) ::= - NK_LP query_expression_body(B) - order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E) NK_RP. { - A = addOrderByClause(pCxt, B, C); - A = addSlimitClause(pCxt, A, D); - A = addLimitClause(pCxt, A, E); - } +union_query_expression(A) ::= + query_simple_or_subquery(B) UNION ALL query_simple_or_subquery(C). { A = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, B, C); } +union_query_expression(A) ::= + query_simple_or_subquery(B) UNION query_simple_or_subquery(C). { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, C); } + +query_simple_or_subquery(A) ::= query_simple(B). { A = B; } +query_simple_or_subquery(A) ::= subquery(B). { A = B; } + +query_or_subquery(A) ::= query_expression(B). { A = B; } +query_or_subquery(A) ::= subquery(B). { A = B; } %type order_by_clause_opt { SNodeList* } %destructor order_by_clause_opt { nodesDestroyList($$); } diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index a2a52aa0e0..689cb27aa5 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 430 +#define YYNOCODE 432 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SToken typedef union { int yyinit; ParseTOKENTYPE yy0; - int64_t yy49; - SDataType yy84; - EFillMode yy134; - SToken yy149; - EOrder yy158; - int32_t yy160; - SNode* yy312; - EOperatorType yy320; - int8_t yy363; - SAlterOption yy405; - ENullOrder yy417; - bool yy497; - SNodeList* yy824; - EJoinType yy832; + EOrder yy2; + int32_t yy100; + SNodeList* yy280; + bool yy281; + SDataType yy304; + EJoinType yy468; + int64_t yy477; + int8_t yy503; + SAlterOption yy605; + SToken yy641; + ENullOrder yy649; + EOperatorType yy668; + EFillMode yy774; + SNode* yy776; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -139,17 +139,17 @@ typedef union { #define ParseCTX_FETCH #define ParseCTX_STORE #define YYFALLBACK 1 -#define YYNSTATE 675 -#define YYNRULE 496 +#define YYNSTATE 668 +#define YYNRULE 499 #define YYNTOKEN 309 -#define YY_MAX_SHIFT 674 -#define YY_MIN_SHIFTREDUCE 985 -#define YY_MAX_SHIFTREDUCE 1480 -#define YY_ERROR_ACTION 1481 -#define YY_ACCEPT_ACTION 1482 -#define YY_NO_ACTION 1483 -#define YY_MIN_REDUCE 1484 -#define YY_MAX_REDUCE 1979 +#define YY_MAX_SHIFT 667 +#define YY_MIN_SHIFTREDUCE 980 +#define YY_MAX_SHIFTREDUCE 1478 +#define YY_ERROR_ACTION 1479 +#define YY_ACCEPT_ACTION 1480 +#define YY_NO_ACTION 1481 +#define YY_MIN_REDUCE 1482 +#define YY_MAX_REDUCE 1980 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -216,690 +216,646 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2512) +#define YY_ACTTAB_COUNT (2196) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 436, 1813, 437, 1519, 444, 345, 437, 1519, 1674, 1676, - /* 10 */ 33, 32, 39, 37, 40, 38, 36, 35, 34, 1620, - /* 20 */ 340, 530, 1281, 1801, 40, 38, 36, 35, 34, 1831, - /* 30 */ 1797, 1681, 117, 1357, 1797, 1279, 1770, 582, 312, 474, - /* 40 */ 30, 260, 1783, 1525, 581, 385, 148, 1679, 1496, 1629, - /* 50 */ 1035, 1813, 1034, 1801, 1793, 1799, 1352, 558, 1793, 1799, - /* 60 */ 329, 14, 1675, 1676, 1797, 472, 575, 1845, 1287, 1546, - /* 70 */ 575, 94, 1814, 584, 1816, 1817, 580, 1485, 575, 1831, - /* 80 */ 1036, 1891, 303, 362, 1802, 306, 1887, 582, 1793, 1799, - /* 90 */ 335, 666, 1783, 1, 581, 1797, 1451, 1957, 107, 1957, - /* 100 */ 575, 106, 105, 104, 103, 102, 101, 100, 99, 98, - /* 110 */ 166, 1681, 165, 1307, 1954, 671, 1954, 1845, 328, 1793, - /* 120 */ 1799, 149, 1814, 584, 1816, 1817, 580, 1679, 575, 1359, - /* 130 */ 1360, 575, 648, 647, 646, 645, 350, 1607, 644, 643, - /* 140 */ 128, 638, 637, 636, 635, 634, 633, 632, 631, 139, - /* 150 */ 627, 626, 625, 349, 348, 622, 621, 620, 619, 618, - /* 160 */ 36, 35, 34, 33, 32, 559, 1971, 40, 38, 36, - /* 170 */ 35, 34, 556, 556, 1306, 1282, 556, 1280, 1136, 606, - /* 180 */ 605, 604, 1140, 603, 1142, 1143, 602, 1145, 599, 63, - /* 190 */ 1151, 596, 1153, 1154, 593, 590, 453, 453, 1285, 1286, - /* 200 */ 553, 1334, 1335, 1337, 1338, 1339, 1340, 1341, 1342, 577, - /* 210 */ 573, 1350, 1351, 1353, 1354, 1355, 1356, 1358, 1361, 39, - /* 220 */ 37, 1420, 1178, 1179, 1307, 1831, 500, 340, 127, 1281, - /* 230 */ 33, 32, 167, 546, 40, 38, 36, 35, 34, 498, - /* 240 */ 1357, 496, 1279, 486, 485, 43, 42, 63, 558, 107, - /* 250 */ 123, 379, 106, 105, 104, 103, 102, 101, 100, 99, - /* 260 */ 98, 481, 484, 1352, 491, 22, 125, 480, 14, 545, - /* 270 */ 378, 84, 377, 1018, 1813, 1287, 39, 37, 530, 501, - /* 280 */ 1417, 250, 1899, 552, 340, 551, 1281, 478, 1957, 117, - /* 290 */ 1813, 1957, 1622, 209, 7, 327, 479, 1357, 1507, 1279, - /* 300 */ 2, 166, 1831, 146, 164, 1954, 1629, 494, 1954, 477, - /* 310 */ 582, 488, 1631, 1022, 1023, 1783, 208, 581, 1831, 150, - /* 320 */ 1352, 1957, 671, 1588, 435, 14, 579, 439, 167, 1441, - /* 330 */ 558, 1783, 1287, 581, 1956, 422, 1359, 1360, 1954, 1783, - /* 340 */ 1845, 135, 173, 517, 94, 1814, 584, 1816, 1817, 580, - /* 350 */ 326, 575, 58, 1729, 1891, 57, 1845, 2, 306, 1887, - /* 360 */ 293, 1814, 584, 1816, 1817, 580, 578, 575, 572, 1863, - /* 370 */ 1957, 1484, 539, 1439, 1440, 1442, 1443, 222, 71, 671, - /* 380 */ 146, 70, 1282, 164, 1280, 167, 167, 1954, 1506, 1632, - /* 390 */ 177, 176, 54, 1359, 1360, 116, 115, 114, 113, 112, - /* 400 */ 111, 110, 109, 108, 63, 1285, 1286, 1098, 1334, 1335, - /* 410 */ 1337, 1338, 1339, 1340, 1341, 1342, 577, 573, 1350, 1351, - /* 420 */ 1353, 1354, 1355, 1356, 1358, 1361, 33, 32, 1681, 1783, - /* 430 */ 40, 38, 36, 35, 34, 344, 26, 1261, 1262, 1282, - /* 440 */ 1100, 1280, 33, 32, 1679, 28, 40, 38, 36, 35, - /* 450 */ 34, 33, 32, 217, 562, 40, 38, 36, 35, 34, - /* 460 */ 1813, 317, 1285, 1286, 542, 1334, 1335, 1337, 1338, 1339, - /* 470 */ 1340, 1341, 1342, 577, 573, 1350, 1351, 1353, 1354, 1355, - /* 480 */ 1356, 1358, 1361, 39, 37, 302, 1413, 1304, 1831, 530, - /* 490 */ 63, 340, 78, 1281, 415, 210, 557, 427, 223, 224, - /* 500 */ 55, 1783, 1957, 581, 1357, 1308, 1279, 441, 516, 1416, - /* 510 */ 353, 1957, 1431, 1304, 400, 165, 428, 1629, 402, 1954, - /* 520 */ 318, 49, 316, 315, 1955, 476, 1845, 1352, 1954, 478, - /* 530 */ 95, 1814, 584, 1816, 1817, 580, 1722, 575, 1306, 1287, - /* 540 */ 1891, 548, 543, 167, 331, 1887, 159, 172, 1957, 1281, - /* 550 */ 1957, 477, 76, 305, 674, 64, 520, 305, 163, 393, - /* 560 */ 520, 164, 1279, 164, 8, 1954, 1917, 1954, 267, 553, - /* 570 */ 547, 389, 158, 33, 32, 343, 346, 40, 38, 36, - /* 580 */ 35, 34, 156, 146, 146, 1668, 671, 664, 660, 656, - /* 590 */ 652, 265, 1631, 1631, 1482, 1287, 1035, 127, 1034, 426, - /* 600 */ 1359, 1360, 421, 420, 419, 418, 417, 414, 413, 412, - /* 610 */ 411, 410, 406, 405, 404, 403, 397, 396, 395, 394, - /* 620 */ 1505, 391, 390, 314, 617, 1424, 1036, 92, 1367, 167, - /* 630 */ 230, 1306, 33, 32, 1306, 125, 40, 38, 36, 35, - /* 640 */ 34, 1305, 671, 1381, 63, 615, 1282, 252, 1280, 555, - /* 650 */ 160, 1899, 1900, 355, 1904, 352, 11, 10, 483, 482, - /* 660 */ 167, 1783, 563, 527, 137, 136, 612, 611, 610, 1285, - /* 670 */ 1286, 1732, 1334, 1335, 1337, 1338, 1339, 1340, 1341, 1342, - /* 680 */ 577, 573, 1350, 1351, 1353, 1354, 1355, 1356, 1358, 1361, - /* 690 */ 39, 37, 1362, 1957, 1287, 1957, 219, 502, 340, 374, - /* 700 */ 1281, 74, 1282, 167, 1280, 27, 164, 74, 164, 91, - /* 710 */ 1954, 1357, 1954, 1279, 1255, 1386, 212, 1504, 376, 372, - /* 720 */ 122, 1605, 124, 1625, 1813, 1285, 1286, 1722, 1503, 1624, - /* 730 */ 1621, 1502, 1477, 530, 1352, 33, 32, 1957, 175, 40, - /* 740 */ 38, 36, 35, 34, 169, 530, 1287, 39, 37, 1393, - /* 750 */ 164, 530, 1831, 1549, 1954, 340, 383, 1281, 1783, 1501, - /* 760 */ 582, 1629, 384, 443, 553, 1783, 439, 581, 1357, 1783, - /* 770 */ 1279, 9, 1783, 1629, 530, 642, 640, 517, 530, 1629, - /* 780 */ 558, 617, 61, 167, 1306, 392, 145, 1730, 1500, 407, - /* 790 */ 1845, 1352, 127, 671, 285, 1814, 584, 1816, 1817, 580, - /* 800 */ 1783, 575, 1629, 1287, 337, 336, 1629, 1359, 1360, 609, - /* 810 */ 1499, 530, 530, 1336, 1295, 530, 1336, 486, 485, 1476, - /* 820 */ 1957, 1319, 408, 451, 123, 1357, 452, 1288, 9, 1783, - /* 830 */ 125, 530, 1498, 166, 1495, 481, 484, 1954, 629, 1629, - /* 840 */ 1629, 480, 1626, 1629, 1309, 161, 1899, 1900, 1352, 1904, - /* 850 */ 671, 1783, 1728, 1282, 300, 1280, 630, 1618, 1601, 1629, - /* 860 */ 1287, 90, 33, 32, 1359, 1360, 40, 38, 36, 35, - /* 870 */ 34, 87, 1727, 1783, 300, 1783, 1285, 1286, 1494, 1334, - /* 880 */ 1335, 1337, 1338, 1339, 1340, 1341, 1342, 577, 573, 1350, - /* 890 */ 1351, 1353, 1354, 1355, 1356, 1358, 1361, 530, 530, 553, - /* 900 */ 530, 201, 530, 530, 199, 1906, 509, 570, 347, 503, - /* 910 */ 1282, 510, 1280, 514, 227, 307, 1614, 1493, 613, 1783, - /* 920 */ 1492, 1672, 1491, 1022, 1023, 1629, 1629, 127, 1629, 1903, - /* 930 */ 1629, 1629, 1490, 1285, 1286, 1489, 1334, 1335, 1337, 1338, - /* 940 */ 1339, 1340, 1341, 1342, 577, 573, 1350, 1351, 1353, 1354, - /* 950 */ 1355, 1356, 1358, 1361, 39, 37, 1379, 530, 1783, 530, - /* 960 */ 1616, 1783, 340, 1783, 1281, 125, 1336, 1296, 526, 1291, - /* 970 */ 528, 1911, 1413, 1783, 196, 1357, 1783, 1279, 1488, 1487, - /* 980 */ 162, 1899, 1900, 1606, 1904, 1629, 232, 1629, 152, 1813, - /* 990 */ 1299, 1301, 1906, 470, 466, 462, 458, 195, 1352, 1681, - /* 1000 */ 44, 4, 573, 1350, 1351, 1353, 1354, 1355, 1356, 1604, - /* 1010 */ 1287, 1380, 530, 530, 386, 1680, 1902, 1831, 614, 1783, - /* 1020 */ 1783, 1672, 324, 529, 261, 582, 1906, 387, 560, 147, - /* 1030 */ 1783, 565, 581, 75, 278, 2, 193, 571, 33, 32, - /* 1040 */ 1629, 1629, 40, 38, 36, 35, 34, 41, 276, 60, - /* 1050 */ 1901, 272, 59, 203, 1659, 1845, 202, 671, 216, 294, - /* 1060 */ 1814, 584, 1816, 1817, 580, 221, 575, 131, 180, 432, - /* 1070 */ 430, 1359, 1360, 29, 338, 1374, 1375, 1376, 1377, 1378, - /* 1080 */ 1382, 1383, 1384, 1385, 205, 1290, 207, 204, 615, 206, - /* 1090 */ 1536, 307, 53, 513, 11, 10, 1289, 77, 1232, 192, - /* 1100 */ 186, 1531, 191, 1529, 63, 1589, 449, 137, 136, 612, - /* 1110 */ 611, 610, 487, 134, 615, 135, 225, 1282, 523, 1280, - /* 1120 */ 51, 236, 184, 489, 1319, 492, 1479, 1480, 1804, 1612, - /* 1130 */ 51, 41, 1379, 137, 136, 612, 611, 610, 41, 588, - /* 1140 */ 1285, 1286, 93, 1334, 1335, 1337, 1338, 1339, 1340, 1341, - /* 1150 */ 1342, 577, 573, 1350, 1351, 1353, 1354, 1355, 1356, 1358, - /* 1160 */ 1361, 134, 135, 119, 229, 134, 1129, 1062, 213, 623, - /* 1170 */ 624, 1438, 239, 576, 1371, 1806, 608, 1497, 68, 67, - /* 1180 */ 382, 1387, 1343, 171, 255, 540, 471, 1380, 244, 271, - /* 1190 */ 1157, 1082, 1080, 1832, 1813, 351, 1520, 1669, 1921, 301, - /* 1200 */ 1063, 554, 370, 254, 368, 364, 360, 357, 354, 249, - /* 1210 */ 3, 257, 1161, 1168, 1166, 259, 138, 356, 5, 361, - /* 1220 */ 1248, 313, 1831, 174, 1304, 268, 388, 1293, 409, 1724, - /* 1230 */ 557, 416, 424, 423, 425, 1783, 429, 581, 1292, 431, - /* 1240 */ 433, 566, 1310, 167, 1312, 434, 442, 1813, 183, 29, - /* 1250 */ 338, 1374, 1375, 1376, 1377, 1378, 1382, 1383, 1384, 1385, - /* 1260 */ 1845, 445, 446, 185, 95, 1814, 584, 1816, 1817, 580, - /* 1270 */ 1311, 575, 447, 1313, 1891, 1831, 188, 450, 331, 1887, - /* 1280 */ 159, 448, 473, 582, 190, 72, 73, 1813, 1783, 454, - /* 1290 */ 581, 194, 269, 475, 1619, 198, 304, 1615, 118, 200, - /* 1300 */ 1918, 1763, 211, 140, 141, 1617, 1613, 504, 214, 505, - /* 1310 */ 142, 1813, 143, 1845, 511, 1831, 515, 95, 1814, 584, - /* 1320 */ 1816, 1817, 580, 582, 575, 218, 508, 1891, 1783, 524, - /* 1330 */ 581, 331, 1887, 1970, 518, 81, 538, 132, 1762, 1831, - /* 1340 */ 323, 83, 1925, 1734, 521, 1309, 270, 582, 325, 1630, - /* 1350 */ 541, 1813, 1783, 1845, 581, 6, 133, 279, 1814, 584, - /* 1360 */ 1816, 1817, 580, 1932, 575, 534, 525, 536, 537, 234, - /* 1370 */ 238, 330, 550, 544, 535, 533, 532, 1845, 1413, 1831, - /* 1380 */ 126, 95, 1814, 584, 1816, 1817, 580, 582, 575, 1922, - /* 1390 */ 245, 1891, 1783, 1931, 581, 331, 1887, 1970, 567, 1308, - /* 1400 */ 564, 248, 48, 332, 1813, 85, 1948, 1907, 586, 1673, - /* 1410 */ 1602, 273, 667, 52, 668, 1913, 243, 1845, 670, 299, - /* 1420 */ 264, 95, 1814, 584, 1816, 1817, 580, 277, 575, 246, - /* 1430 */ 153, 1891, 1831, 1872, 247, 331, 1887, 1970, 275, 286, - /* 1440 */ 582, 296, 295, 1777, 253, 1783, 1910, 581, 1776, 1775, - /* 1450 */ 1953, 65, 1774, 561, 1813, 568, 256, 1973, 258, 66, - /* 1460 */ 558, 1771, 358, 359, 1273, 1274, 170, 363, 1769, 365, - /* 1470 */ 1845, 1813, 366, 367, 285, 1814, 584, 1816, 1817, 580, - /* 1480 */ 1768, 575, 1831, 369, 1767, 371, 1766, 373, 1765, 375, - /* 1490 */ 582, 1251, 1250, 1745, 1744, 1783, 381, 581, 380, 1831, - /* 1500 */ 1957, 1743, 1742, 1220, 1717, 1716, 1715, 582, 129, 1714, - /* 1510 */ 1713, 1712, 1783, 164, 581, 69, 1711, 1954, 1710, 1709, - /* 1520 */ 1845, 1813, 398, 1706, 96, 1814, 584, 1816, 1817, 580, - /* 1530 */ 1708, 575, 1707, 399, 1891, 401, 1705, 1845, 1890, 1887, - /* 1540 */ 1704, 96, 1814, 584, 1816, 1817, 580, 1703, 575, 1831, - /* 1550 */ 1702, 1891, 1701, 1700, 1699, 569, 1887, 582, 1698, 1697, - /* 1560 */ 1696, 1695, 1783, 1694, 581, 1693, 1692, 130, 1691, 1813, - /* 1570 */ 1690, 1689, 1688, 1687, 1686, 1685, 1684, 1222, 1683, 1813, - /* 1580 */ 178, 1550, 179, 1548, 1516, 181, 182, 1845, 1682, 1551, - /* 1590 */ 120, 96, 1814, 584, 1816, 1817, 580, 1831, 575, 157, - /* 1600 */ 1025, 1891, 531, 438, 1024, 582, 1888, 1831, 440, 1515, - /* 1610 */ 1783, 1758, 581, 1752, 1741, 582, 121, 189, 187, 1740, - /* 1620 */ 1783, 1726, 581, 1608, 1547, 1545, 1055, 1543, 455, 456, - /* 1630 */ 1813, 459, 460, 457, 461, 1845, 1541, 463, 464, 294, - /* 1640 */ 1814, 584, 1816, 1817, 580, 1845, 575, 465, 1539, 289, - /* 1650 */ 1814, 584, 1816, 1817, 580, 467, 575, 468, 1831, 1171, - /* 1660 */ 1609, 469, 1528, 1527, 1512, 1610, 582, 1172, 1097, 50, - /* 1670 */ 1096, 1783, 639, 581, 641, 1093, 1092, 1091, 1537, 319, - /* 1680 */ 1532, 1530, 493, 320, 1511, 495, 1510, 549, 490, 321, - /* 1690 */ 1813, 497, 1509, 499, 97, 1757, 1845, 197, 1751, 56, - /* 1700 */ 149, 1814, 584, 1816, 1817, 580, 144, 575, 1813, 506, - /* 1710 */ 1257, 507, 1739, 1737, 1738, 1736, 1735, 1265, 1831, 15, - /* 1720 */ 519, 1733, 220, 226, 1725, 231, 579, 79, 215, 80, - /* 1730 */ 45, 1783, 41, 581, 47, 82, 1831, 23, 233, 16, - /* 1740 */ 1453, 339, 241, 235, 582, 1972, 87, 522, 1435, 1783, - /* 1750 */ 242, 581, 1437, 1804, 25, 1465, 1845, 228, 1813, 237, - /* 1760 */ 293, 1814, 584, 1816, 1817, 580, 322, 575, 251, 1864, - /* 1770 */ 512, 1430, 46, 1803, 1845, 17, 151, 154, 294, 1814, - /* 1780 */ 584, 1816, 1817, 580, 1813, 575, 1831, 240, 18, 24, - /* 1790 */ 86, 341, 1464, 333, 582, 1410, 1409, 1470, 1469, 1783, - /* 1800 */ 1459, 581, 1468, 334, 10, 1297, 155, 19, 1813, 1327, - /* 1810 */ 1372, 1848, 1831, 587, 585, 168, 583, 1347, 574, 31, - /* 1820 */ 582, 342, 1345, 12, 1845, 1783, 1344, 581, 294, 1814, - /* 1830 */ 584, 1816, 1817, 580, 1813, 575, 1831, 13, 1158, 20, - /* 1840 */ 21, 589, 591, 1155, 582, 592, 594, 1152, 595, 1783, - /* 1850 */ 1845, 581, 597, 600, 280, 1814, 584, 1816, 1817, 580, - /* 1860 */ 1146, 575, 1831, 598, 1135, 1144, 601, 1150, 1149, 88, - /* 1870 */ 582, 1148, 1167, 1147, 1845, 1783, 262, 581, 281, 1814, - /* 1880 */ 584, 1816, 1817, 580, 607, 575, 89, 62, 1163, 1053, - /* 1890 */ 616, 1088, 1813, 1087, 1086, 1085, 1084, 1083, 1081, 1079, - /* 1900 */ 1845, 628, 1078, 1077, 288, 1814, 584, 1816, 1817, 580, - /* 1910 */ 1813, 575, 553, 1104, 263, 1075, 1074, 1073, 1072, 1071, - /* 1920 */ 1831, 1070, 1069, 1068, 1099, 1101, 1065, 1064, 582, 1061, - /* 1930 */ 1059, 1060, 1544, 1783, 1058, 581, 649, 650, 1831, 651, - /* 1940 */ 127, 1542, 653, 655, 1540, 654, 582, 657, 659, 658, - /* 1950 */ 1538, 1783, 661, 581, 663, 1526, 1508, 662, 1845, 665, - /* 1960 */ 558, 1015, 290, 1814, 584, 1816, 1817, 580, 266, 575, - /* 1970 */ 669, 1813, 1483, 1283, 274, 672, 1845, 673, 125, 1483, - /* 1980 */ 282, 1814, 584, 1816, 1817, 580, 1483, 575, 1483, 1483, - /* 1990 */ 1483, 1483, 1483, 250, 1899, 552, 1483, 551, 1483, 1831, - /* 2000 */ 1957, 1483, 1483, 1483, 1483, 1483, 1483, 582, 1483, 1483, - /* 2010 */ 1483, 1483, 1783, 164, 581, 1483, 1483, 1954, 1483, 1483, - /* 2020 */ 1483, 1813, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2030 */ 1483, 1813, 1483, 1483, 1483, 1483, 1483, 1845, 1483, 1483, - /* 2040 */ 1483, 291, 1814, 584, 1816, 1817, 580, 1483, 575, 1831, - /* 2050 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 582, 1483, 1831, - /* 2060 */ 1483, 1483, 1783, 1483, 581, 1483, 1483, 582, 1483, 1483, - /* 2070 */ 1483, 1813, 1783, 1483, 581, 1483, 1483, 1483, 1483, 1483, - /* 2080 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1845, 1483, 1483, - /* 2090 */ 1483, 283, 1814, 584, 1816, 1817, 580, 1845, 575, 1831, - /* 2100 */ 1483, 292, 1814, 584, 1816, 1817, 580, 582, 575, 1483, - /* 2110 */ 1483, 1483, 1783, 1483, 581, 1483, 1483, 1483, 1483, 1483, - /* 2120 */ 1483, 1813, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2130 */ 1483, 1483, 1483, 1813, 1483, 1483, 1483, 1845, 1483, 1483, - /* 2140 */ 1483, 284, 1814, 584, 1816, 1817, 580, 1813, 575, 1831, - /* 2150 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 582, 1483, 1483, - /* 2160 */ 1483, 1831, 1783, 1483, 581, 1483, 1483, 1483, 1483, 582, - /* 2170 */ 1483, 1483, 1483, 1483, 1783, 1831, 581, 1483, 1483, 1483, - /* 2180 */ 1483, 1483, 1483, 582, 1483, 1483, 1483, 1845, 1783, 1483, - /* 2190 */ 581, 297, 1814, 584, 1816, 1817, 580, 1483, 575, 1845, - /* 2200 */ 1483, 1483, 1483, 298, 1814, 584, 1816, 1817, 580, 1483, - /* 2210 */ 575, 1483, 1483, 1845, 1483, 1483, 1483, 1825, 1814, 584, - /* 2220 */ 1816, 1817, 580, 1813, 575, 1483, 1483, 1483, 1483, 1483, - /* 2230 */ 1483, 1483, 1483, 1813, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2240 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2250 */ 1483, 1831, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 582, - /* 2260 */ 1483, 1831, 1483, 1483, 1783, 1483, 581, 1483, 1483, 582, - /* 2270 */ 1483, 1483, 1483, 1483, 1783, 1483, 581, 1483, 1483, 1483, - /* 2280 */ 1483, 1483, 1483, 1483, 1813, 1483, 1483, 1483, 1483, 1845, - /* 2290 */ 1483, 1483, 1483, 1824, 1814, 584, 1816, 1817, 580, 1845, - /* 2300 */ 575, 1483, 1483, 1823, 1814, 584, 1816, 1817, 580, 1483, - /* 2310 */ 575, 1483, 1831, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2320 */ 582, 1483, 1483, 1483, 1483, 1783, 1483, 581, 1483, 1483, - /* 2330 */ 1483, 1483, 1483, 1483, 1813, 1483, 1483, 1483, 1483, 1483, - /* 2340 */ 1483, 1483, 1483, 1483, 1813, 1483, 1483, 1483, 1483, 1483, - /* 2350 */ 1845, 1483, 1483, 1483, 310, 1814, 584, 1816, 1817, 580, - /* 2360 */ 1483, 575, 1831, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2370 */ 582, 1483, 1831, 1483, 1483, 1783, 1483, 581, 1483, 1483, - /* 2380 */ 582, 1483, 1483, 1483, 1813, 1783, 1483, 581, 1483, 1483, - /* 2390 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2400 */ 1845, 1483, 1483, 1483, 309, 1814, 584, 1816, 1817, 580, - /* 2410 */ 1845, 575, 1831, 1483, 311, 1814, 584, 1816, 1817, 580, - /* 2420 */ 582, 575, 1483, 1483, 1483, 1783, 1483, 581, 1483, 1483, - /* 2430 */ 1483, 1483, 1483, 1483, 1813, 1483, 1483, 1483, 1483, 1483, - /* 2440 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2450 */ 1845, 1483, 1483, 1483, 308, 1814, 584, 1816, 1817, 580, - /* 2460 */ 1483, 575, 1831, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2470 */ 582, 1483, 1483, 1483, 1483, 1783, 1483, 581, 1483, 1483, - /* 2480 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2490 */ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, - /* 2500 */ 1845, 1483, 1483, 1483, 287, 1814, 584, 1816, 1817, 580, - /* 2510 */ 1483, 575, + /* 0 */ 428, 1730, 429, 1517, 1811, 436, 1799, 429, 1517, 510, + /* 10 */ 28, 252, 37, 35, 1957, 1616, 318, 1795, 1013, 1727, + /* 20 */ 332, 146, 1276, 1494, 1811, 38, 36, 34, 33, 32, + /* 30 */ 549, 319, 1829, 1352, 337, 1274, 1952, 1672, 1674, 144, + /* 40 */ 574, 1791, 1797, 321, 71, 1781, 377, 573, 1629, 551, + /* 50 */ 162, 1957, 1829, 567, 1953, 552, 1347, 120, 1017, 1018, + /* 60 */ 574, 12, 1673, 1674, 81, 1781, 1622, 573, 1282, 1544, + /* 70 */ 1843, 1302, 1829, 1952, 91, 1812, 577, 1814, 575, 572, + /* 80 */ 539, 567, 148, 295, 1889, 1620, 1586, 1956, 298, 1885, + /* 90 */ 1843, 1953, 1955, 1, 93, 1812, 577, 1814, 1815, 572, + /* 100 */ 1952, 567, 510, 40, 1889, 1419, 414, 1904, 1888, 1885, + /* 110 */ 549, 1301, 1728, 551, 162, 664, 538, 104, 1953, 552, + /* 120 */ 103, 102, 101, 100, 99, 98, 97, 96, 95, 1354, + /* 130 */ 1355, 1901, 641, 640, 639, 638, 342, 1303, 637, 636, + /* 140 */ 126, 631, 630, 629, 628, 627, 626, 625, 624, 137, + /* 150 */ 620, 619, 618, 341, 340, 615, 614, 613, 612, 611, + /* 160 */ 24, 173, 172, 156, 192, 1482, 31, 30, 475, 474, + /* 170 */ 38, 36, 34, 33, 32, 1277, 1666, 1275, 150, 427, + /* 180 */ 1173, 1174, 431, 462, 458, 454, 450, 191, 52, 113, + /* 190 */ 112, 111, 110, 109, 108, 107, 106, 105, 1280, 1281, + /* 200 */ 52, 1329, 1330, 1332, 1333, 1334, 1335, 1336, 1337, 569, + /* 210 */ 565, 1345, 1346, 1348, 1349, 1350, 1351, 1353, 1356, 37, + /* 220 */ 35, 1415, 41, 72, 635, 633, 189, 332, 523, 1276, + /* 230 */ 31, 30, 163, 1505, 38, 36, 34, 33, 32, 46, + /* 240 */ 1352, 445, 1274, 218, 1811, 1131, 599, 598, 597, 1135, + /* 250 */ 596, 1137, 1138, 595, 1140, 592, 1627, 1146, 589, 1148, + /* 260 */ 1149, 586, 583, 1347, 6, 20, 1679, 523, 12, 370, + /* 270 */ 523, 369, 1829, 320, 1781, 1282, 37, 35, 165, 248, + /* 280 */ 550, 114, 1677, 1302, 332, 1781, 1276, 573, 466, 188, + /* 290 */ 182, 71, 187, 1331, 56, 1627, 441, 1352, 1627, 1274, + /* 300 */ 1, 31, 30, 1256, 1257, 38, 36, 34, 33, 32, + /* 310 */ 1843, 1605, 180, 1623, 92, 1812, 577, 1814, 1815, 572, + /* 320 */ 1347, 567, 664, 1301, 1889, 12, 608, 163, 323, 1885, + /* 330 */ 157, 88, 1282, 329, 328, 610, 1354, 1355, 1483, 163, + /* 340 */ 1618, 206, 161, 1290, 122, 135, 134, 605, 604, 603, + /* 350 */ 1915, 1795, 1619, 1304, 1352, 549, 1283, 1, 602, 104, + /* 360 */ 1811, 163, 103, 102, 101, 100, 99, 98, 97, 96, + /* 370 */ 95, 445, 144, 478, 477, 1791, 1797, 1347, 335, 664, + /* 380 */ 121, 1630, 1277, 52, 1275, 1376, 144, 567, 1829, 1282, + /* 390 */ 213, 473, 476, 1354, 1355, 1629, 574, 472, 73, 297, + /* 400 */ 540, 1781, 513, 573, 1300, 1280, 1281, 1436, 1329, 1330, + /* 410 */ 1332, 1333, 1334, 1335, 1336, 1337, 569, 565, 1345, 1346, + /* 420 */ 1348, 1349, 1350, 1351, 1353, 1356, 1843, 52, 40, 75, + /* 430 */ 92, 1812, 577, 1814, 1815, 572, 562, 567, 1523, 1277, + /* 440 */ 1889, 1275, 1679, 1679, 323, 1885, 1971, 25, 1504, 304, + /* 450 */ 532, 1434, 1435, 1437, 1438, 1923, 1408, 1381, 1677, 1678, + /* 460 */ 1475, 1503, 1280, 1281, 169, 1329, 1330, 1332, 1333, 1334, + /* 470 */ 1335, 1336, 1337, 569, 565, 1345, 1346, 1348, 1349, 1350, + /* 480 */ 1351, 1353, 1356, 37, 35, 294, 659, 1299, 1957, 1781, + /* 490 */ 371, 332, 1301, 1276, 407, 228, 1291, 419, 1286, 1412, + /* 500 */ 68, 535, 1781, 67, 1352, 1502, 1274, 1362, 506, 435, + /* 510 */ 1952, 1282, 431, 1301, 392, 1799, 420, 1811, 394, 1294, + /* 520 */ 1296, 1480, 163, 551, 162, 378, 1795, 1347, 1953, 552, + /* 530 */ 1952, 565, 1345, 1346, 1348, 1349, 1350, 1351, 379, 1282, + /* 540 */ 1604, 1957, 1301, 1958, 162, 1829, 1781, 1474, 1953, 552, + /* 550 */ 1791, 1797, 327, 571, 1030, 1030, 1029, 1029, 1781, 385, + /* 560 */ 573, 1612, 567, 1952, 7, 52, 163, 163, 31, 30, + /* 570 */ 464, 381, 38, 36, 34, 33, 32, 1956, 541, 536, + /* 580 */ 347, 1953, 1954, 1843, 1031, 1031, 664, 285, 1812, 577, + /* 590 */ 1814, 1815, 572, 570, 567, 564, 1861, 622, 506, 418, + /* 600 */ 1354, 1355, 413, 412, 411, 410, 409, 406, 405, 404, + /* 610 */ 403, 402, 398, 397, 396, 395, 389, 388, 387, 386, + /* 620 */ 1952, 383, 382, 306, 31, 30, 1614, 546, 38, 36, + /* 630 */ 34, 33, 32, 1958, 162, 546, 31, 30, 1953, 552, + /* 640 */ 38, 36, 34, 33, 32, 608, 1277, 1904, 1275, 34, + /* 650 */ 33, 32, 31, 30, 1446, 125, 38, 36, 34, 33, + /* 660 */ 32, 9, 8, 125, 135, 134, 605, 604, 603, 1280, + /* 670 */ 1281, 1900, 1329, 1330, 1332, 1333, 1334, 1335, 1336, 1337, + /* 680 */ 569, 565, 1345, 1346, 1348, 1349, 1350, 1351, 1353, 1356, + /* 690 */ 37, 35, 1357, 123, 1093, 1331, 433, 1768, 332, 1501, + /* 700 */ 1276, 116, 1299, 163, 163, 133, 483, 548, 158, 1897, + /* 710 */ 1898, 1352, 1902, 1274, 219, 220, 246, 1897, 545, 26, + /* 720 */ 544, 493, 1426, 1952, 1331, 31, 30, 1095, 1411, 38, + /* 730 */ 36, 34, 33, 32, 1347, 205, 551, 162, 1314, 1811, + /* 740 */ 1781, 1953, 552, 1679, 354, 366, 1282, 37, 35, 486, + /* 750 */ 336, 523, 1800, 480, 1388, 332, 45, 1276, 204, 1677, + /* 760 */ 1603, 523, 114, 1795, 368, 364, 1956, 1829, 1352, 471, + /* 770 */ 1274, 7, 375, 297, 523, 574, 513, 509, 143, 1627, + /* 780 */ 1781, 1500, 573, 555, 338, 376, 345, 1791, 1797, 1627, + /* 790 */ 546, 1347, 144, 664, 58, 506, 1602, 57, 1610, 567, + /* 800 */ 1499, 1629, 1627, 1282, 506, 1843, 1498, 1354, 1355, 92, + /* 810 */ 1812, 577, 1814, 1815, 572, 1957, 567, 1952, 125, 1889, + /* 820 */ 610, 209, 1781, 323, 1885, 1971, 1952, 1904, 7, 1495, + /* 830 */ 1958, 162, 1303, 1497, 1946, 1953, 552, 1720, 1720, 1958, + /* 840 */ 162, 1781, 1017, 1018, 1953, 552, 492, 1781, 168, 171, + /* 850 */ 664, 1899, 568, 1277, 606, 1275, 123, 1670, 601, 490, + /* 860 */ 344, 488, 31, 30, 1354, 1355, 38, 36, 34, 33, + /* 870 */ 32, 159, 1897, 1898, 1781, 1902, 1280, 1281, 506, 1329, + /* 880 */ 1330, 1332, 1333, 1334, 1335, 1336, 1337, 569, 565, 1345, + /* 890 */ 1346, 1348, 1349, 1350, 1351, 1353, 1356, 546, 31, 30, + /* 900 */ 1952, 608, 38, 36, 34, 33, 32, 44, 505, 1726, + /* 910 */ 1277, 292, 1275, 1958, 162, 299, 501, 1496, 1953, 552, + /* 920 */ 135, 134, 605, 604, 603, 125, 309, 249, 607, 1811, + /* 930 */ 1493, 1670, 1492, 1280, 1281, 1491, 1329, 1330, 1332, 1333, + /* 940 */ 1334, 1335, 1336, 1337, 569, 565, 1345, 1346, 1348, 1349, + /* 950 */ 1350, 1351, 1353, 1356, 37, 35, 1374, 1829, 1781, 1725, + /* 960 */ 1285, 292, 332, 123, 1276, 574, 1490, 623, 494, 1599, + /* 970 */ 1781, 1781, 573, 1781, 248, 1352, 1781, 1274, 160, 1897, + /* 980 */ 1898, 264, 1902, 470, 1657, 310, 506, 308, 307, 1811, + /* 990 */ 468, 556, 1489, 563, 470, 1843, 1488, 1284, 1347, 92, + /* 1000 */ 1812, 577, 1814, 1815, 572, 469, 567, 1781, 1952, 1889, + /* 1010 */ 1282, 1375, 554, 323, 1885, 1971, 469, 1829, 1909, 1408, + /* 1020 */ 197, 1958, 162, 195, 1908, 574, 1953, 552, 1547, 145, + /* 1030 */ 1781, 558, 573, 1781, 270, 1, 1534, 1781, 31, 30, + /* 1040 */ 1276, 1587, 38, 36, 34, 33, 32, 463, 268, 60, + /* 1050 */ 42, 3, 59, 1274, 1830, 1843, 523, 664, 479, 147, + /* 1060 */ 1812, 577, 1814, 1815, 572, 1529, 567, 384, 176, 424, + /* 1070 */ 422, 1354, 1355, 27, 330, 1369, 1370, 1371, 1372, 1373, + /* 1080 */ 1377, 1378, 1379, 1380, 1627, 1527, 1282, 481, 1487, 1057, + /* 1090 */ 523, 299, 478, 477, 1486, 1811, 240, 523, 523, 121, + /* 1100 */ 199, 399, 1288, 198, 52, 553, 1972, 484, 400, 443, + /* 1110 */ 473, 476, 201, 9, 8, 200, 472, 1277, 1627, 1275, + /* 1120 */ 533, 1485, 1058, 1829, 1314, 1627, 1627, 343, 316, 1781, + /* 1130 */ 1366, 574, 1374, 664, 212, 1781, 1781, 39, 573, 1287, + /* 1140 */ 1280, 1281, 90, 1329, 1330, 1332, 1333, 1334, 1335, 1336, + /* 1150 */ 1337, 569, 565, 1345, 1346, 1348, 1349, 1350, 1351, 1353, + /* 1160 */ 1356, 1843, 1781, 1477, 1478, 286, 1812, 577, 1814, 1815, + /* 1170 */ 572, 203, 567, 74, 202, 217, 129, 1802, 65, 64, + /* 1180 */ 374, 523, 132, 167, 1667, 523, 523, 1375, 1227, 1919, + /* 1190 */ 523, 133, 444, 1277, 1811, 1275, 1624, 495, 1518, 293, + /* 1200 */ 523, 502, 362, 547, 360, 356, 352, 349, 346, 1627, + /* 1210 */ 616, 507, 523, 1627, 1627, 245, 1280, 1281, 1627, 87, + /* 1220 */ 523, 4, 1829, 223, 1804, 54, 221, 516, 1627, 84, + /* 1230 */ 550, 519, 1077, 225, 523, 1781, 232, 573, 251, 2, + /* 1240 */ 1627, 559, 1124, 163, 54, 521, 353, 1811, 1627, 27, + /* 1250 */ 330, 1369, 1370, 1371, 1372, 1373, 1377, 1378, 1379, 1380, + /* 1260 */ 1843, 1811, 1627, 348, 92, 1812, 577, 1814, 1815, 572, + /* 1270 */ 523, 567, 39, 523, 1889, 1829, 1433, 39, 323, 1885, + /* 1280 */ 157, 522, 305, 574, 253, 617, 1243, 235, 1781, 1829, + /* 1290 */ 573, 581, 260, 132, 380, 1382, 170, 574, 1627, 133, + /* 1300 */ 1916, 1627, 1781, 1299, 573, 401, 1722, 1075, 117, 132, + /* 1310 */ 416, 1811, 408, 1843, 415, 417, 421, 277, 1812, 577, + /* 1320 */ 1814, 575, 572, 1338, 567, 423, 425, 1843, 263, 1305, + /* 1330 */ 426, 93, 1812, 577, 1814, 1815, 572, 1811, 567, 1829, + /* 1340 */ 434, 1889, 1152, 1952, 1156, 561, 1885, 574, 1307, 437, + /* 1350 */ 1163, 1811, 1781, 179, 573, 438, 551, 162, 439, 1161, + /* 1360 */ 136, 1953, 552, 1306, 181, 1829, 1308, 440, 184, 442, + /* 1370 */ 524, 186, 69, 574, 70, 446, 190, 1843, 1781, 1829, + /* 1380 */ 573, 93, 1812, 577, 1814, 1815, 572, 574, 567, 465, + /* 1390 */ 523, 1889, 1781, 467, 573, 296, 1886, 1617, 194, 1613, + /* 1400 */ 196, 339, 138, 1843, 1811, 261, 139, 286, 1812, 577, + /* 1410 */ 1814, 1815, 572, 1615, 567, 115, 1611, 1843, 1627, 140, + /* 1420 */ 141, 281, 1812, 577, 1814, 1815, 572, 207, 567, 496, + /* 1430 */ 1811, 210, 1829, 214, 497, 1761, 503, 508, 500, 315, + /* 1440 */ 574, 531, 511, 1760, 1732, 1781, 514, 573, 517, 130, + /* 1450 */ 131, 317, 78, 1304, 1811, 262, 80, 518, 1829, 542, + /* 1460 */ 527, 534, 1628, 1930, 230, 1920, 571, 234, 529, 5, + /* 1470 */ 1843, 1781, 543, 573, 147, 1812, 577, 1814, 1815, 572, + /* 1480 */ 530, 567, 1829, 1929, 1911, 151, 528, 331, 322, 537, + /* 1490 */ 574, 526, 525, 239, 1408, 1781, 1843, 573, 244, 243, + /* 1500 */ 285, 1812, 577, 1814, 1815, 572, 124, 567, 1303, 1862, + /* 1510 */ 241, 242, 1811, 324, 51, 1870, 560, 1905, 557, 82, + /* 1520 */ 1843, 1973, 579, 667, 286, 1812, 577, 1814, 1815, 572, + /* 1530 */ 250, 567, 1671, 1974, 1600, 1951, 265, 259, 660, 256, + /* 1540 */ 1829, 661, 663, 43, 278, 333, 291, 288, 574, 287, + /* 1550 */ 267, 154, 269, 1781, 1775, 573, 657, 653, 649, 645, + /* 1560 */ 257, 1774, 62, 1773, 1811, 1772, 63, 1769, 350, 351, + /* 1570 */ 1268, 1269, 166, 355, 1811, 1767, 357, 358, 1843, 359, + /* 1580 */ 1766, 361, 286, 1812, 577, 1814, 1815, 572, 1765, 567, + /* 1590 */ 363, 1764, 1829, 365, 1763, 367, 89, 1246, 1245, 226, + /* 1600 */ 574, 1743, 1829, 1742, 373, 1781, 372, 573, 1741, 1740, + /* 1610 */ 574, 1715, 1215, 1714, 1713, 1781, 127, 573, 1712, 1711, + /* 1620 */ 1710, 66, 1709, 1708, 1707, 1706, 1811, 1705, 390, 1704, + /* 1630 */ 1843, 391, 520, 393, 271, 1812, 577, 1814, 1815, 572, + /* 1640 */ 1843, 567, 1703, 1702, 272, 1812, 577, 1814, 1815, 572, + /* 1650 */ 1811, 567, 1701, 1700, 1829, 1699, 1698, 1697, 1696, 1695, + /* 1660 */ 1694, 1693, 574, 1692, 1691, 215, 1690, 1781, 128, 573, + /* 1670 */ 1689, 1688, 1687, 1686, 1811, 1685, 1684, 1683, 1829, 1682, + /* 1680 */ 1681, 1680, 1549, 1250, 1217, 208, 574, 174, 1548, 175, + /* 1690 */ 1811, 1781, 1843, 573, 1546, 1514, 273, 1812, 577, 1814, + /* 1700 */ 1815, 572, 1829, 567, 1020, 1019, 118, 177, 1513, 178, + /* 1710 */ 574, 155, 1756, 119, 1750, 1781, 1843, 573, 1829, 1739, + /* 1720 */ 280, 1812, 577, 1814, 1815, 572, 574, 567, 183, 430, + /* 1730 */ 1811, 1781, 432, 573, 185, 1738, 1724, 1606, 1545, 1543, + /* 1740 */ 1843, 447, 449, 448, 282, 1812, 577, 1814, 1815, 572, + /* 1750 */ 1541, 567, 451, 1539, 452, 1050, 1843, 453, 1829, 455, + /* 1760 */ 274, 1812, 577, 1814, 1815, 572, 574, 567, 456, 457, + /* 1770 */ 1537, 1781, 460, 573, 1526, 459, 1525, 1510, 1608, 1167, + /* 1780 */ 461, 1166, 1607, 1811, 1092, 193, 53, 1091, 632, 634, + /* 1790 */ 1088, 1087, 1535, 1086, 311, 1811, 1843, 1530, 1528, 485, + /* 1800 */ 283, 1812, 577, 1814, 1815, 572, 482, 567, 312, 1811, + /* 1810 */ 313, 1829, 1509, 1508, 487, 489, 1507, 491, 1755, 574, + /* 1820 */ 94, 1749, 1252, 1829, 1781, 142, 573, 498, 1737, 1735, + /* 1830 */ 1957, 574, 1736, 1734, 1733, 13, 1781, 1829, 573, 1260, + /* 1840 */ 47, 216, 1731, 1723, 222, 574, 211, 76, 77, 1843, + /* 1850 */ 1781, 79, 573, 275, 1812, 577, 1814, 1815, 572, 499, + /* 1860 */ 567, 1843, 314, 504, 1811, 284, 1812, 577, 1814, 1815, + /* 1870 */ 572, 515, 567, 224, 14, 1843, 84, 227, 39, 276, + /* 1880 */ 1812, 577, 1814, 1815, 572, 512, 567, 21, 50, 237, + /* 1890 */ 238, 23, 1829, 1448, 229, 1802, 231, 1430, 247, 49, + /* 1900 */ 574, 233, 55, 1801, 1432, 1781, 152, 573, 149, 16, + /* 1910 */ 236, 1463, 1811, 22, 1462, 325, 1425, 83, 1467, 1405, + /* 1920 */ 1404, 1466, 326, 8, 1468, 1292, 1367, 17, 1811, 1846, + /* 1930 */ 1843, 48, 1342, 566, 289, 1812, 577, 1814, 1815, 572, + /* 1940 */ 1829, 567, 153, 164, 1340, 15, 11, 29, 574, 1339, + /* 1950 */ 1322, 10, 1811, 1781, 18, 573, 1829, 19, 580, 1153, + /* 1960 */ 576, 334, 582, 578, 574, 1150, 584, 585, 587, 1781, + /* 1970 */ 588, 573, 1147, 590, 593, 1141, 1139, 1130, 1843, 1145, + /* 1980 */ 1829, 591, 290, 1812, 577, 1814, 1815, 572, 574, 567, + /* 1990 */ 1144, 594, 1143, 1781, 1843, 573, 600, 85, 1823, 1812, + /* 2000 */ 577, 1814, 1815, 572, 1811, 567, 1142, 86, 1162, 61, + /* 2010 */ 254, 1158, 1048, 609, 1811, 1083, 1082, 1081, 1843, 1080, + /* 2020 */ 1079, 1078, 1822, 1812, 577, 1814, 1815, 572, 1811, 567, + /* 2030 */ 1076, 1074, 1829, 1073, 1072, 621, 1099, 255, 1070, 1069, + /* 2040 */ 574, 1068, 1829, 1067, 1066, 1781, 1065, 573, 1064, 1063, + /* 2050 */ 574, 1096, 1094, 1060, 1054, 1781, 1829, 573, 1059, 1056, + /* 2060 */ 1055, 1053, 1542, 642, 574, 1540, 644, 643, 646, 1781, + /* 2070 */ 1843, 573, 1538, 648, 1821, 1812, 577, 1814, 1815, 572, + /* 2080 */ 1843, 567, 647, 650, 302, 1812, 577, 1814, 1815, 572, + /* 2090 */ 651, 567, 652, 1536, 1843, 654, 1811, 655, 301, 1812, + /* 2100 */ 577, 1814, 1815, 572, 1524, 567, 656, 1506, 1811, 658, + /* 2110 */ 1010, 258, 662, 1481, 1278, 666, 266, 665, 1811, 1481, + /* 2120 */ 1481, 1481, 1481, 1481, 1829, 1481, 1481, 1481, 1481, 1481, + /* 2130 */ 1481, 1481, 574, 1481, 1481, 1481, 1829, 1781, 1481, 573, + /* 2140 */ 1481, 1481, 1481, 1481, 574, 1481, 1829, 1481, 1481, 1781, + /* 2150 */ 1481, 573, 1481, 1481, 574, 1481, 1481, 1481, 1481, 1781, + /* 2160 */ 1481, 573, 1843, 1481, 1481, 1481, 303, 1812, 577, 1814, + /* 2170 */ 1815, 572, 1481, 567, 1843, 1481, 1481, 1481, 300, 1812, + /* 2180 */ 577, 1814, 1815, 572, 1843, 567, 1481, 1481, 279, 1812, + /* 2190 */ 577, 1814, 1815, 572, 1481, 567, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 316, 312, 318, 319, 316, 351, 318, 319, 354, 355, - /* 10 */ 8, 9, 12, 13, 12, 13, 14, 15, 16, 342, - /* 20 */ 20, 320, 22, 342, 12, 13, 14, 15, 16, 340, - /* 30 */ 353, 340, 331, 33, 353, 35, 0, 348, 347, 338, - /* 40 */ 393, 394, 353, 0, 355, 320, 311, 356, 313, 348, - /* 50 */ 20, 312, 22, 342, 377, 378, 56, 368, 377, 378, - /* 60 */ 379, 61, 354, 355, 353, 35, 389, 378, 68, 0, - /* 70 */ 389, 382, 383, 384, 385, 386, 387, 0, 389, 340, - /* 80 */ 50, 392, 357, 47, 342, 396, 397, 348, 377, 378, - /* 90 */ 379, 48, 353, 93, 355, 353, 94, 408, 21, 408, - /* 100 */ 389, 24, 25, 26, 27, 28, 29, 30, 31, 32, - /* 110 */ 421, 340, 421, 20, 425, 115, 425, 378, 347, 377, - /* 120 */ 378, 382, 383, 384, 385, 386, 387, 356, 389, 129, - /* 130 */ 130, 389, 63, 64, 65, 66, 67, 0, 69, 70, + /* 0 */ 316, 0, 318, 319, 312, 316, 342, 318, 319, 355, + /* 10 */ 393, 394, 12, 13, 386, 341, 362, 353, 4, 365, + /* 20 */ 20, 311, 22, 313, 312, 12, 13, 14, 15, 16, + /* 30 */ 20, 332, 340, 33, 351, 35, 408, 354, 355, 340, + /* 40 */ 348, 377, 378, 379, 324, 353, 320, 355, 349, 421, + /* 50 */ 422, 386, 340, 389, 426, 427, 56, 337, 44, 45, + /* 60 */ 348, 61, 354, 355, 322, 353, 346, 355, 68, 0, + /* 70 */ 378, 20, 340, 408, 382, 383, 384, 385, 386, 387, + /* 80 */ 348, 389, 325, 357, 392, 343, 329, 422, 396, 397, + /* 90 */ 378, 426, 427, 93, 382, 383, 384, 385, 386, 387, + /* 100 */ 408, 389, 355, 93, 392, 14, 78, 380, 396, 397, + /* 110 */ 20, 20, 365, 421, 422, 115, 384, 21, 426, 427, + /* 120 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 129, + /* 130 */ 130, 404, 63, 64, 65, 66, 67, 20, 69, 70, /* 140 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, /* 150 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 160 */ 14, 15, 16, 8, 9, 426, 427, 12, 13, 14, - /* 170 */ 15, 16, 20, 20, 20, 175, 20, 177, 106, 107, - /* 180 */ 108, 109, 110, 111, 112, 113, 114, 115, 116, 93, - /* 190 */ 118, 119, 120, 121, 122, 123, 60, 60, 198, 199, - /* 200 */ 320, 201, 202, 203, 204, 205, 206, 207, 208, 209, + /* 160 */ 2, 133, 134, 339, 33, 0, 8, 9, 326, 327, + /* 170 */ 12, 13, 14, 15, 16, 175, 352, 177, 47, 317, + /* 180 */ 129, 130, 320, 52, 53, 54, 55, 56, 93, 24, + /* 190 */ 25, 26, 27, 28, 29, 30, 31, 32, 198, 199, + /* 200 */ 93, 201, 202, 203, 204, 205, 206, 207, 208, 209, /* 210 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 12, - /* 220 */ 13, 14, 129, 130, 20, 340, 21, 20, 348, 22, - /* 230 */ 8, 9, 232, 348, 12, 13, 14, 15, 16, 34, - /* 240 */ 33, 36, 35, 64, 65, 93, 93, 93, 368, 21, - /* 250 */ 71, 368, 24, 25, 26, 27, 28, 29, 30, 31, - /* 260 */ 32, 82, 83, 56, 4, 43, 386, 88, 61, 384, - /* 270 */ 174, 322, 176, 4, 312, 68, 12, 13, 320, 19, - /* 280 */ 4, 401, 402, 403, 20, 405, 22, 105, 408, 331, - /* 290 */ 312, 408, 343, 33, 39, 332, 338, 33, 312, 35, - /* 300 */ 93, 421, 340, 340, 421, 425, 348, 47, 425, 127, - /* 310 */ 348, 51, 349, 44, 45, 353, 56, 355, 340, 325, - /* 320 */ 56, 408, 115, 329, 317, 61, 348, 320, 232, 198, - /* 330 */ 368, 353, 68, 355, 421, 78, 129, 130, 425, 353, - /* 340 */ 378, 43, 56, 355, 382, 383, 384, 385, 386, 387, - /* 350 */ 362, 389, 92, 365, 392, 95, 378, 93, 396, 397, - /* 360 */ 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - /* 370 */ 408, 0, 241, 242, 243, 244, 245, 124, 92, 115, - /* 380 */ 340, 95, 175, 421, 177, 232, 232, 425, 312, 349, - /* 390 */ 133, 134, 94, 129, 130, 24, 25, 26, 27, 28, - /* 400 */ 29, 30, 31, 32, 93, 198, 199, 35, 201, 202, + /* 220 */ 13, 14, 93, 92, 326, 327, 95, 20, 320, 22, + /* 230 */ 8, 9, 232, 312, 12, 13, 14, 15, 16, 331, + /* 240 */ 33, 60, 35, 124, 312, 106, 107, 108, 109, 110, + /* 250 */ 111, 112, 113, 114, 115, 116, 348, 118, 119, 120, + /* 260 */ 121, 122, 123, 56, 39, 43, 340, 320, 61, 174, + /* 270 */ 320, 176, 340, 347, 353, 68, 12, 13, 331, 162, + /* 280 */ 348, 331, 356, 20, 20, 353, 22, 355, 338, 158, + /* 290 */ 159, 324, 161, 202, 4, 348, 165, 33, 348, 35, + /* 300 */ 93, 8, 9, 184, 185, 12, 13, 14, 15, 16, + /* 310 */ 378, 0, 181, 346, 382, 383, 384, 385, 386, 387, + /* 320 */ 56, 389, 115, 20, 392, 61, 105, 232, 396, 397, + /* 330 */ 398, 322, 68, 12, 13, 60, 129, 130, 0, 232, + /* 340 */ 342, 125, 410, 22, 335, 124, 125, 126, 127, 128, + /* 350 */ 418, 353, 343, 20, 33, 20, 35, 93, 104, 21, + /* 360 */ 312, 232, 24, 25, 26, 27, 28, 29, 30, 31, + /* 370 */ 32, 60, 340, 64, 65, 377, 378, 56, 332, 115, + /* 380 */ 71, 349, 175, 93, 177, 157, 340, 389, 340, 68, + /* 390 */ 56, 82, 83, 129, 130, 349, 348, 88, 182, 183, + /* 400 */ 20, 353, 186, 355, 20, 198, 199, 198, 201, 202, /* 410 */ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - /* 420 */ 213, 214, 215, 216, 217, 218, 8, 9, 340, 353, - /* 430 */ 12, 13, 14, 15, 16, 347, 2, 184, 185, 175, - /* 440 */ 68, 177, 8, 9, 356, 2, 12, 13, 14, 15, - /* 450 */ 16, 8, 9, 56, 43, 12, 13, 14, 15, 16, - /* 460 */ 312, 37, 198, 199, 160, 201, 202, 203, 204, 205, + /* 420 */ 213, 214, 215, 216, 217, 218, 378, 93, 93, 95, + /* 430 */ 382, 383, 384, 385, 386, 387, 115, 389, 0, 175, + /* 440 */ 392, 177, 340, 340, 396, 397, 398, 219, 312, 347, + /* 450 */ 241, 242, 243, 244, 245, 407, 231, 229, 356, 356, + /* 460 */ 167, 312, 198, 199, 56, 201, 202, 203, 204, 205, /* 470 */ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - /* 480 */ 216, 217, 218, 12, 13, 18, 231, 20, 340, 320, - /* 490 */ 93, 20, 95, 22, 27, 125, 348, 30, 124, 125, - /* 500 */ 331, 353, 408, 355, 33, 20, 35, 14, 368, 233, - /* 510 */ 368, 408, 94, 20, 47, 421, 49, 348, 51, 425, - /* 520 */ 96, 93, 98, 99, 421, 101, 378, 56, 425, 105, - /* 530 */ 382, 383, 384, 385, 386, 387, 348, 389, 20, 68, - /* 540 */ 392, 237, 238, 232, 396, 397, 398, 359, 408, 22, - /* 550 */ 408, 127, 182, 183, 19, 4, 186, 183, 410, 92, - /* 560 */ 186, 421, 35, 421, 93, 425, 418, 425, 33, 320, - /* 570 */ 20, 104, 339, 8, 9, 332, 332, 12, 13, 14, - /* 580 */ 15, 16, 47, 340, 340, 352, 115, 52, 53, 54, - /* 590 */ 55, 56, 349, 349, 309, 68, 20, 348, 22, 132, + /* 480 */ 216, 217, 218, 12, 13, 18, 48, 20, 386, 353, + /* 490 */ 368, 20, 20, 22, 27, 162, 175, 30, 177, 4, + /* 500 */ 92, 160, 353, 95, 33, 312, 35, 14, 386, 317, + /* 510 */ 408, 68, 320, 20, 47, 342, 49, 312, 51, 198, + /* 520 */ 199, 309, 232, 421, 422, 22, 353, 56, 426, 427, + /* 530 */ 408, 210, 211, 212, 213, 214, 215, 216, 35, 68, + /* 540 */ 0, 386, 20, 421, 422, 340, 353, 254, 426, 427, + /* 550 */ 377, 378, 379, 348, 20, 20, 22, 22, 353, 92, + /* 560 */ 355, 341, 389, 408, 93, 93, 232, 232, 8, 9, + /* 570 */ 35, 104, 12, 13, 14, 15, 16, 422, 237, 238, + /* 580 */ 368, 426, 427, 378, 50, 50, 115, 382, 383, 384, + /* 590 */ 385, 386, 387, 388, 389, 390, 391, 68, 386, 132, /* 600 */ 129, 130, 135, 136, 137, 138, 139, 140, 141, 142, /* 610 */ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - /* 620 */ 312, 154, 155, 156, 60, 14, 50, 92, 14, 232, - /* 630 */ 95, 20, 8, 9, 20, 386, 12, 13, 14, 15, - /* 640 */ 16, 20, 115, 157, 93, 105, 175, 162, 177, 400, - /* 650 */ 401, 402, 403, 368, 405, 368, 1, 2, 326, 327, - /* 660 */ 232, 353, 251, 128, 124, 125, 126, 127, 128, 198, - /* 670 */ 199, 0, 201, 202, 203, 204, 205, 206, 207, 208, + /* 620 */ 408, 154, 155, 156, 8, 9, 341, 320, 12, 13, + /* 630 */ 14, 15, 16, 421, 422, 320, 8, 9, 426, 427, + /* 640 */ 12, 13, 14, 15, 16, 105, 175, 380, 177, 14, + /* 650 */ 15, 16, 8, 9, 94, 348, 12, 13, 14, 15, + /* 660 */ 16, 1, 2, 348, 124, 125, 126, 127, 128, 198, + /* 670 */ 199, 404, 201, 202, 203, 204, 205, 206, 207, 208, /* 680 */ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - /* 690 */ 12, 13, 14, 408, 68, 408, 161, 368, 20, 170, - /* 700 */ 22, 324, 175, 232, 177, 219, 421, 324, 421, 322, - /* 710 */ 425, 33, 425, 35, 179, 229, 181, 312, 189, 190, - /* 720 */ 337, 0, 335, 346, 312, 198, 199, 348, 312, 346, - /* 730 */ 343, 312, 167, 320, 56, 8, 9, 408, 359, 12, - /* 740 */ 13, 14, 15, 16, 331, 320, 68, 12, 13, 94, - /* 750 */ 421, 320, 340, 0, 425, 20, 331, 22, 353, 312, - /* 760 */ 348, 348, 331, 317, 320, 353, 320, 355, 33, 353, - /* 770 */ 35, 93, 353, 348, 320, 326, 327, 355, 320, 348, - /* 780 */ 368, 60, 3, 232, 20, 331, 162, 365, 312, 331, - /* 790 */ 378, 56, 348, 115, 382, 383, 384, 385, 386, 387, - /* 800 */ 353, 389, 348, 68, 12, 13, 348, 129, 130, 104, - /* 810 */ 312, 320, 320, 202, 22, 320, 202, 64, 65, 254, - /* 820 */ 408, 94, 331, 331, 71, 33, 331, 35, 93, 353, - /* 830 */ 386, 320, 312, 421, 312, 82, 83, 425, 68, 348, - /* 840 */ 348, 88, 331, 348, 20, 401, 402, 403, 56, 405, - /* 850 */ 115, 353, 364, 175, 366, 177, 328, 341, 330, 348, - /* 860 */ 68, 93, 8, 9, 129, 130, 12, 13, 14, 15, - /* 870 */ 16, 103, 364, 353, 366, 353, 198, 199, 312, 201, + /* 690 */ 12, 13, 14, 386, 35, 202, 14, 0, 20, 312, + /* 700 */ 22, 386, 20, 232, 232, 43, 4, 400, 401, 402, + /* 710 */ 403, 33, 405, 35, 124, 125, 401, 402, 403, 2, + /* 720 */ 405, 19, 94, 408, 202, 8, 9, 68, 233, 12, + /* 730 */ 13, 14, 15, 16, 56, 33, 421, 422, 94, 312, + /* 740 */ 353, 426, 427, 340, 47, 170, 68, 12, 13, 47, + /* 750 */ 347, 320, 342, 51, 94, 20, 94, 22, 56, 356, + /* 760 */ 0, 320, 331, 353, 189, 190, 3, 340, 33, 338, + /* 770 */ 35, 93, 331, 183, 320, 348, 186, 368, 162, 348, + /* 780 */ 353, 312, 355, 43, 332, 331, 368, 377, 378, 348, + /* 790 */ 320, 56, 340, 115, 92, 386, 0, 95, 341, 389, + /* 800 */ 312, 349, 348, 68, 386, 378, 312, 129, 130, 382, + /* 810 */ 383, 384, 385, 386, 387, 3, 389, 408, 348, 392, + /* 820 */ 60, 341, 353, 396, 397, 398, 408, 380, 93, 313, + /* 830 */ 421, 422, 20, 312, 407, 426, 427, 348, 348, 421, + /* 840 */ 422, 353, 44, 45, 426, 427, 21, 353, 359, 359, + /* 850 */ 115, 404, 341, 175, 350, 177, 386, 353, 341, 34, + /* 860 */ 368, 36, 8, 9, 129, 130, 12, 13, 14, 15, + /* 870 */ 16, 401, 402, 403, 353, 405, 198, 199, 386, 201, /* 880 */ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - /* 890 */ 212, 213, 214, 215, 216, 217, 218, 320, 320, 320, - /* 900 */ 320, 97, 320, 320, 100, 380, 372, 115, 331, 331, - /* 910 */ 175, 331, 177, 331, 331, 61, 341, 312, 350, 353, - /* 920 */ 312, 353, 312, 44, 45, 348, 348, 348, 348, 404, - /* 930 */ 348, 348, 312, 198, 199, 312, 201, 202, 203, 204, + /* 890 */ 212, 213, 214, 215, 216, 217, 218, 320, 8, 9, + /* 900 */ 408, 105, 12, 13, 14, 15, 16, 162, 163, 364, + /* 910 */ 175, 366, 177, 421, 422, 61, 372, 312, 426, 427, + /* 920 */ 124, 125, 126, 127, 128, 348, 37, 430, 350, 312, + /* 930 */ 312, 353, 312, 198, 199, 312, 201, 202, 203, 204, /* 940 */ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - /* 950 */ 215, 216, 217, 218, 12, 13, 102, 320, 353, 320, - /* 960 */ 341, 353, 20, 353, 22, 386, 202, 175, 331, 177, - /* 970 */ 331, 230, 231, 353, 33, 33, 353, 35, 312, 312, - /* 980 */ 401, 402, 403, 0, 405, 348, 162, 348, 47, 312, - /* 990 */ 198, 199, 380, 52, 53, 54, 55, 56, 56, 340, - /* 1000 */ 42, 43, 210, 211, 212, 213, 214, 215, 216, 0, - /* 1010 */ 68, 157, 320, 320, 22, 356, 404, 340, 350, 353, - /* 1020 */ 353, 353, 345, 331, 331, 348, 380, 35, 249, 18, - /* 1030 */ 353, 43, 355, 92, 23, 93, 95, 61, 8, 9, - /* 1040 */ 348, 348, 12, 13, 14, 15, 16, 43, 37, 38, - /* 1050 */ 404, 333, 41, 97, 336, 378, 100, 115, 56, 382, - /* 1060 */ 383, 384, 385, 386, 387, 43, 389, 43, 57, 58, + /* 950 */ 215, 216, 217, 218, 12, 13, 102, 340, 353, 364, + /* 960 */ 35, 366, 20, 386, 22, 348, 312, 328, 368, 330, + /* 970 */ 353, 353, 355, 353, 162, 33, 353, 35, 401, 402, + /* 980 */ 403, 333, 405, 105, 336, 96, 386, 98, 99, 312, + /* 990 */ 101, 251, 312, 61, 105, 378, 312, 35, 56, 382, + /* 1000 */ 383, 384, 385, 386, 387, 127, 389, 353, 408, 392, + /* 1010 */ 68, 157, 249, 396, 397, 398, 127, 340, 230, 231, + /* 1020 */ 97, 421, 422, 100, 407, 348, 426, 427, 0, 18, + /* 1030 */ 353, 43, 355, 353, 23, 93, 0, 353, 8, 9, + /* 1040 */ 22, 329, 12, 13, 14, 15, 16, 321, 37, 38, + /* 1050 */ 42, 43, 41, 35, 340, 378, 320, 115, 22, 382, + /* 1060 */ 383, 384, 385, 386, 387, 0, 389, 331, 57, 58, /* 1070 */ 59, 129, 130, 219, 220, 221, 222, 223, 224, 225, - /* 1080 */ 226, 227, 228, 229, 97, 35, 97, 100, 105, 100, - /* 1090 */ 0, 61, 162, 163, 1, 2, 35, 95, 94, 158, - /* 1100 */ 159, 0, 161, 0, 93, 329, 165, 124, 125, 126, - /* 1110 */ 127, 128, 22, 43, 105, 43, 94, 175, 94, 177, - /* 1120 */ 43, 43, 181, 22, 94, 22, 129, 130, 46, 341, - /* 1130 */ 43, 43, 102, 124, 125, 126, 127, 128, 43, 43, + /* 1080 */ 226, 227, 228, 229, 348, 0, 68, 22, 312, 35, + /* 1090 */ 320, 61, 64, 65, 312, 312, 415, 320, 320, 71, + /* 1100 */ 97, 331, 177, 100, 93, 428, 429, 22, 331, 331, + /* 1110 */ 82, 83, 97, 1, 2, 100, 88, 175, 348, 177, + /* 1120 */ 419, 312, 68, 340, 94, 348, 348, 321, 345, 353, + /* 1130 */ 198, 348, 102, 115, 56, 353, 353, 43, 355, 177, /* 1140 */ 198, 199, 131, 201, 202, 203, 204, 205, 206, 207, /* 1150 */ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - /* 1160 */ 218, 43, 43, 43, 94, 43, 94, 35, 341, 13, - /* 1170 */ 13, 94, 94, 341, 198, 93, 341, 313, 167, 168, - /* 1180 */ 169, 94, 94, 172, 428, 419, 321, 157, 415, 94, - /* 1190 */ 94, 35, 35, 340, 312, 321, 319, 352, 381, 188, - /* 1200 */ 68, 406, 191, 422, 193, 194, 195, 196, 197, 399, - /* 1210 */ 409, 422, 94, 94, 94, 422, 94, 376, 234, 47, - /* 1220 */ 173, 375, 340, 42, 20, 370, 360, 177, 320, 320, - /* 1230 */ 348, 360, 157, 358, 358, 353, 320, 355, 177, 320, - /* 1240 */ 320, 253, 20, 232, 20, 314, 314, 312, 324, 219, + /* 1160 */ 218, 378, 353, 129, 130, 382, 383, 384, 385, 386, + /* 1170 */ 387, 97, 389, 95, 100, 43, 43, 46, 167, 168, + /* 1180 */ 169, 320, 43, 172, 352, 320, 320, 157, 94, 381, + /* 1190 */ 320, 43, 331, 175, 312, 177, 331, 331, 319, 188, + /* 1200 */ 320, 331, 191, 406, 193, 194, 195, 196, 197, 348, + /* 1210 */ 13, 331, 320, 348, 348, 399, 198, 199, 348, 93, + /* 1220 */ 320, 234, 340, 331, 93, 43, 94, 94, 348, 103, + /* 1230 */ 348, 331, 35, 94, 320, 353, 43, 355, 423, 409, + /* 1240 */ 348, 253, 94, 232, 43, 331, 47, 312, 348, 219, /* 1250 */ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - /* 1260 */ 378, 374, 355, 324, 382, 383, 384, 385, 386, 387, - /* 1270 */ 20, 389, 367, 20, 392, 340, 324, 367, 396, 397, - /* 1280 */ 398, 369, 314, 348, 324, 324, 324, 312, 353, 320, - /* 1290 */ 355, 324, 374, 340, 340, 340, 314, 340, 320, 340, - /* 1300 */ 418, 353, 322, 340, 340, 340, 340, 180, 322, 373, - /* 1310 */ 340, 312, 340, 378, 320, 340, 320, 382, 383, 384, - /* 1320 */ 385, 386, 387, 348, 389, 322, 355, 392, 353, 159, - /* 1330 */ 355, 396, 397, 398, 353, 322, 239, 363, 353, 340, - /* 1340 */ 367, 322, 407, 353, 353, 20, 336, 348, 353, 348, - /* 1350 */ 240, 312, 353, 378, 355, 246, 363, 382, 383, 384, - /* 1360 */ 385, 386, 387, 414, 389, 353, 361, 353, 353, 363, - /* 1370 */ 363, 353, 166, 353, 248, 247, 235, 378, 231, 340, - /* 1380 */ 348, 382, 383, 384, 385, 386, 387, 348, 389, 381, - /* 1390 */ 413, 392, 353, 414, 355, 396, 397, 398, 252, 20, - /* 1400 */ 250, 376, 93, 255, 312, 93, 407, 380, 344, 353, - /* 1410 */ 330, 320, 36, 371, 315, 417, 416, 378, 314, 366, - /* 1420 */ 322, 382, 383, 384, 385, 386, 387, 310, 389, 412, - /* 1430 */ 414, 392, 340, 395, 411, 396, 397, 398, 323, 334, - /* 1440 */ 348, 334, 334, 0, 423, 353, 407, 355, 0, 0, - /* 1450 */ 424, 182, 0, 424, 312, 424, 423, 429, 423, 42, - /* 1460 */ 368, 0, 35, 192, 35, 35, 35, 192, 0, 35, - /* 1470 */ 378, 312, 35, 192, 382, 383, 384, 385, 386, 387, - /* 1480 */ 0, 389, 340, 192, 0, 35, 0, 22, 0, 35, - /* 1490 */ 348, 177, 175, 0, 0, 353, 170, 355, 171, 340, - /* 1500 */ 408, 0, 0, 46, 0, 0, 0, 348, 42, 0, - /* 1510 */ 0, 0, 353, 421, 355, 153, 0, 425, 0, 0, - /* 1520 */ 378, 312, 148, 0, 382, 383, 384, 385, 386, 387, - /* 1530 */ 0, 389, 0, 35, 392, 148, 0, 378, 396, 397, - /* 1540 */ 0, 382, 383, 384, 385, 386, 387, 0, 389, 340, - /* 1550 */ 0, 392, 0, 0, 0, 396, 397, 348, 0, 0, - /* 1560 */ 0, 0, 353, 0, 355, 0, 0, 42, 0, 312, - /* 1570 */ 0, 0, 0, 0, 0, 0, 0, 22, 0, 312, - /* 1580 */ 56, 0, 56, 0, 0, 42, 40, 378, 0, 0, - /* 1590 */ 39, 382, 383, 384, 385, 386, 387, 340, 389, 43, - /* 1600 */ 14, 392, 345, 46, 14, 348, 397, 340, 46, 0, - /* 1610 */ 353, 0, 355, 0, 0, 348, 39, 166, 39, 0, - /* 1620 */ 353, 0, 355, 0, 0, 0, 62, 0, 35, 47, - /* 1630 */ 312, 35, 47, 39, 39, 378, 0, 35, 47, 382, - /* 1640 */ 383, 384, 385, 386, 387, 378, 389, 39, 0, 382, - /* 1650 */ 383, 384, 385, 386, 387, 35, 389, 47, 340, 22, - /* 1660 */ 0, 39, 0, 0, 0, 0, 348, 35, 35, 102, - /* 1670 */ 35, 353, 43, 355, 43, 35, 35, 22, 0, 22, - /* 1680 */ 0, 0, 35, 22, 0, 35, 0, 420, 49, 22, - /* 1690 */ 312, 35, 0, 22, 20, 0, 378, 100, 0, 162, - /* 1700 */ 382, 383, 384, 385, 386, 387, 178, 389, 312, 22, - /* 1710 */ 35, 162, 0, 0, 0, 0, 0, 35, 340, 93, - /* 1720 */ 187, 0, 94, 93, 0, 46, 348, 93, 159, 39, - /* 1730 */ 230, 353, 43, 355, 43, 93, 340, 93, 93, 236, - /* 1740 */ 94, 345, 43, 94, 348, 427, 103, 160, 94, 353, - /* 1750 */ 46, 355, 94, 46, 43, 35, 378, 158, 312, 93, - /* 1760 */ 382, 383, 384, 385, 386, 387, 162, 389, 46, 391, - /* 1770 */ 164, 94, 43, 46, 378, 236, 93, 46, 382, 383, - /* 1780 */ 384, 385, 386, 387, 312, 389, 340, 93, 43, 93, - /* 1790 */ 93, 345, 35, 35, 348, 94, 94, 94, 35, 353, - /* 1800 */ 94, 355, 35, 35, 2, 22, 46, 43, 312, 22, - /* 1810 */ 198, 93, 340, 35, 104, 46, 200, 94, 93, 93, - /* 1820 */ 348, 35, 94, 93, 378, 353, 94, 355, 382, 383, - /* 1830 */ 384, 385, 386, 387, 312, 389, 340, 236, 94, 93, - /* 1840 */ 93, 93, 35, 94, 348, 93, 35, 94, 93, 353, - /* 1850 */ 378, 355, 35, 35, 382, 383, 384, 385, 386, 387, - /* 1860 */ 94, 389, 340, 93, 22, 94, 93, 117, 117, 93, - /* 1870 */ 348, 117, 35, 117, 378, 353, 43, 355, 382, 383, - /* 1880 */ 384, 385, 386, 387, 105, 389, 93, 93, 22, 62, - /* 1890 */ 61, 35, 312, 35, 35, 35, 35, 35, 35, 35, - /* 1900 */ 378, 91, 35, 35, 382, 383, 384, 385, 386, 387, - /* 1910 */ 312, 389, 320, 68, 43, 35, 35, 22, 35, 22, - /* 1920 */ 340, 35, 35, 35, 35, 68, 35, 35, 348, 35, - /* 1930 */ 22, 35, 0, 353, 35, 355, 35, 47, 340, 39, - /* 1940 */ 348, 0, 35, 39, 0, 47, 348, 35, 39, 47, - /* 1950 */ 0, 353, 35, 355, 39, 0, 0, 47, 378, 35, - /* 1960 */ 368, 35, 382, 383, 384, 385, 386, 387, 22, 389, - /* 1970 */ 21, 312, 430, 22, 22, 21, 378, 20, 386, 430, - /* 1980 */ 382, 383, 384, 385, 386, 387, 430, 389, 430, 430, - /* 1990 */ 430, 430, 430, 401, 402, 403, 430, 405, 430, 340, - /* 2000 */ 408, 430, 430, 430, 430, 430, 430, 348, 430, 430, - /* 2010 */ 430, 430, 353, 421, 355, 430, 430, 425, 430, 430, - /* 2020 */ 430, 312, 430, 430, 430, 430, 430, 430, 430, 430, - /* 2030 */ 430, 312, 430, 430, 430, 430, 430, 378, 430, 430, - /* 2040 */ 430, 382, 383, 384, 385, 386, 387, 430, 389, 340, - /* 2050 */ 430, 430, 430, 430, 430, 430, 430, 348, 430, 340, - /* 2060 */ 430, 430, 353, 430, 355, 430, 430, 348, 430, 430, - /* 2070 */ 430, 312, 353, 430, 355, 430, 430, 430, 430, 430, - /* 2080 */ 430, 430, 430, 430, 430, 430, 430, 378, 430, 430, - /* 2090 */ 430, 382, 383, 384, 385, 386, 387, 378, 389, 340, - /* 2100 */ 430, 382, 383, 384, 385, 386, 387, 348, 389, 430, - /* 2110 */ 430, 430, 353, 430, 355, 430, 430, 430, 430, 430, - /* 2120 */ 430, 312, 430, 430, 430, 430, 430, 430, 430, 430, - /* 2130 */ 430, 430, 430, 312, 430, 430, 430, 378, 430, 430, - /* 2140 */ 430, 382, 383, 384, 385, 386, 387, 312, 389, 340, - /* 2150 */ 430, 430, 430, 430, 430, 430, 430, 348, 430, 430, - /* 2160 */ 430, 340, 353, 430, 355, 430, 430, 430, 430, 348, - /* 2170 */ 430, 430, 430, 430, 353, 340, 355, 430, 430, 430, - /* 2180 */ 430, 430, 430, 348, 430, 430, 430, 378, 353, 430, - /* 2190 */ 355, 382, 383, 384, 385, 386, 387, 430, 389, 378, - /* 2200 */ 430, 430, 430, 382, 383, 384, 385, 386, 387, 430, - /* 2210 */ 389, 430, 430, 378, 430, 430, 430, 382, 383, 384, - /* 2220 */ 385, 386, 387, 312, 389, 430, 430, 430, 430, 430, - /* 2230 */ 430, 430, 430, 312, 430, 430, 430, 430, 430, 430, - /* 2240 */ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - /* 2250 */ 430, 340, 430, 430, 430, 430, 430, 430, 430, 348, - /* 2260 */ 430, 340, 430, 430, 353, 430, 355, 430, 430, 348, - /* 2270 */ 430, 430, 430, 430, 353, 430, 355, 430, 430, 430, - /* 2280 */ 430, 430, 430, 430, 312, 430, 430, 430, 430, 378, - /* 2290 */ 430, 430, 430, 382, 383, 384, 385, 386, 387, 378, - /* 2300 */ 389, 430, 430, 382, 383, 384, 385, 386, 387, 430, - /* 2310 */ 389, 430, 340, 430, 430, 430, 430, 430, 430, 430, - /* 2320 */ 348, 430, 430, 430, 430, 353, 430, 355, 430, 430, - /* 2330 */ 430, 430, 430, 430, 312, 430, 430, 430, 430, 430, - /* 2340 */ 430, 430, 430, 430, 312, 430, 430, 430, 430, 430, - /* 2350 */ 378, 430, 430, 430, 382, 383, 384, 385, 386, 387, - /* 2360 */ 430, 389, 340, 430, 430, 430, 430, 430, 430, 430, - /* 2370 */ 348, 430, 340, 430, 430, 353, 430, 355, 430, 430, - /* 2380 */ 348, 430, 430, 430, 312, 353, 430, 355, 430, 430, - /* 2390 */ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - /* 2400 */ 378, 430, 430, 430, 382, 383, 384, 385, 386, 387, - /* 2410 */ 378, 389, 340, 430, 382, 383, 384, 385, 386, 387, - /* 2420 */ 348, 389, 430, 430, 430, 353, 430, 355, 430, 430, - /* 2430 */ 430, 430, 430, 430, 312, 430, 430, 430, 430, 430, - /* 2440 */ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - /* 2450 */ 378, 430, 430, 430, 382, 383, 384, 385, 386, 387, - /* 2460 */ 430, 389, 340, 430, 430, 430, 430, 430, 430, 430, - /* 2470 */ 348, 430, 430, 430, 430, 353, 430, 355, 430, 430, - /* 2480 */ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - /* 2490 */ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - /* 2500 */ 378, 430, 430, 430, 382, 383, 384, 385, 386, 387, - /* 2510 */ 430, 389, + /* 1260 */ 378, 312, 348, 376, 382, 383, 384, 385, 386, 387, + /* 1270 */ 320, 389, 43, 320, 392, 340, 94, 43, 396, 397, + /* 1280 */ 398, 331, 375, 348, 331, 13, 173, 94, 353, 340, + /* 1290 */ 355, 43, 370, 43, 360, 94, 42, 348, 348, 43, + /* 1300 */ 418, 348, 353, 20, 355, 320, 320, 35, 43, 43, + /* 1310 */ 157, 312, 360, 378, 358, 358, 320, 382, 383, 384, + /* 1320 */ 385, 386, 387, 94, 389, 320, 320, 378, 94, 20, + /* 1330 */ 314, 382, 383, 384, 385, 386, 387, 312, 389, 340, + /* 1340 */ 314, 392, 94, 408, 94, 396, 397, 348, 20, 374, + /* 1350 */ 94, 312, 353, 324, 355, 355, 421, 422, 367, 94, + /* 1360 */ 94, 426, 427, 20, 324, 340, 20, 369, 324, 367, + /* 1370 */ 345, 324, 324, 348, 324, 320, 324, 378, 353, 340, + /* 1380 */ 355, 382, 383, 384, 385, 386, 387, 348, 389, 314, + /* 1390 */ 320, 392, 353, 340, 355, 314, 397, 340, 340, 340, + /* 1400 */ 340, 331, 340, 378, 312, 374, 340, 382, 383, 384, + /* 1410 */ 385, 386, 387, 340, 389, 320, 340, 378, 348, 340, + /* 1420 */ 340, 382, 383, 384, 385, 386, 387, 322, 389, 180, + /* 1430 */ 312, 322, 340, 322, 373, 353, 320, 320, 355, 367, + /* 1440 */ 348, 239, 353, 353, 353, 353, 353, 355, 159, 363, + /* 1450 */ 363, 353, 322, 20, 312, 336, 322, 361, 340, 420, + /* 1460 */ 353, 240, 348, 414, 363, 381, 348, 363, 353, 246, + /* 1470 */ 378, 353, 166, 355, 382, 383, 384, 385, 386, 387, + /* 1480 */ 353, 389, 340, 414, 417, 414, 248, 345, 353, 353, + /* 1490 */ 348, 247, 235, 416, 231, 353, 378, 355, 376, 411, + /* 1500 */ 382, 383, 384, 385, 386, 387, 348, 389, 20, 391, + /* 1510 */ 413, 412, 312, 255, 93, 395, 252, 380, 250, 93, + /* 1520 */ 378, 429, 344, 19, 382, 383, 384, 385, 386, 387, + /* 1530 */ 424, 389, 353, 431, 330, 425, 320, 33, 36, 322, + /* 1540 */ 340, 315, 314, 371, 334, 345, 366, 334, 348, 334, + /* 1550 */ 323, 47, 310, 353, 0, 355, 52, 53, 54, 55, + /* 1560 */ 56, 0, 182, 0, 312, 0, 42, 0, 35, 192, + /* 1570 */ 35, 35, 35, 192, 312, 0, 35, 35, 378, 192, + /* 1580 */ 0, 192, 382, 383, 384, 385, 386, 387, 0, 389, + /* 1590 */ 35, 0, 340, 22, 0, 35, 92, 177, 175, 95, + /* 1600 */ 348, 0, 340, 0, 170, 353, 171, 355, 0, 0, + /* 1610 */ 348, 0, 46, 0, 0, 353, 42, 355, 0, 0, + /* 1620 */ 0, 153, 0, 0, 0, 0, 312, 0, 148, 0, + /* 1630 */ 378, 35, 128, 148, 382, 383, 384, 385, 386, 387, + /* 1640 */ 378, 389, 0, 0, 382, 383, 384, 385, 386, 387, + /* 1650 */ 312, 389, 0, 0, 340, 0, 0, 0, 0, 0, + /* 1660 */ 0, 0, 348, 0, 0, 161, 0, 353, 42, 355, + /* 1670 */ 0, 0, 0, 0, 312, 0, 0, 0, 340, 0, + /* 1680 */ 0, 0, 0, 179, 22, 181, 348, 56, 0, 56, + /* 1690 */ 312, 353, 378, 355, 0, 0, 382, 383, 384, 385, + /* 1700 */ 386, 387, 340, 389, 14, 14, 39, 42, 0, 40, + /* 1710 */ 348, 43, 0, 39, 0, 353, 378, 355, 340, 0, + /* 1720 */ 382, 383, 384, 385, 386, 387, 348, 389, 39, 46, + /* 1730 */ 312, 353, 46, 355, 166, 0, 0, 0, 0, 0, + /* 1740 */ 378, 35, 39, 47, 382, 383, 384, 385, 386, 387, + /* 1750 */ 0, 389, 35, 0, 47, 62, 378, 39, 340, 35, + /* 1760 */ 382, 383, 384, 385, 386, 387, 348, 389, 47, 39, + /* 1770 */ 0, 353, 47, 355, 0, 35, 0, 0, 0, 35, + /* 1780 */ 39, 22, 0, 312, 35, 100, 102, 35, 43, 43, + /* 1790 */ 35, 35, 0, 22, 22, 312, 378, 0, 0, 35, + /* 1800 */ 382, 383, 384, 385, 386, 387, 49, 389, 22, 312, + /* 1810 */ 22, 340, 0, 0, 35, 35, 0, 22, 0, 348, + /* 1820 */ 20, 0, 35, 340, 353, 178, 355, 22, 0, 0, + /* 1830 */ 3, 348, 0, 0, 0, 93, 353, 340, 355, 35, + /* 1840 */ 162, 94, 0, 0, 93, 348, 159, 93, 39, 378, + /* 1850 */ 353, 93, 355, 382, 383, 384, 385, 386, 387, 162, + /* 1860 */ 389, 378, 162, 164, 312, 382, 383, 384, 385, 386, + /* 1870 */ 387, 160, 389, 158, 236, 378, 103, 46, 43, 382, + /* 1880 */ 383, 384, 385, 386, 387, 187, 389, 93, 43, 43, + /* 1890 */ 46, 43, 340, 94, 93, 46, 94, 94, 46, 43, + /* 1900 */ 348, 93, 3, 46, 94, 353, 46, 355, 93, 43, + /* 1910 */ 93, 35, 312, 93, 35, 35, 94, 93, 35, 94, + /* 1920 */ 94, 35, 35, 2, 94, 22, 198, 43, 312, 93, + /* 1930 */ 378, 230, 94, 93, 382, 383, 384, 385, 386, 387, + /* 1940 */ 340, 389, 46, 46, 94, 236, 236, 93, 348, 94, + /* 1950 */ 22, 93, 312, 353, 93, 355, 340, 93, 35, 94, + /* 1960 */ 200, 35, 93, 104, 348, 94, 35, 93, 35, 353, + /* 1970 */ 93, 355, 94, 35, 35, 94, 94, 22, 378, 117, + /* 1980 */ 340, 93, 382, 383, 384, 385, 386, 387, 348, 389, + /* 1990 */ 117, 93, 117, 353, 378, 355, 105, 93, 382, 383, + /* 2000 */ 384, 385, 386, 387, 312, 389, 117, 93, 35, 93, + /* 2010 */ 43, 22, 62, 61, 312, 35, 35, 35, 378, 35, + /* 2020 */ 35, 35, 382, 383, 384, 385, 386, 387, 312, 389, + /* 2030 */ 35, 35, 340, 35, 35, 91, 68, 43, 35, 35, + /* 2040 */ 348, 22, 340, 35, 22, 353, 35, 355, 35, 35, + /* 2050 */ 348, 68, 35, 35, 22, 353, 340, 355, 35, 35, + /* 2060 */ 35, 35, 0, 35, 348, 0, 39, 47, 35, 353, + /* 2070 */ 378, 355, 0, 39, 382, 383, 384, 385, 386, 387, + /* 2080 */ 378, 389, 47, 35, 382, 383, 384, 385, 386, 387, + /* 2090 */ 47, 389, 39, 0, 378, 35, 312, 47, 382, 383, + /* 2100 */ 384, 385, 386, 387, 0, 389, 39, 0, 312, 35, + /* 2110 */ 35, 22, 21, 432, 22, 20, 22, 21, 312, 432, + /* 2120 */ 432, 432, 432, 432, 340, 432, 432, 432, 432, 432, + /* 2130 */ 432, 432, 348, 432, 432, 432, 340, 353, 432, 355, + /* 2140 */ 432, 432, 432, 432, 348, 432, 340, 432, 432, 353, + /* 2150 */ 432, 355, 432, 432, 348, 432, 432, 432, 432, 353, + /* 2160 */ 432, 355, 378, 432, 432, 432, 382, 383, 384, 385, + /* 2170 */ 386, 387, 432, 389, 378, 432, 432, 432, 382, 383, + /* 2180 */ 384, 385, 386, 387, 378, 389, 432, 432, 382, 383, + /* 2190 */ 384, 385, 386, 387, 432, 389, 432, 432, 432, 432, + /* 2200 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2210 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2220 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2230 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2240 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2250 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2260 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2270 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2280 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2290 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2300 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2310 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2320 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2330 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2340 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2350 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2360 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2370 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2380 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2390 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2400 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2410 */ 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + /* 2420 */ 432, 432, 432, 432, 432, 432, 432, }; -#define YY_SHIFT_COUNT (674) +#define YY_SHIFT_COUNT (667) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (1957) +#define YY_SHIFT_MAX (2107) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 1011, 0, 0, 207, 207, 264, 264, 264, 471, 471, - /* 10 */ 264, 264, 678, 735, 942, 735, 735, 735, 735, 735, + /* 0 */ 1011, 0, 207, 207, 264, 264, 264, 471, 264, 264, + /* 10 */ 678, 735, 942, 735, 735, 735, 735, 735, 735, 735, /* 20 */ 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, /* 30 */ 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, - /* 40 */ 735, 735, 153, 153, 152, 152, 152, 792, 792, 154, - /* 50 */ 792, 792, 96, 397, 311, 428, 311, 156, 156, 269, - /* 60 */ 269, 551, 93, 311, 311, 156, 156, 156, 156, 156, - /* 70 */ 156, 156, 156, 156, 156, 136, 156, 156, 156, 204, - /* 80 */ 156, 156, 518, 156, 156, 518, 550, 156, 518, 518, - /* 90 */ 518, 156, 564, 467, 1030, 854, 854, 228, 527, 527, - /* 100 */ 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, - /* 110 */ 527, 527, 527, 527, 527, 527, 527, 424, 179, 93, - /* 120 */ 493, 493, 137, 372, 721, 485, 485, 485, 372, 621, - /* 130 */ 621, 204, 671, 671, 518, 518, 626, 626, 705, 770, - /* 140 */ 72, 72, 72, 72, 72, 72, 72, 535, 77, 565, - /* 150 */ 753, 131, 30, 304, 611, 614, 576, 879, 182, 824, - /* 160 */ 741, 255, 741, 958, 779, 779, 779, 276, 764, 984, - /* 170 */ 1172, 1047, 1181, 1204, 1204, 1181, 1075, 1075, 1204, 1204, - /* 180 */ 1204, 1222, 1222, 1224, 136, 204, 136, 1250, 1253, 136, - /* 190 */ 1250, 136, 136, 136, 1204, 136, 1222, 518, 518, 518, - /* 200 */ 518, 518, 518, 518, 518, 518, 518, 518, 1204, 1222, - /* 210 */ 626, 1224, 564, 1127, 204, 564, 1204, 1204, 1250, 564, - /* 220 */ 1097, 626, 626, 626, 626, 1097, 626, 1170, 564, 705, - /* 230 */ 564, 621, 1325, 626, 1110, 1097, 626, 626, 1110, 1097, - /* 240 */ 626, 626, 518, 1109, 1206, 1110, 1126, 1128, 1141, 984, - /* 250 */ 1147, 621, 1379, 1146, 1150, 1148, 1146, 1150, 1146, 1150, - /* 260 */ 1309, 1312, 626, 770, 1204, 564, 1376, 1222, 2512, 2512, - /* 270 */ 2512, 2512, 2512, 2512, 2512, 69, 941, 371, 260, 2, - /* 280 */ 222, 418, 434, 443, 624, 727, 983, 155, 155, 155, - /* 290 */ 155, 155, 155, 155, 155, 1009, 540, 12, 12, 370, - /* 300 */ 374, 529, 286, 257, 205, 253, 655, 486, 146, 146, - /* 310 */ 146, 146, 298, 36, 992, 804, 956, 987, 989, 1090, - /* 320 */ 1101, 1103, 1002, 930, 1004, 1022, 1024, 1070, 1072, 1077, - /* 330 */ 1078, 1093, 997, 411, 988, 1087, 1050, 1061, 976, 1088, - /* 340 */ 1082, 1095, 1096, 1118, 1119, 1120, 1122, 768, 1156, 1157, - /* 350 */ 1132, 43, 1443, 1448, 1269, 1449, 1452, 1417, 1461, 1427, - /* 360 */ 1271, 1429, 1430, 1431, 1275, 1468, 1434, 1437, 1281, 1480, - /* 370 */ 1291, 1484, 1450, 1486, 1465, 1488, 1454, 1314, 1317, 1493, - /* 380 */ 1494, 1327, 1326, 1501, 1502, 1457, 1504, 1505, 1506, 1466, - /* 390 */ 1509, 1510, 1511, 1362, 1516, 1518, 1519, 1530, 1532, 1374, - /* 400 */ 1498, 1523, 1387, 1536, 1540, 1547, 1550, 1552, 1553, 1554, - /* 410 */ 1558, 1559, 1560, 1561, 1563, 1565, 1566, 1525, 1568, 1570, - /* 420 */ 1571, 1572, 1573, 1574, 1555, 1575, 1576, 1578, 1588, 1589, - /* 430 */ 1524, 1581, 1526, 1583, 1584, 1543, 1551, 1556, 1586, 1557, - /* 440 */ 1590, 1562, 1609, 1546, 1577, 1611, 1613, 1614, 1579, 1451, - /* 450 */ 1619, 1621, 1623, 1564, 1624, 1625, 1593, 1582, 1594, 1627, - /* 460 */ 1596, 1585, 1595, 1636, 1602, 1591, 1608, 1648, 1620, 1610, - /* 470 */ 1622, 1662, 1663, 1664, 1665, 1567, 1597, 1632, 1637, 1660, - /* 480 */ 1633, 1635, 1629, 1631, 1640, 1641, 1655, 1678, 1657, 1680, - /* 490 */ 1661, 1639, 1681, 1667, 1647, 1684, 1650, 1686, 1656, 1692, - /* 500 */ 1671, 1674, 1695, 1537, 1675, 1698, 1528, 1687, 1549, 1569, - /* 510 */ 1712, 1713, 1604, 1606, 1714, 1715, 1716, 1626, 1628, 1682, - /* 520 */ 1533, 1721, 1630, 1587, 1634, 1724, 1690, 1599, 1642, 1643, - /* 530 */ 1679, 1689, 1503, 1644, 1646, 1645, 1649, 1654, 1666, 1691, - /* 540 */ 1658, 1683, 1694, 1696, 1677, 1699, 1704, 1707, 1697, 1711, - /* 550 */ 1539, 1701, 1702, 1722, 1500, 1729, 1727, 1731, 1703, 1745, - /* 560 */ 1601, 1706, 1720, 1757, 1758, 1763, 1767, 1768, 1706, 1802, - /* 570 */ 1783, 1612, 1764, 1718, 1723, 1725, 1728, 1726, 1732, 1760, - /* 580 */ 1730, 1746, 1769, 1787, 1616, 1747, 1710, 1744, 1778, 1786, - /* 590 */ 1748, 1749, 1807, 1752, 1753, 1811, 1755, 1766, 1817, 1770, - /* 600 */ 1771, 1818, 1773, 1750, 1751, 1754, 1756, 1842, 1779, 1776, - /* 610 */ 1793, 1837, 1794, 1833, 1833, 1866, 1827, 1829, 1856, 1858, - /* 620 */ 1859, 1860, 1861, 1862, 1863, 1864, 1867, 1868, 1845, 1810, - /* 630 */ 1871, 1880, 1881, 1895, 1883, 1897, 1886, 1887, 1888, 1857, - /* 640 */ 1629, 1889, 1631, 1891, 1892, 1894, 1896, 1908, 1899, 1932, - /* 650 */ 1901, 1890, 1900, 1941, 1907, 1898, 1904, 1944, 1912, 1902, - /* 660 */ 1909, 1950, 1917, 1910, 1915, 1955, 1924, 1926, 1956, 1946, - /* 670 */ 1949, 1951, 1952, 1954, 1957, + /* 40 */ 335, 472, 10, 95, 334, 107, 129, 107, 10, 10, + /* 50 */ 321, 321, 107, 321, 321, 290, 107, 90, 90, 14, + /* 60 */ 14, 51, 90, 90, 90, 90, 90, 90, 90, 90, + /* 70 */ 90, 90, 181, 90, 90, 90, 263, 90, 90, 303, + /* 80 */ 90, 90, 303, 380, 90, 303, 303, 303, 90, 275, + /* 90 */ 467, 1030, 854, 854, 96, 1018, 1018, 1018, 1018, 1018, + /* 100 */ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, + /* 110 */ 1018, 1018, 1018, 1018, 889, 309, 812, 51, 682, 682, + /* 120 */ 311, 659, 760, 117, 117, 117, 659, 384, 384, 263, + /* 130 */ 1, 1, 303, 303, 443, 443, 254, 529, 139, 139, + /* 140 */ 139, 139, 139, 139, 139, 1504, 338, 293, 1028, 209, + /* 150 */ 535, 341, 91, 493, 534, 798, 878, 333, 788, 225, + /* 160 */ 788, 1008, 763, 495, 522, 987, 1199, 1113, 1254, 1283, + /* 170 */ 1283, 1254, 1153, 1153, 1283, 1283, 1283, 1309, 1309, 1328, + /* 180 */ 181, 263, 181, 1343, 1346, 181, 1343, 181, 181, 181, + /* 190 */ 1283, 181, 1309, 303, 303, 303, 303, 303, 303, 303, + /* 200 */ 303, 303, 303, 303, 1283, 1309, 443, 1328, 275, 1249, + /* 210 */ 263, 275, 1283, 1283, 1343, 275, 1202, 443, 443, 443, + /* 220 */ 443, 1202, 443, 1289, 275, 254, 275, 384, 1433, 443, + /* 230 */ 1221, 1202, 443, 443, 1221, 1202, 443, 443, 303, 1223, + /* 240 */ 1306, 1221, 1238, 1244, 1257, 987, 1263, 384, 1488, 1258, + /* 250 */ 1264, 1268, 1421, 1426, 443, 529, 1283, 275, 1502, 1309, + /* 260 */ 2196, 2196, 2196, 2196, 2196, 2196, 2196, 69, 131, 165, + /* 270 */ 702, 560, 222, 628, 158, 717, 616, 644, 540, 890, + /* 280 */ 890, 890, 890, 890, 890, 890, 890, 796, 221, 13, + /* 290 */ 13, 216, 590, 575, 408, 28, 825, 119, 660, 228, + /* 300 */ 635, 635, 635, 635, 662, 697, 503, 923, 1003, 1015, + /* 310 */ 1074, 1036, 1065, 1085, 1078, 745, 1094, 1132, 1133, 1139, + /* 320 */ 1148, 1182, 1193, 1112, 1034, 740, 988, 1201, 925, 962, + /* 330 */ 932, 1229, 1131, 1234, 1248, 1250, 1256, 1265, 1266, 1126, + /* 340 */ 1197, 1272, 1054, 438, 1554, 1561, 1380, 1563, 1565, 1524, + /* 350 */ 1567, 1533, 1377, 1535, 1536, 1537, 1381, 1575, 1541, 1542, + /* 360 */ 1387, 1580, 1389, 1588, 1555, 1591, 1571, 1594, 1560, 1420, + /* 370 */ 1423, 1601, 1603, 1435, 1434, 1608, 1609, 1566, 1611, 1613, + /* 380 */ 1614, 1574, 1618, 1619, 1620, 1468, 1622, 1623, 1624, 1625, + /* 390 */ 1627, 1480, 1596, 1629, 1485, 1642, 1643, 1652, 1653, 1655, + /* 400 */ 1656, 1657, 1658, 1659, 1660, 1661, 1663, 1664, 1666, 1626, + /* 410 */ 1670, 1671, 1672, 1673, 1675, 1676, 1662, 1677, 1679, 1680, + /* 420 */ 1681, 1682, 1631, 1688, 1633, 1694, 1695, 1665, 1667, 1668, + /* 430 */ 1690, 1683, 1691, 1686, 1708, 1669, 1674, 1712, 1714, 1719, + /* 440 */ 1689, 1568, 1735, 1736, 1737, 1693, 1738, 1739, 1706, 1696, + /* 450 */ 1703, 1750, 1717, 1707, 1718, 1753, 1724, 1721, 1730, 1770, + /* 460 */ 1740, 1725, 1741, 1774, 1776, 1777, 1778, 1684, 1685, 1744, + /* 470 */ 1759, 1782, 1749, 1752, 1745, 1746, 1755, 1756, 1771, 1792, + /* 480 */ 1772, 1797, 1786, 1757, 1798, 1788, 1764, 1812, 1779, 1813, + /* 490 */ 1780, 1816, 1795, 1800, 1818, 1678, 1787, 1821, 1647, 1805, + /* 500 */ 1697, 1687, 1828, 1829, 1700, 1699, 1827, 1832, 1833, 1834, + /* 510 */ 1742, 1747, 1804, 1698, 1842, 1751, 1711, 1754, 1843, 1809, + /* 520 */ 1715, 1758, 1773, 1831, 1835, 1638, 1794, 1799, 1801, 1802, + /* 530 */ 1803, 1808, 1845, 1810, 1815, 1817, 1820, 1822, 1846, 1844, + /* 540 */ 1849, 1824, 1848, 1709, 1825, 1826, 1852, 1701, 1856, 1857, + /* 550 */ 1860, 1830, 1899, 1866, 1710, 1876, 1879, 1880, 1883, 1886, + /* 560 */ 1887, 1921, 1903, 1728, 1884, 1836, 1838, 1840, 1850, 1854, + /* 570 */ 1855, 1896, 1858, 1861, 1897, 1827, 1928, 1760, 1864, 1859, + /* 580 */ 1865, 1923, 1926, 1869, 1871, 1931, 1874, 1878, 1933, 1877, + /* 590 */ 1881, 1938, 1888, 1882, 1939, 1898, 1862, 1873, 1875, 1889, + /* 600 */ 1955, 1891, 1904, 1914, 1973, 1916, 1967, 1967, 1989, 1950, + /* 610 */ 1952, 1980, 1981, 1982, 1984, 1985, 1986, 1995, 1996, 1998, + /* 620 */ 1999, 1968, 1944, 1994, 2003, 2004, 2019, 2008, 2022, 2011, + /* 630 */ 2013, 2014, 1983, 1745, 2017, 1746, 2018, 2023, 2024, 2025, + /* 640 */ 2032, 2026, 2062, 2028, 2020, 2027, 2065, 2033, 2035, 2034, + /* 650 */ 2072, 2048, 2043, 2053, 2093, 2060, 2050, 2067, 2104, 2074, + /* 660 */ 2075, 2107, 2089, 2091, 2092, 2094, 2096, 2095, }; -#define YY_REDUCE_COUNT (274) -#define YY_REDUCE_MIN (-353) -#define YY_REDUCE_MAX (2122) +#define YY_REDUCE_COUNT (266) +#define YY_REDUCE_MIN (-383) +#define YY_REDUCE_MAX (1806) static const short yy_reduce_ofst[] = { - /* 0 */ 285, -311, -38, 148, 882, 935, 999, 1039, 412, 1092, - /* 10 */ 1142, 1159, -22, -261, 1209, 677, 1257, 1267, 1318, 1378, - /* 20 */ 1396, 1446, 975, 1472, 1496, 1522, 1580, 1598, 1659, 1709, - /* 30 */ 1719, 1759, 1809, 1821, 1835, 1911, 1921, 1972, 2022, 2032, - /* 40 */ 2072, 2122, -120, 1592, 249, 444, 579, -319, -289, -309, - /* 50 */ -323, -258, -117, 140, 142, 287, 329, -299, -42, -316, - /* 60 */ -312, -87, -346, 94, 103, 169, 413, 425, 431, 454, - /* 70 */ 458, 491, 492, 495, 511, 383, 578, 580, 582, -12, - /* 80 */ 583, 637, -37, 639, 692, -229, -115, 693, 243, 88, - /* 90 */ 244, 577, 387, -275, -353, -353, -353, -265, -14, 76, - /* 100 */ 308, 405, 416, 419, 447, 476, 498, 520, 522, 566, - /* 110 */ 605, 608, 610, 620, 623, 666, 667, 233, -6, -292, - /* 120 */ 7, 446, 377, 332, -51, 525, 612, 646, 449, 188, - /* 130 */ 379, 422, 488, 508, 40, 659, 568, 668, 718, 528, - /* 140 */ 516, 575, 619, 788, 827, 832, 835, 534, 864, 756, - /* 150 */ 776, 766, 865, 773, 853, 853, 874, 877, 845, 817, - /* 160 */ 795, 795, 795, 810, 781, 789, 793, 801, 853, 841, - /* 170 */ 846, 855, 866, 908, 909, 871, 875, 876, 916, 919, - /* 180 */ 920, 931, 932, 887, 924, 907, 939, 905, 912, 952, - /* 190 */ 910, 960, 961, 962, 969, 967, 968, 953, 954, 955, - /* 200 */ 957, 959, 963, 964, 965, 966, 970, 972, 978, 982, - /* 210 */ 948, 918, 980, 936, 971, 986, 994, 996, 973, 1003, - /* 220 */ 974, 981, 985, 990, 991, 993, 995, 1005, 1013, 1010, - /* 230 */ 1019, 1001, 1008, 1012, 949, 1006, 1014, 1015, 979, 1007, - /* 240 */ 1018, 1020, 853, 998, 1000, 1016, 977, 1017, 1023, 1025, - /* 250 */ 795, 1032, 1027, 1026, 1021, 1028, 1029, 1033, 1031, 1035, - /* 260 */ 1038, 1064, 1056, 1080, 1091, 1098, 1099, 1104, 1042, 1053, - /* 270 */ 1105, 1107, 1108, 1115, 1117, + /* 0 */ 212, -308, -68, 882, 48, 427, 617, 935, -288, 949, + /* 10 */ 205, 677, 999, 783, 1025, 1039, 1092, 1118, 1142, 1200, + /* 20 */ 1252, 1262, 1314, 1338, 1362, 1378, 1418, 1471, 1483, 1497, + /* 30 */ 1552, 1600, 1616, 1640, 1692, 1702, 1716, 1784, 1796, 1806, + /* 40 */ 315, 102, 307, 122, 409, 418, 492, 600, 470, 577, + /* 50 */ -336, 173, -372, -2, 410, -335, 155, -50, 431, -316, + /* 60 */ -311, -317, -92, -53, 441, 454, 736, 770, 777, 778, + /* 70 */ 861, 865, -280, 866, 870, 880, -346, 892, 900, -301, + /* 80 */ 914, 950, -74, -268, 953, 46, 403, 452, 1070, 9, + /* 90 */ -274, -383, -383, -383, -290, -79, 136, 149, 193, 387, + /* 100 */ 469, 488, 494, 521, 605, 618, 620, 623, 654, 680, + /* 110 */ 684, 776, 782, 809, -176, -243, -273, -292, -138, 192, + /* 120 */ -33, -158, -258, -273, 267, 447, -102, 489, 490, -253, + /* 130 */ 545, 595, 32, 103, 504, 578, 648, 639, -326, 220, + /* 140 */ 285, 457, 480, 511, 517, 544, 516, 497, 712, 701, + /* 150 */ 726, 681, 714, 714, 806, 879, 832, 808, 797, 797, + /* 160 */ 797, 816, 815, 830, 714, 887, 907, 922, 934, 985, + /* 170 */ 986, 952, 956, 957, 996, 1005, 1006, 1016, 1026, 975, + /* 180 */ 1029, 1000, 1040, 991, 998, 1044, 1002, 1047, 1048, 1050, + /* 190 */ 1055, 1052, 1075, 1053, 1057, 1058, 1059, 1060, 1062, 1066, + /* 200 */ 1073, 1076, 1079, 1080, 1095, 1081, 1082, 1031, 1105, 1061, + /* 210 */ 1083, 1109, 1116, 1117, 1072, 1111, 1086, 1089, 1090, 1091, + /* 220 */ 1093, 1087, 1098, 1096, 1130, 1119, 1134, 1114, 1084, 1107, + /* 230 */ 1049, 1101, 1115, 1127, 1069, 1104, 1135, 1136, 714, 1067, + /* 240 */ 1077, 1071, 1097, 1099, 1088, 1122, 797, 1158, 1137, 1102, + /* 250 */ 1110, 1106, 1120, 1178, 1179, 1204, 1216, 1217, 1226, 1228, + /* 260 */ 1172, 1180, 1210, 1213, 1215, 1227, 1242, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 10 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 20 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 30 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 40 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 50 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 60 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 70 */ 1481, 1481, 1481, 1481, 1481, 1555, 1481, 1481, 1481, 1481, - /* 80 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 90 */ 1481, 1481, 1553, 1718, 1481, 1893, 1481, 1481, 1481, 1481, - /* 100 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 110 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 120 */ 1481, 1481, 1555, 1481, 1553, 1905, 1905, 1905, 1481, 1481, - /* 130 */ 1481, 1481, 1759, 1759, 1481, 1481, 1481, 1481, 1658, 1481, - /* 140 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1753, 1481, 1974, - /* 150 */ 1481, 1481, 1481, 1928, 1481, 1481, 1481, 1481, 1611, 1920, - /* 160 */ 1897, 1911, 1898, 1895, 1959, 1959, 1959, 1914, 1481, 1924, - /* 170 */ 1481, 1746, 1723, 1481, 1481, 1723, 1720, 1720, 1481, 1481, - /* 180 */ 1481, 1481, 1481, 1481, 1555, 1481, 1555, 1481, 1481, 1555, - /* 190 */ 1481, 1555, 1555, 1555, 1481, 1555, 1481, 1481, 1481, 1481, - /* 200 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 210 */ 1481, 1481, 1553, 1755, 1481, 1553, 1481, 1481, 1481, 1553, - /* 220 */ 1933, 1481, 1481, 1481, 1481, 1933, 1481, 1481, 1553, 1481, - /* 230 */ 1553, 1481, 1481, 1481, 1935, 1933, 1481, 1481, 1935, 1933, - /* 240 */ 1481, 1481, 1481, 1947, 1943, 1935, 1951, 1949, 1926, 1924, - /* 250 */ 1911, 1481, 1481, 1965, 1961, 1977, 1965, 1961, 1965, 1961, - /* 260 */ 1481, 1627, 1481, 1481, 1481, 1553, 1513, 1481, 1748, 1759, - /* 270 */ 1661, 1661, 1661, 1556, 1486, 1481, 1481, 1481, 1481, 1481, - /* 280 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1830, 1946, 1945, - /* 290 */ 1869, 1868, 1867, 1865, 1829, 1481, 1623, 1828, 1827, 1481, - /* 300 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1821, 1822, - /* 310 */ 1820, 1819, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 320 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 330 */ 1481, 1894, 1481, 1962, 1966, 1481, 1481, 1481, 1481, 1481, - /* 340 */ 1805, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 350 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 360 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 370 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 380 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 390 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 400 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 410 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 420 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 430 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1518, 1481, 1481, - /* 440 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 450 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 460 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 470 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 480 */ 1481, 1481, 1594, 1593, 1481, 1481, 1481, 1481, 1481, 1481, - /* 490 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 500 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 510 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 520 */ 1481, 1763, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 530 */ 1481, 1927, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 540 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1805, 1481, 1944, - /* 550 */ 1481, 1904, 1900, 1481, 1481, 1896, 1804, 1481, 1481, 1960, - /* 560 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1889, - /* 570 */ 1481, 1481, 1862, 1847, 1481, 1481, 1481, 1481, 1481, 1481, - /* 580 */ 1481, 1481, 1481, 1481, 1815, 1481, 1481, 1481, 1481, 1481, - /* 590 */ 1655, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 600 */ 1481, 1481, 1481, 1640, 1638, 1637, 1636, 1481, 1633, 1481, - /* 610 */ 1481, 1481, 1481, 1664, 1663, 1481, 1481, 1481, 1481, 1481, - /* 620 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 630 */ 1575, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 640 */ 1566, 1481, 1565, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 650 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 660 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, - /* 670 */ 1481, 1481, 1481, 1481, 1481, + /* 0 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 10 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 20 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 30 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 40 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 50 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 60 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 70 */ 1479, 1479, 1553, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 80 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1551, + /* 90 */ 1716, 1479, 1891, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 100 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 110 */ 1479, 1479, 1479, 1479, 1479, 1479, 1903, 1479, 1479, 1479, + /* 120 */ 1553, 1479, 1551, 1903, 1903, 1903, 1479, 1479, 1479, 1479, + /* 130 */ 1757, 1757, 1479, 1479, 1479, 1479, 1656, 1479, 1479, 1479, + /* 140 */ 1479, 1479, 1479, 1479, 1479, 1751, 1479, 1975, 1479, 1479, + /* 150 */ 1479, 1926, 1479, 1479, 1479, 1479, 1609, 1918, 1895, 1909, + /* 160 */ 1896, 1893, 1960, 1912, 1479, 1922, 1479, 1744, 1721, 1479, + /* 170 */ 1479, 1721, 1718, 1718, 1479, 1479, 1479, 1479, 1479, 1479, + /* 180 */ 1553, 1479, 1553, 1479, 1479, 1553, 1479, 1553, 1553, 1553, + /* 190 */ 1479, 1553, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 200 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1551, 1753, + /* 210 */ 1479, 1551, 1479, 1479, 1479, 1551, 1931, 1479, 1479, 1479, + /* 220 */ 1479, 1931, 1479, 1479, 1551, 1479, 1551, 1479, 1479, 1479, + /* 230 */ 1933, 1931, 1479, 1479, 1933, 1931, 1479, 1479, 1479, 1945, + /* 240 */ 1941, 1933, 1949, 1947, 1924, 1922, 1909, 1479, 1479, 1978, + /* 250 */ 1966, 1962, 1479, 1625, 1479, 1479, 1479, 1551, 1511, 1479, + /* 260 */ 1746, 1757, 1659, 1659, 1659, 1554, 1484, 1479, 1479, 1479, + /* 270 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1828, + /* 280 */ 1944, 1943, 1867, 1866, 1865, 1863, 1827, 1479, 1621, 1826, + /* 290 */ 1825, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 300 */ 1819, 1820, 1818, 1817, 1479, 1479, 1479, 1479, 1479, 1479, + /* 310 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 320 */ 1479, 1479, 1479, 1892, 1479, 1963, 1967, 1479, 1479, 1479, + /* 330 */ 1479, 1479, 1803, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 340 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 350 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 360 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 370 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 380 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 390 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 400 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 410 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 420 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1516, + /* 430 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 440 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 450 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 460 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 470 */ 1479, 1479, 1479, 1479, 1592, 1591, 1479, 1479, 1479, 1479, + /* 480 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 490 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 500 */ 1479, 1479, 1479, 1479, 1479, 1479, 1959, 1479, 1479, 1479, + /* 510 */ 1479, 1479, 1479, 1479, 1761, 1479, 1479, 1479, 1479, 1479, + /* 520 */ 1479, 1479, 1479, 1479, 1925, 1479, 1479, 1479, 1479, 1479, + /* 530 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 540 */ 1803, 1479, 1942, 1479, 1902, 1898, 1479, 1479, 1894, 1802, + /* 550 */ 1479, 1479, 1479, 1961, 1479, 1479, 1479, 1479, 1479, 1479, + /* 560 */ 1479, 1887, 1479, 1479, 1860, 1845, 1479, 1479, 1479, 1479, + /* 570 */ 1479, 1479, 1479, 1479, 1479, 1815, 1479, 1813, 1479, 1479, + /* 580 */ 1479, 1479, 1479, 1653, 1479, 1479, 1479, 1479, 1479, 1479, + /* 590 */ 1479, 1479, 1479, 1479, 1479, 1479, 1638, 1636, 1635, 1634, + /* 600 */ 1479, 1631, 1479, 1479, 1479, 1479, 1662, 1661, 1479, 1479, + /* 610 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 620 */ 1479, 1479, 1479, 1573, 1479, 1479, 1479, 1479, 1479, 1479, + /* 630 */ 1479, 1479, 1479, 1564, 1479, 1563, 1479, 1479, 1479, 1479, + /* 640 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 650 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + /* 660 */ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, }; /********** End of lemon-generated parsing tables *****************************/ @@ -1683,7 +1639,7 @@ static const char *const yyTokenName[] = { /* 365 */ "func", /* 366 */ "stream_options", /* 367 */ "topic_name", - /* 368 */ "query_expression", + /* 368 */ "query_or_subquery", /* 369 */ "cgroup_name", /* 370 */ "analyze_opt", /* 371 */ "explain_options", @@ -1736,15 +1692,17 @@ static const char *const yyTokenName[] = { /* 418 */ "select_item", /* 419 */ "fill_mode", /* 420 */ "group_by_list", - /* 421 */ "query_expression_body", - /* 422 */ "order_by_clause_opt", - /* 423 */ "slimit_clause_opt", - /* 424 */ "limit_clause_opt", - /* 425 */ "query_primary", - /* 426 */ "sort_specification_list", - /* 427 */ "sort_specification", - /* 428 */ "ordering_specification_opt", - /* 429 */ "null_ordering_opt", + /* 421 */ "query_expression", + /* 422 */ "query_simple", + /* 423 */ "order_by_clause_opt", + /* 424 */ "slimit_clause_opt", + /* 425 */ "limit_clause_opt", + /* 426 */ "union_query_expression", + /* 427 */ "query_simple_or_subquery", + /* 428 */ "sort_specification_list", + /* 429 */ "sort_specification", + /* 430 */ "ordering_specification_opt", + /* 431 */ "null_ordering_opt", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -2003,7 +1961,7 @@ static const char *const yyRuleName[] = { /* 248 */ "sma_stream_opt ::=", /* 249 */ "sma_stream_opt ::= stream_options WATERMARK duration_literal", /* 250 */ "sma_stream_opt ::= stream_options MAX_DELAY duration_literal", - /* 251 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression", + /* 251 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery", /* 252 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name", /* 253 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name", /* 254 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name", @@ -2013,7 +1971,7 @@ static const char *const yyRuleName[] = { /* 258 */ "cmd ::= DESC full_table_name", /* 259 */ "cmd ::= DESCRIBE full_table_name", /* 260 */ "cmd ::= RESET QUERY CACHE", - /* 261 */ "cmd ::= EXPLAIN analyze_opt explain_options query_expression", + /* 261 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery", /* 262 */ "analyze_opt ::=", /* 263 */ "analyze_opt ::= ANALYZE", /* 264 */ "explain_options ::=", @@ -2025,7 +1983,7 @@ static const char *const yyRuleName[] = { /* 270 */ "agg_func_opt ::= AGGREGATE", /* 271 */ "bufsize_opt ::=", /* 272 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", - /* 273 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name AS query_expression", + /* 273 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name AS query_or_subquery", /* 274 */ "cmd ::= DROP STREAM exists_opt stream_name", /* 275 */ "stream_options ::=", /* 276 */ "stream_options ::= stream_options TRIGGER AT_ONCE", @@ -2043,9 +2001,9 @@ static const char *const yyRuleName[] = { /* 288 */ "dnode_list ::= DNODE NK_INTEGER", /* 289 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", /* 290 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", - /* 291 */ "cmd ::= query_expression", - /* 292 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_expression", - /* 293 */ "cmd ::= INSERT INTO full_table_name query_expression", + /* 291 */ "cmd ::= query_or_subquery", + /* 292 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", + /* 293 */ "cmd ::= INSERT INTO full_table_name query_or_subquery", /* 294 */ "literal ::= NK_INTEGER", /* 295 */ "literal ::= NK_FLOAT", /* 296 */ "literal ::= NK_STRING", @@ -2221,33 +2179,36 @@ static const char *const yyRuleName[] = { /* 466 */ "range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP", /* 467 */ "every_opt ::=", /* 468 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", - /* 469 */ "query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt", - /* 470 */ "query_expression_body ::= query_primary", - /* 471 */ "query_expression_body ::= query_expression_body UNION ALL query_expression_body", - /* 472 */ "query_expression_body ::= query_expression_body UNION query_expression_body", - /* 473 */ "query_primary ::= query_specification", - /* 474 */ "query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP", - /* 475 */ "order_by_clause_opt ::=", - /* 476 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", - /* 477 */ "slimit_clause_opt ::=", - /* 478 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", - /* 479 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", - /* 480 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 481 */ "limit_clause_opt ::=", - /* 482 */ "limit_clause_opt ::= LIMIT NK_INTEGER", - /* 483 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", - /* 484 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 485 */ "subquery ::= NK_LP query_expression NK_RP", - /* 486 */ "search_condition ::= common_expression", - /* 487 */ "sort_specification_list ::= sort_specification", - /* 488 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", - /* 489 */ "sort_specification ::= expression ordering_specification_opt null_ordering_opt", - /* 490 */ "ordering_specification_opt ::=", - /* 491 */ "ordering_specification_opt ::= ASC", - /* 492 */ "ordering_specification_opt ::= DESC", - /* 493 */ "null_ordering_opt ::=", - /* 494 */ "null_ordering_opt ::= NULLS FIRST", - /* 495 */ "null_ordering_opt ::= NULLS LAST", + /* 469 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", + /* 470 */ "query_simple ::= query_specification", + /* 471 */ "query_simple ::= union_query_expression", + /* 472 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", + /* 473 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", + /* 474 */ "query_simple_or_subquery ::= query_simple", + /* 475 */ "query_simple_or_subquery ::= subquery", + /* 476 */ "query_or_subquery ::= query_expression", + /* 477 */ "query_or_subquery ::= subquery", + /* 478 */ "order_by_clause_opt ::=", + /* 479 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", + /* 480 */ "slimit_clause_opt ::=", + /* 481 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", + /* 482 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", + /* 483 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 484 */ "limit_clause_opt ::=", + /* 485 */ "limit_clause_opt ::= LIMIT NK_INTEGER", + /* 486 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", + /* 487 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 488 */ "subquery ::= NK_LP query_expression NK_RP", + /* 489 */ "search_condition ::= common_expression", + /* 490 */ "sort_specification_list ::= sort_specification", + /* 491 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", + /* 492 */ "sort_specification ::= expression ordering_specification_opt null_ordering_opt", + /* 493 */ "ordering_specification_opt ::=", + /* 494 */ "ordering_specification_opt ::= ASC", + /* 495 */ "ordering_specification_opt ::= DESC", + /* 496 */ "null_ordering_opt ::=", + /* 497 */ "null_ordering_opt ::= NULLS FIRST", + /* 498 */ "null_ordering_opt ::= NULLS LAST", }; #endif /* NDEBUG */ @@ -2399,7 +2360,7 @@ static void yy_destructor( case 364: /* sma_stream_opt */ case 365: /* func */ case 366: /* stream_options */ - case 368: /* query_expression */ + case 368: /* query_or_subquery */ case 371: /* explain_options */ case 376: /* where_clause_opt */ case 377: /* signed */ @@ -2429,13 +2390,15 @@ static void yy_destructor( case 415: /* twindow_clause_opt */ case 417: /* having_clause_opt */ case 418: /* select_item */ - case 421: /* query_expression_body */ - case 423: /* slimit_clause_opt */ - case 424: /* limit_clause_opt */ - case 425: /* query_primary */ - case 427: /* sort_specification */ + case 421: /* query_expression */ + case 422: /* query_simple */ + case 424: /* slimit_clause_opt */ + case 425: /* limit_clause_opt */ + case 426: /* union_query_expression */ + case 427: /* query_simple_or_subquery */ + case 429: /* sort_specification */ { - nodesDestroyNode((yypminor->yy312)); + nodesDestroyNode((yypminor->yy776)); } break; case 310: /* account_options */ @@ -2508,10 +2471,10 @@ static void yy_destructor( case 411: /* partition_by_clause_opt */ case 416: /* group_by_clause_opt */ case 420: /* group_by_list */ - case 422: /* order_by_clause_opt */ - case 426: /* sort_specification_list */ + case 423: /* order_by_clause_opt */ + case 428: /* sort_specification_list */ { - nodesDestroyList((yypminor->yy824)); + nodesDestroyList((yypminor->yy280)); } break; case 329: /* alter_db_option */ @@ -2541,12 +2504,12 @@ static void yy_destructor( } break; - case 428: /* ordering_specification_opt */ + case 430: /* ordering_specification_opt */ { } break; - case 429: /* null_ordering_opt */ + case 431: /* null_ordering_opt */ { } @@ -3096,7 +3059,7 @@ static const struct { { 364, 0 }, /* (248) sma_stream_opt ::= */ { 364, -3 }, /* (249) sma_stream_opt ::= stream_options WATERMARK duration_literal */ { 364, -3 }, /* (250) sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ - { 309, -6 }, /* (251) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression */ + { 309, -6 }, /* (251) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ { 309, -7 }, /* (252) cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ { 309, -9 }, /* (253) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ { 309, -7 }, /* (254) cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ @@ -3106,7 +3069,7 @@ static const struct { { 309, -2 }, /* (258) cmd ::= DESC full_table_name */ { 309, -2 }, /* (259) cmd ::= DESCRIBE full_table_name */ { 309, -3 }, /* (260) cmd ::= RESET QUERY CACHE */ - { 309, -4 }, /* (261) cmd ::= EXPLAIN analyze_opt explain_options query_expression */ + { 309, -4 }, /* (261) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ { 370, 0 }, /* (262) analyze_opt ::= */ { 370, -1 }, /* (263) analyze_opt ::= ANALYZE */ { 371, 0 }, /* (264) explain_options ::= */ @@ -3118,7 +3081,7 @@ static const struct { { 372, -1 }, /* (270) agg_func_opt ::= AGGREGATE */ { 373, 0 }, /* (271) bufsize_opt ::= */ { 373, -2 }, /* (272) bufsize_opt ::= BUFSIZE NK_INTEGER */ - { 309, -9 }, /* (273) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name AS query_expression */ + { 309, -9 }, /* (273) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name AS query_or_subquery */ { 309, -4 }, /* (274) cmd ::= DROP STREAM exists_opt stream_name */ { 366, 0 }, /* (275) stream_options ::= */ { 366, -3 }, /* (276) stream_options ::= stream_options TRIGGER AT_ONCE */ @@ -3136,9 +3099,9 @@ static const struct { { 375, -2 }, /* (288) dnode_list ::= DNODE NK_INTEGER */ { 375, -3 }, /* (289) dnode_list ::= dnode_list DNODE NK_INTEGER */ { 309, -4 }, /* (290) cmd ::= DELETE FROM full_table_name where_clause_opt */ - { 309, -1 }, /* (291) cmd ::= query_expression */ - { 309, -7 }, /* (292) cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_expression */ - { 309, -4 }, /* (293) cmd ::= INSERT INTO full_table_name query_expression */ + { 309, -1 }, /* (291) cmd ::= query_or_subquery */ + { 309, -7 }, /* (292) cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ + { 309, -4 }, /* (293) cmd ::= INSERT INTO full_table_name query_or_subquery */ { 312, -1 }, /* (294) literal ::= NK_INTEGER */ { 312, -1 }, /* (295) literal ::= NK_FLOAT */ { 312, -1 }, /* (296) literal ::= NK_STRING */ @@ -3314,33 +3277,36 @@ static const struct { { 412, -6 }, /* (466) range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */ { 413, 0 }, /* (467) every_opt ::= */ { 413, -4 }, /* (468) every_opt ::= EVERY NK_LP duration_literal NK_RP */ - { 368, -4 }, /* (469) query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */ - { 421, -1 }, /* (470) query_expression_body ::= query_primary */ - { 421, -4 }, /* (471) query_expression_body ::= query_expression_body UNION ALL query_expression_body */ - { 421, -3 }, /* (472) query_expression_body ::= query_expression_body UNION query_expression_body */ - { 425, -1 }, /* (473) query_primary ::= query_specification */ - { 425, -6 }, /* (474) query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */ - { 422, 0 }, /* (475) order_by_clause_opt ::= */ - { 422, -3 }, /* (476) order_by_clause_opt ::= ORDER BY sort_specification_list */ - { 423, 0 }, /* (477) slimit_clause_opt ::= */ - { 423, -2 }, /* (478) slimit_clause_opt ::= SLIMIT NK_INTEGER */ - { 423, -4 }, /* (479) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - { 423, -4 }, /* (480) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 424, 0 }, /* (481) limit_clause_opt ::= */ - { 424, -2 }, /* (482) limit_clause_opt ::= LIMIT NK_INTEGER */ - { 424, -4 }, /* (483) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ - { 424, -4 }, /* (484) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 386, -3 }, /* (485) subquery ::= NK_LP query_expression NK_RP */ - { 407, -1 }, /* (486) search_condition ::= common_expression */ - { 426, -1 }, /* (487) sort_specification_list ::= sort_specification */ - { 426, -3 }, /* (488) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ - { 427, -3 }, /* (489) sort_specification ::= expression ordering_specification_opt null_ordering_opt */ - { 428, 0 }, /* (490) ordering_specification_opt ::= */ - { 428, -1 }, /* (491) ordering_specification_opt ::= ASC */ - { 428, -1 }, /* (492) ordering_specification_opt ::= DESC */ - { 429, 0 }, /* (493) null_ordering_opt ::= */ - { 429, -2 }, /* (494) null_ordering_opt ::= NULLS FIRST */ - { 429, -2 }, /* (495) null_ordering_opt ::= NULLS LAST */ + { 421, -4 }, /* (469) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + { 422, -1 }, /* (470) query_simple ::= query_specification */ + { 422, -1 }, /* (471) query_simple ::= union_query_expression */ + { 426, -4 }, /* (472) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ + { 426, -3 }, /* (473) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ + { 427, -1 }, /* (474) query_simple_or_subquery ::= query_simple */ + { 427, -1 }, /* (475) query_simple_or_subquery ::= subquery */ + { 368, -1 }, /* (476) query_or_subquery ::= query_expression */ + { 368, -1 }, /* (477) query_or_subquery ::= subquery */ + { 423, 0 }, /* (478) order_by_clause_opt ::= */ + { 423, -3 }, /* (479) order_by_clause_opt ::= ORDER BY sort_specification_list */ + { 424, 0 }, /* (480) slimit_clause_opt ::= */ + { 424, -2 }, /* (481) slimit_clause_opt ::= SLIMIT NK_INTEGER */ + { 424, -4 }, /* (482) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + { 424, -4 }, /* (483) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 425, 0 }, /* (484) limit_clause_opt ::= */ + { 425, -2 }, /* (485) limit_clause_opt ::= LIMIT NK_INTEGER */ + { 425, -4 }, /* (486) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ + { 425, -4 }, /* (487) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 386, -3 }, /* (488) subquery ::= NK_LP query_expression NK_RP */ + { 407, -1 }, /* (489) search_condition ::= common_expression */ + { 428, -1 }, /* (490) sort_specification_list ::= sort_specification */ + { 428, -3 }, /* (491) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ + { 429, -3 }, /* (492) sort_specification ::= expression ordering_specification_opt null_ordering_opt */ + { 430, 0 }, /* (493) ordering_specification_opt ::= */ + { 430, -1 }, /* (494) ordering_specification_opt ::= ASC */ + { 430, -1 }, /* (495) ordering_specification_opt ::= DESC */ + { 431, 0 }, /* (496) null_ordering_opt ::= */ + { 431, -2 }, /* (497) null_ordering_opt ::= NULLS FIRST */ + { 431, -2 }, /* (498) null_ordering_opt ::= NULLS LAST */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -3477,69 +3443,69 @@ static YYACTIONTYPE yy_reduce( yy_destructor(yypParser,312,&yymsp[0].minor); break; case 24: /* cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ -{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy149, &yymsp[-1].minor.yy0, yymsp[0].minor.yy363); } +{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy641, &yymsp[-1].minor.yy0, yymsp[0].minor.yy503); } break; case 25: /* cmd ::= ALTER USER user_name PASS NK_STRING */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy149, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy641, 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.yy149, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy641, 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.yy149, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy641, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } break; case 28: /* cmd ::= DROP USER user_name */ -{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy641); } break; case 29: /* sysinfo_opt ::= */ -{ yymsp[1].minor.yy363 = 1; } +{ yymsp[1].minor.yy503 = 1; } break; case 30: /* sysinfo_opt ::= SYSINFO NK_INTEGER */ -{ yymsp[-1].minor.yy363 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); } +{ yymsp[-1].minor.yy503 = 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.yy49, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-4].minor.yy477, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy641); } break; case 32: /* cmd ::= REVOKE privileges ON priv_level FROM user_name */ -{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy49, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy477, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy641); } break; case 33: /* privileges ::= ALL */ -{ yymsp[0].minor.yy49 = PRIVILEGE_TYPE_ALL; } +{ yymsp[0].minor.yy477 = PRIVILEGE_TYPE_ALL; } break; case 34: /* privileges ::= priv_type_list */ case 35: /* priv_type_list ::= priv_type */ yytestcase(yyruleno==35); -{ yylhsminor.yy49 = yymsp[0].minor.yy49; } - yymsp[0].minor.yy49 = yylhsminor.yy49; +{ yylhsminor.yy477 = yymsp[0].minor.yy477; } + yymsp[0].minor.yy477 = yylhsminor.yy477; break; case 36: /* priv_type_list ::= priv_type_list NK_COMMA priv_type */ -{ yylhsminor.yy49 = yymsp[-2].minor.yy49 | yymsp[0].minor.yy49; } - yymsp[-2].minor.yy49 = yylhsminor.yy49; +{ yylhsminor.yy477 = yymsp[-2].minor.yy477 | yymsp[0].minor.yy477; } + yymsp[-2].minor.yy477 = yylhsminor.yy477; break; case 37: /* priv_type ::= READ */ -{ yymsp[0].minor.yy49 = PRIVILEGE_TYPE_READ; } +{ yymsp[0].minor.yy477 = PRIVILEGE_TYPE_READ; } break; case 38: /* priv_type ::= WRITE */ -{ yymsp[0].minor.yy49 = PRIVILEGE_TYPE_WRITE; } +{ yymsp[0].minor.yy477 = PRIVILEGE_TYPE_WRITE; } break; case 39: /* priv_level ::= NK_STAR NK_DOT NK_STAR */ -{ yylhsminor.yy149 = yymsp[-2].minor.yy0; } - yymsp[-2].minor.yy149 = yylhsminor.yy149; +{ yylhsminor.yy641 = yymsp[-2].minor.yy0; } + yymsp[-2].minor.yy641 = yylhsminor.yy641; break; case 40: /* priv_level ::= db_name NK_DOT NK_STAR */ -{ yylhsminor.yy149 = yymsp[-2].minor.yy149; } - yymsp[-2].minor.yy149 = yylhsminor.yy149; +{ yylhsminor.yy641 = yymsp[-2].minor.yy641; } + yymsp[-2].minor.yy641 = yylhsminor.yy641; break; case 41: /* cmd ::= CREATE DNODE dnode_endpoint */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy149, NULL); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy641, NULL); } break; case 42: /* cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy641, &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.yy149); } +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy641); } break; case 45: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, NULL); } @@ -3579,8 +3545,8 @@ static YYACTIONTYPE yy_reduce( case 374: /* star_func ::= FIRST */ yytestcase(yyruleno==374); case 375: /* star_func ::= LAST */ yytestcase(yyruleno==375); case 376: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==376); -{ yylhsminor.yy149 = yymsp[0].minor.yy0; } - yymsp[0].minor.yy149 = yylhsminor.yy149; +{ yylhsminor.yy641 = yymsp[0].minor.yy0; } + yymsp[0].minor.yy641 = yylhsminor.yy641; break; case 52: /* cmd ::= ALTER LOCAL NK_STRING */ { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[0].minor.yy0, NULL); } @@ -3613,208 +3579,208 @@ 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.yy497, &yymsp[-1].minor.yy149, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy281, &yymsp[-1].minor.yy641, yymsp[0].minor.yy776); } break; case 63: /* cmd ::= DROP DATABASE exists_opt db_name */ -{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy497, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy281, &yymsp[0].minor.yy641); } break; case 64: /* cmd ::= USE db_name */ -{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy641); } break; case 65: /* cmd ::= ALTER DATABASE db_name alter_db_options */ -{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy149, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy641, yymsp[0].minor.yy776); } break; case 66: /* cmd ::= FLUSH DATABASE db_name */ -{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy641); } break; case 67: /* cmd ::= TRIM DATABASE db_name */ -{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[0].minor.yy641); } break; case 68: /* not_exists_opt ::= IF NOT EXISTS */ -{ yymsp[-2].minor.yy497 = true; } +{ yymsp[-2].minor.yy281 = true; } break; case 69: /* not_exists_opt ::= */ case 71: /* exists_opt ::= */ yytestcase(yyruleno==71); case 262: /* analyze_opt ::= */ yytestcase(yyruleno==262); case 269: /* agg_func_opt ::= */ yytestcase(yyruleno==269); case 430: /* set_quantifier_opt ::= */ yytestcase(yyruleno==430); -{ yymsp[1].minor.yy497 = false; } +{ yymsp[1].minor.yy281 = false; } break; case 70: /* exists_opt ::= IF EXISTS */ -{ yymsp[-1].minor.yy497 = true; } +{ yymsp[-1].minor.yy281 = true; } break; case 72: /* db_options ::= */ -{ yymsp[1].minor.yy312 = createDefaultDatabaseOptions(pCxt); } +{ yymsp[1].minor.yy776 = createDefaultDatabaseOptions(pCxt); } break; case 73: /* db_options ::= db_options BUFFER NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 74: /* db_options ::= db_options CACHEMODEL NK_STRING */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 75: /* db_options ::= db_options CACHESIZE NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 76: /* db_options ::= db_options COMP NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_COMP, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_COMP, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 77: /* db_options ::= db_options DURATION NK_INTEGER */ case 78: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==78); -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 79: /* db_options ::= db_options MAXROWS NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 80: /* db_options ::= db_options MINROWS NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 81: /* db_options ::= db_options KEEP integer_list */ case 82: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==82); -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_KEEP, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_KEEP, yymsp[0].minor.yy280); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 83: /* db_options ::= db_options PAGES NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 84: /* db_options ::= db_options PAGESIZE NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 85: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 86: /* db_options ::= db_options PRECISION NK_STRING */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 87: /* db_options ::= db_options REPLICA NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 88: /* db_options ::= db_options STRICT NK_STRING */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 89: /* db_options ::= db_options VGROUPS NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 90: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 91: /* db_options ::= db_options RETENTIONS retention_list */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_RETENTIONS, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_RETENTIONS, yymsp[0].minor.yy280); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 92: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 93: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_WAL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_WAL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 94: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 95: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 96: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-3].minor.yy312, DB_OPTION_WAL_RETENTION_PERIOD, &t); + yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-3].minor.yy776, DB_OPTION_WAL_RETENTION_PERIOD, &t); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 97: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 98: /* db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-3].minor.yy312, DB_OPTION_WAL_RETENTION_SIZE, &t); + yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-3].minor.yy776, DB_OPTION_WAL_RETENTION_SIZE, &t); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 99: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 100: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 101: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 102: /* db_options ::= db_options TABLE_PREFIX NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 103: /* db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ -{ yylhsminor.yy312 = setDatabaseOption(pCxt, yymsp[-2].minor.yy312, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setDatabaseOption(pCxt, yymsp[-2].minor.yy776, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 104: /* alter_db_options ::= alter_db_option */ -{ yylhsminor.yy312 = createAlterDatabaseOptions(pCxt); yylhsminor.yy312 = setAlterDatabaseOption(pCxt, yylhsminor.yy312, &yymsp[0].minor.yy405); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterDatabaseOptions(pCxt); yylhsminor.yy776 = setAlterDatabaseOption(pCxt, yylhsminor.yy776, &yymsp[0].minor.yy605); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 105: /* alter_db_options ::= alter_db_options alter_db_option */ -{ yylhsminor.yy312 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy312, &yymsp[0].minor.yy405); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy776, &yymsp[0].minor.yy605); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 106: /* alter_db_option ::= CACHEMODEL NK_STRING */ -{ yymsp[-1].minor.yy405.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy405.val = yymsp[0].minor.yy0; } +{ yymsp[-1].minor.yy605.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy605.val = yymsp[0].minor.yy0; } break; case 107: /* alter_db_option ::= CACHESIZE NK_INTEGER */ -{ yymsp[-1].minor.yy405.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy405.val = yymsp[0].minor.yy0; } +{ yymsp[-1].minor.yy605.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy605.val = yymsp[0].minor.yy0; } break; case 108: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ -{ yymsp[-1].minor.yy405.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy405.val = yymsp[0].minor.yy0; } +{ yymsp[-1].minor.yy605.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy605.val = yymsp[0].minor.yy0; } break; case 109: /* alter_db_option ::= KEEP integer_list */ case 110: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==110); -{ yymsp[-1].minor.yy405.type = DB_OPTION_KEEP; yymsp[-1].minor.yy405.pList = yymsp[0].minor.yy824; } +{ yymsp[-1].minor.yy605.type = DB_OPTION_KEEP; yymsp[-1].minor.yy605.pList = yymsp[0].minor.yy280; } break; case 111: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */ -{ yymsp[-1].minor.yy405.type = DB_OPTION_WAL; yymsp[-1].minor.yy405.val = yymsp[0].minor.yy0; } +{ yymsp[-1].minor.yy605.type = DB_OPTION_WAL; yymsp[-1].minor.yy605.val = yymsp[0].minor.yy0; } break; case 112: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */ -{ yymsp[-1].minor.yy405.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy405.val = yymsp[0].minor.yy0; } +{ yymsp[-1].minor.yy605.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy605.val = yymsp[0].minor.yy0; } break; case 113: /* integer_list ::= NK_INTEGER */ -{ yylhsminor.yy824 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy280 = yylhsminor.yy280; break; case 114: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ case 289: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==289); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = addNodeToList(pCxt, yymsp[-2].minor.yy280, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy280 = yylhsminor.yy280; break; case 115: /* variable_list ::= NK_VARIABLE */ -{ yylhsminor.yy824 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy280 = yylhsminor.yy280; break; case 116: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = addNodeToList(pCxt, yymsp[-2].minor.yy280, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy280 = yylhsminor.yy280; break; case 117: /* retention_list ::= retention */ case 137: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==137); @@ -3826,9 +3792,9 @@ static YYACTIONTYPE yy_reduce( case 317: /* literal_list ::= signed_literal */ yytestcase(yyruleno==317); case 379: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==379); case 433: /* select_list ::= select_item */ yytestcase(yyruleno==433); - case 487: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==487); -{ yylhsminor.yy824 = createNodeList(pCxt, yymsp[0].minor.yy312); } - yymsp[0].minor.yy824 = yylhsminor.yy824; + case 490: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==490); +{ yylhsminor.yy280 = createNodeList(pCxt, yymsp[0].minor.yy776); } + yymsp[0].minor.yy280 = yylhsminor.yy280; break; case 118: /* retention_list ::= retention_list NK_COMMA retention */ case 148: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==148); @@ -3838,251 +3804,251 @@ static YYACTIONTYPE yy_reduce( case 318: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==318); case 380: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==380); case 434: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==434); - case 488: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==488); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, yymsp[0].minor.yy312); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; + case 491: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==491); +{ yylhsminor.yy280 = addNodeToList(pCxt, yymsp[-2].minor.yy280, yymsp[0].minor.yy776); } + yymsp[-2].minor.yy280 = yylhsminor.yy280; break; case 119: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ -{ yylhsminor.yy312 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 120: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ case 122: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==122); -{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy497, yymsp[-5].minor.yy312, yymsp[-3].minor.yy824, yymsp[-1].minor.yy824, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy281, yymsp[-5].minor.yy776, yymsp[-3].minor.yy280, yymsp[-1].minor.yy280, yymsp[0].minor.yy776); } break; case 121: /* cmd ::= CREATE TABLE multi_create_clause */ -{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy824); } +{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy280); } break; case 123: /* cmd ::= DROP TABLE multi_drop_clause */ -{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy824); } +{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy280); } break; case 124: /* cmd ::= DROP STABLE exists_opt full_table_name */ -{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy497, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy281, yymsp[0].minor.yy776); } break; case 125: /* cmd ::= ALTER TABLE alter_table_clause */ - case 291: /* cmd ::= query_expression */ yytestcase(yyruleno==291); -{ pCxt->pRootNode = yymsp[0].minor.yy312; } + case 291: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==291); +{ pCxt->pRootNode = yymsp[0].minor.yy776; } break; case 126: /* cmd ::= ALTER STABLE alter_table_clause */ -{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy312); } +{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy776); } break; case 127: /* alter_table_clause ::= full_table_name alter_table_options */ -{ yylhsminor.yy312 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy312, yymsp[0].minor.yy312); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy776, yymsp[0].minor.yy776); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 128: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ -{ yylhsminor.yy312 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy312, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy149, yymsp[0].minor.yy84); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy776, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy641, yymsp[0].minor.yy304); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 129: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ -{ yylhsminor.yy312 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy312, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy149); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy776, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy641); } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 130: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ -{ yylhsminor.yy312 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy312, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy149, yymsp[0].minor.yy84); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy776, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy641, yymsp[0].minor.yy304); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 131: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ -{ yylhsminor.yy312 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy312, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy149, &yymsp[0].minor.yy149); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy776, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy641, &yymsp[0].minor.yy641); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 132: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */ -{ yylhsminor.yy312 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy312, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy149, yymsp[0].minor.yy84); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy776, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy641, yymsp[0].minor.yy304); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 133: /* alter_table_clause ::= full_table_name DROP TAG column_name */ -{ yylhsminor.yy312 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy312, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy149); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy776, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy641); } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 134: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ -{ yylhsminor.yy312 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy312, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy149, yymsp[0].minor.yy84); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy776, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy641, yymsp[0].minor.yy304); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 135: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ -{ yylhsminor.yy312 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy312, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy149, &yymsp[0].minor.yy149); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy776, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy641, &yymsp[0].minor.yy641); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 136: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ -{ yylhsminor.yy312 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy312, &yymsp[-2].minor.yy149, yymsp[0].minor.yy312); } - yymsp[-5].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy776, &yymsp[-2].minor.yy641, yymsp[0].minor.yy776); } + yymsp[-5].minor.yy776 = yylhsminor.yy776; break; case 138: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ case 141: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==141); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-1].minor.yy824, yymsp[0].minor.yy312); } - yymsp[-1].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = addNodeToList(pCxt, yymsp[-1].minor.yy280, yymsp[0].minor.yy776); } + yymsp[-1].minor.yy280 = yylhsminor.yy280; break; case 139: /* 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.yy312 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy497, yymsp[-8].minor.yy312, yymsp[-6].minor.yy312, yymsp[-5].minor.yy824, yymsp[-2].minor.yy824, yymsp[0].minor.yy312); } - yymsp[-9].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy281, yymsp[-8].minor.yy776, yymsp[-6].minor.yy776, yymsp[-5].minor.yy280, yymsp[-2].minor.yy280, yymsp[0].minor.yy776); } + yymsp[-9].minor.yy776 = yylhsminor.yy776; break; case 142: /* drop_table_clause ::= exists_opt full_table_name */ -{ yylhsminor.yy312 = createDropTableClause(pCxt, yymsp[-1].minor.yy497, yymsp[0].minor.yy312); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createDropTableClause(pCxt, yymsp[-1].minor.yy281, yymsp[0].minor.yy776); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 143: /* specific_cols_opt ::= */ case 174: /* tags_def_opt ::= */ yytestcase(yyruleno==174); case 442: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==442); case 459: /* group_by_clause_opt ::= */ yytestcase(yyruleno==459); - case 475: /* order_by_clause_opt ::= */ yytestcase(yyruleno==475); -{ yymsp[1].minor.yy824 = NULL; } + case 478: /* order_by_clause_opt ::= */ yytestcase(yyruleno==478); +{ yymsp[1].minor.yy280 = NULL; } break; case 144: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ -{ yymsp[-2].minor.yy824 = yymsp[-1].minor.yy824; } +{ yymsp[-2].minor.yy280 = yymsp[-1].minor.yy280; } break; case 145: /* full_table_name ::= table_name */ -{ yylhsminor.yy312 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy149, NULL); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy641, NULL); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 146: /* full_table_name ::= db_name NK_DOT table_name */ -{ yylhsminor.yy312 = createRealTableNode(pCxt, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy149, NULL); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRealTableNode(pCxt, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy641, NULL); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 149: /* column_def ::= column_name type_name */ -{ yylhsminor.yy312 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy149, yymsp[0].minor.yy84, NULL); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy641, yymsp[0].minor.yy304, NULL); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 150: /* column_def ::= column_name type_name COMMENT NK_STRING */ -{ yylhsminor.yy312 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy149, yymsp[-2].minor.yy84, &yymsp[0].minor.yy0); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy641, yymsp[-2].minor.yy304, &yymsp[0].minor.yy0); } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 151: /* type_name ::= BOOL */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_BOOL); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_BOOL); } break; case 152: /* type_name ::= TINYINT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_TINYINT); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_TINYINT); } break; case 153: /* type_name ::= SMALLINT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_SMALLINT); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_SMALLINT); } break; case 154: /* type_name ::= INT */ case 155: /* type_name ::= INTEGER */ yytestcase(yyruleno==155); -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_INT); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_INT); } break; case 156: /* type_name ::= BIGINT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_BIGINT); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_BIGINT); } break; case 157: /* type_name ::= FLOAT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_FLOAT); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_FLOAT); } break; case 158: /* type_name ::= DOUBLE */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_DOUBLE); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_DOUBLE); } break; case 159: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } +{ yymsp[-3].minor.yy304 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } break; case 160: /* type_name ::= TIMESTAMP */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } break; case 161: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } +{ yymsp[-3].minor.yy304 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } break; case 162: /* type_name ::= TINYINT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_UTINYINT); } +{ yymsp[-1].minor.yy304 = createDataType(TSDB_DATA_TYPE_UTINYINT); } break; case 163: /* type_name ::= SMALLINT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_USMALLINT); } +{ yymsp[-1].minor.yy304 = createDataType(TSDB_DATA_TYPE_USMALLINT); } break; case 164: /* type_name ::= INT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_UINT); } +{ yymsp[-1].minor.yy304 = createDataType(TSDB_DATA_TYPE_UINT); } break; case 165: /* type_name ::= BIGINT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_UBIGINT); } +{ yymsp[-1].minor.yy304 = createDataType(TSDB_DATA_TYPE_UBIGINT); } break; case 166: /* type_name ::= JSON */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_JSON); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_JSON); } break; case 167: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } +{ yymsp[-3].minor.yy304 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } break; case 168: /* type_name ::= MEDIUMBLOB */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } break; case 169: /* type_name ::= BLOB */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_BLOB); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_BLOB); } break; case 170: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } +{ yymsp[-3].minor.yy304 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } break; case 171: /* type_name ::= DECIMAL */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_DECIMAL); } +{ yymsp[0].minor.yy304 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; case 172: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createDataType(TSDB_DATA_TYPE_DECIMAL); } +{ yymsp[-3].minor.yy304 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; case 173: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ -{ yymsp[-5].minor.yy84 = createDataType(TSDB_DATA_TYPE_DECIMAL); } +{ yymsp[-5].minor.yy304 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; case 175: /* tags_def_opt ::= tags_def */ case 378: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==378); -{ yylhsminor.yy824 = yymsp[0].minor.yy824; } - yymsp[0].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = yymsp[0].minor.yy280; } + yymsp[0].minor.yy280 = yylhsminor.yy280; break; case 176: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ -{ yymsp[-3].minor.yy824 = yymsp[-1].minor.yy824; } +{ yymsp[-3].minor.yy280 = yymsp[-1].minor.yy280; } break; case 177: /* table_options ::= */ -{ yymsp[1].minor.yy312 = createDefaultTableOptions(pCxt); } +{ yymsp[1].minor.yy776 = createDefaultTableOptions(pCxt); } break; case 178: /* table_options ::= table_options COMMENT NK_STRING */ -{ yylhsminor.yy312 = setTableOption(pCxt, yymsp[-2].minor.yy312, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setTableOption(pCxt, yymsp[-2].minor.yy776, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 179: /* table_options ::= table_options MAX_DELAY duration_list */ -{ yylhsminor.yy312 = setTableOption(pCxt, yymsp[-2].minor.yy312, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setTableOption(pCxt, yymsp[-2].minor.yy776, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy280); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 180: /* table_options ::= table_options WATERMARK duration_list */ -{ yylhsminor.yy312 = setTableOption(pCxt, yymsp[-2].minor.yy312, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setTableOption(pCxt, yymsp[-2].minor.yy776, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy280); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 181: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ -{ yylhsminor.yy312 = setTableOption(pCxt, yymsp[-4].minor.yy312, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy824); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setTableOption(pCxt, yymsp[-4].minor.yy776, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy280); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 182: /* table_options ::= table_options TTL NK_INTEGER */ -{ yylhsminor.yy312 = setTableOption(pCxt, yymsp[-2].minor.yy312, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setTableOption(pCxt, yymsp[-2].minor.yy776, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 183: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ -{ yylhsminor.yy312 = setTableOption(pCxt, yymsp[-4].minor.yy312, TABLE_OPTION_SMA, yymsp[-1].minor.yy824); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setTableOption(pCxt, yymsp[-4].minor.yy776, TABLE_OPTION_SMA, yymsp[-1].minor.yy280); } + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 184: /* alter_table_options ::= alter_table_option */ -{ yylhsminor.yy312 = createAlterTableOptions(pCxt); yylhsminor.yy312 = setTableOption(pCxt, yylhsminor.yy312, yymsp[0].minor.yy405.type, &yymsp[0].minor.yy405.val); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createAlterTableOptions(pCxt); yylhsminor.yy776 = setTableOption(pCxt, yylhsminor.yy776, yymsp[0].minor.yy605.type, &yymsp[0].minor.yy605.val); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 185: /* alter_table_options ::= alter_table_options alter_table_option */ -{ yylhsminor.yy312 = setTableOption(pCxt, yymsp[-1].minor.yy312, yymsp[0].minor.yy405.type, &yymsp[0].minor.yy405.val); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setTableOption(pCxt, yymsp[-1].minor.yy776, yymsp[0].minor.yy605.type, &yymsp[0].minor.yy605.val); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 186: /* alter_table_option ::= COMMENT NK_STRING */ -{ yymsp[-1].minor.yy405.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy405.val = yymsp[0].minor.yy0; } +{ yymsp[-1].minor.yy605.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy605.val = yymsp[0].minor.yy0; } break; case 187: /* alter_table_option ::= TTL NK_INTEGER */ -{ yymsp[-1].minor.yy405.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy405.val = yymsp[0].minor.yy0; } +{ yymsp[-1].minor.yy605.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy605.val = yymsp[0].minor.yy0; } break; case 188: /* duration_list ::= duration_literal */ case 345: /* expression_list ::= expression */ yytestcase(yyruleno==345); -{ yylhsminor.yy824 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy312)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy776)); } + yymsp[0].minor.yy280 = yylhsminor.yy280; break; case 189: /* duration_list ::= duration_list NK_COMMA duration_literal */ case 346: /* expression_list ::= expression_list NK_COMMA expression */ yytestcase(yyruleno==346); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, releaseRawExprNode(pCxt, yymsp[0].minor.yy312)); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = addNodeToList(pCxt, yymsp[-2].minor.yy280, releaseRawExprNode(pCxt, yymsp[0].minor.yy776)); } + yymsp[-2].minor.yy280 = yylhsminor.yy280; break; case 192: /* rollup_func_name ::= function_name */ -{ yylhsminor.yy312 = createFunctionNode(pCxt, &yymsp[0].minor.yy149, NULL); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createFunctionNode(pCxt, &yymsp[0].minor.yy641, NULL); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 193: /* rollup_func_name ::= FIRST */ case 194: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==194); -{ yylhsminor.yy312 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 197: /* col_name ::= column_name */ -{ yylhsminor.yy312 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy149); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy641); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 198: /* cmd ::= SHOW DNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); } @@ -4094,13 +4060,13 @@ static YYACTIONTYPE yy_reduce( { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT); } break; case 201: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy312, yymsp[0].minor.yy312, OP_TYPE_LIKE); } +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy776, yymsp[0].minor.yy776, OP_TYPE_LIKE); } break; case 202: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy312, yymsp[0].minor.yy312, OP_TYPE_LIKE); } +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy776, yymsp[0].minor.yy776, OP_TYPE_LIKE); } break; case 203: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy312, NULL, OP_TYPE_LIKE); } +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy776, NULL, OP_TYPE_LIKE); } break; case 204: /* cmd ::= SHOW MNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); } @@ -4115,7 +4081,7 @@ static YYACTIONTYPE yy_reduce( { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); } break; case 208: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy312, yymsp[-1].minor.yy312, OP_TYPE_EQUAL); } +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy776, yymsp[-1].minor.yy776, OP_TYPE_EQUAL); } break; case 209: /* cmd ::= SHOW STREAMS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT); } @@ -4134,13 +4100,13 @@ static YYACTIONTYPE yy_reduce( { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); } break; case 215: /* cmd ::= SHOW CREATE DATABASE db_name */ -{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy641); } break; case 216: /* cmd ::= SHOW CREATE TABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy776); } break; case 217: /* cmd ::= SHOW CREATE STABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy776); } break; case 218: /* cmd ::= SHOW QUERIES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); } @@ -4173,7 +4139,7 @@ static YYACTIONTYPE yy_reduce( { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); } break; case 228: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ -{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy776); } break; case 229: /* cmd ::= SHOW CONSUMERS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); } @@ -4182,7 +4148,7 @@ static YYACTIONTYPE yy_reduce( { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); } break; case 231: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy312, yymsp[-1].minor.yy312, OP_TYPE_EQUAL); } +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy776, yymsp[-1].minor.yy776, OP_TYPE_EQUAL); } break; case 232: /* cmd ::= SHOW VNODES NK_INTEGER */ { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0), NULL); } @@ -4192,11 +4158,11 @@ static YYACTIONTYPE yy_reduce( break; case 234: /* db_name_cond_opt ::= */ case 239: /* from_db_opt ::= */ yytestcase(yyruleno==239); -{ yymsp[1].minor.yy312 = createDefaultDatabaseCondValue(pCxt); } +{ yymsp[1].minor.yy776 = createDefaultDatabaseCondValue(pCxt); } break; case 235: /* db_name_cond_opt ::= db_name NK_DOT */ -{ yylhsminor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy149); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy641); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 236: /* like_pattern_opt ::= */ case 411: /* from_clause_opt ::= */ yytestcase(yyruleno==411); @@ -4207,129 +4173,129 @@ static YYACTIONTYPE yy_reduce( case 463: /* having_clause_opt ::= */ yytestcase(yyruleno==463); case 465: /* range_opt ::= */ yytestcase(yyruleno==465); case 467: /* every_opt ::= */ yytestcase(yyruleno==467); - case 477: /* slimit_clause_opt ::= */ yytestcase(yyruleno==477); - case 481: /* limit_clause_opt ::= */ yytestcase(yyruleno==481); -{ yymsp[1].minor.yy312 = NULL; } + case 480: /* slimit_clause_opt ::= */ yytestcase(yyruleno==480); + case 484: /* limit_clause_opt ::= */ yytestcase(yyruleno==484); +{ yymsp[1].minor.yy776 = NULL; } break; case 237: /* like_pattern_opt ::= LIKE NK_STRING */ -{ yymsp[-1].minor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } +{ yymsp[-1].minor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } break; case 238: /* table_name_cond ::= table_name */ -{ yylhsminor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy149); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy641); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 240: /* from_db_opt ::= FROM db_name */ -{ yymsp[-1].minor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy149); } +{ yymsp[-1].minor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy641); } break; case 241: /* cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */ -{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy497, yymsp[-3].minor.yy312, yymsp[-1].minor.yy312, NULL, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy281, yymsp[-3].minor.yy776, yymsp[-1].minor.yy776, NULL, yymsp[0].minor.yy776); } break; case 242: /* cmd ::= DROP INDEX exists_opt full_table_name */ -{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy497, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy281, yymsp[0].minor.yy776); } break; case 243: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ -{ yymsp[-9].minor.yy312 = createIndexOption(pCxt, yymsp[-7].minor.yy824, releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), NULL, yymsp[-1].minor.yy312, yymsp[0].minor.yy312); } +{ yymsp[-9].minor.yy776 = createIndexOption(pCxt, yymsp[-7].minor.yy280, releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), NULL, yymsp[-1].minor.yy776, yymsp[0].minor.yy776); } break; case 244: /* 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.yy312 = createIndexOption(pCxt, yymsp[-9].minor.yy824, releaseRawExprNode(pCxt, yymsp[-5].minor.yy312), releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), yymsp[-1].minor.yy312, yymsp[0].minor.yy312); } +{ yymsp[-11].minor.yy776 = createIndexOption(pCxt, yymsp[-9].minor.yy280, releaseRawExprNode(pCxt, yymsp[-5].minor.yy776), releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), yymsp[-1].minor.yy776, yymsp[0].minor.yy776); } break; case 247: /* func ::= function_name NK_LP expression_list NK_RP */ -{ yylhsminor.yy312 = createFunctionNode(pCxt, &yymsp[-3].minor.yy149, yymsp[-1].minor.yy824); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createFunctionNode(pCxt, &yymsp[-3].minor.yy641, yymsp[-1].minor.yy280); } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 248: /* sma_stream_opt ::= */ case 275: /* stream_options ::= */ yytestcase(yyruleno==275); -{ yymsp[1].minor.yy312 = createStreamOptions(pCxt); } +{ yymsp[1].minor.yy776 = createStreamOptions(pCxt); } break; case 249: /* sma_stream_opt ::= stream_options WATERMARK duration_literal */ case 279: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==279); -{ ((SStreamOptions*)yymsp[-2].minor.yy312)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy312); yylhsminor.yy312 = yymsp[-2].minor.yy312; } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ ((SStreamOptions*)yymsp[-2].minor.yy776)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy776); yylhsminor.yy776 = yymsp[-2].minor.yy776; } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 250: /* sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-2].minor.yy312)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy312); yylhsminor.yy312 = yymsp[-2].minor.yy312; } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ ((SStreamOptions*)yymsp[-2].minor.yy776)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy776); yylhsminor.yy776 = yymsp[-2].minor.yy776; } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; - case 251: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_expression */ -{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy497, &yymsp[-2].minor.yy149, yymsp[0].minor.yy312); } + case 251: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ +{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy281, &yymsp[-2].minor.yy641, yymsp[0].minor.yy776); } break; case 252: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy497, &yymsp[-3].minor.yy149, &yymsp[0].minor.yy149, false); } +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy281, &yymsp[-3].minor.yy641, &yymsp[0].minor.yy641, false); } break; case 253: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy497, &yymsp[-5].minor.yy149, &yymsp[0].minor.yy149, true); } +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy281, &yymsp[-5].minor.yy641, &yymsp[0].minor.yy641, true); } break; case 254: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy497, &yymsp[-3].minor.yy149, yymsp[0].minor.yy312, false); } +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy281, &yymsp[-3].minor.yy641, yymsp[0].minor.yy776, false); } break; case 255: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy497, &yymsp[-5].minor.yy149, yymsp[0].minor.yy312, true); } +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy281, &yymsp[-5].minor.yy641, yymsp[0].minor.yy776, true); } break; case 256: /* cmd ::= DROP TOPIC exists_opt topic_name */ -{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy497, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy281, &yymsp[0].minor.yy641); } break; case 257: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ -{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy497, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy281, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy641); } break; case 258: /* cmd ::= DESC full_table_name */ case 259: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==259); -{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy776); } break; case 260: /* cmd ::= RESET QUERY CACHE */ { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); } break; - case 261: /* cmd ::= EXPLAIN analyze_opt explain_options query_expression */ -{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy497, yymsp[-1].minor.yy312, yymsp[0].minor.yy312); } + case 261: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ +{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy281, yymsp[-1].minor.yy776, yymsp[0].minor.yy776); } break; case 263: /* analyze_opt ::= ANALYZE */ case 270: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==270); case 431: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==431); -{ yymsp[0].minor.yy497 = true; } +{ yymsp[0].minor.yy281 = true; } break; case 264: /* explain_options ::= */ -{ yymsp[1].minor.yy312 = createDefaultExplainOptions(pCxt); } +{ yymsp[1].minor.yy776 = createDefaultExplainOptions(pCxt); } break; case 265: /* explain_options ::= explain_options VERBOSE NK_BOOL */ -{ yylhsminor.yy312 = setExplainVerbose(pCxt, yymsp[-2].minor.yy312, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setExplainVerbose(pCxt, yymsp[-2].minor.yy776, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 266: /* explain_options ::= explain_options RATIO NK_FLOAT */ -{ yylhsminor.yy312 = setExplainRatio(pCxt, yymsp[-2].minor.yy312, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setExplainRatio(pCxt, yymsp[-2].minor.yy776, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 267: /* 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.yy497, yymsp[-8].minor.yy497, &yymsp[-5].minor.yy149, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy84, yymsp[0].minor.yy160); } +{ pCxt->pRootNode = createCreateFunctionStmt(pCxt, yymsp[-6].minor.yy281, yymsp[-8].minor.yy281, &yymsp[-5].minor.yy641, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy304, yymsp[0].minor.yy100); } break; case 268: /* cmd ::= DROP FUNCTION exists_opt function_name */ -{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy497, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy281, &yymsp[0].minor.yy641); } break; case 271: /* bufsize_opt ::= */ -{ yymsp[1].minor.yy160 = 0; } +{ yymsp[1].minor.yy100 = 0; } break; case 272: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ -{ yymsp[-1].minor.yy160 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } +{ yymsp[-1].minor.yy100 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } break; - case 273: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name AS query_expression */ -{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-6].minor.yy497, &yymsp[-5].minor.yy149, yymsp[-2].minor.yy312, yymsp[-4].minor.yy312, yymsp[0].minor.yy312); } + case 273: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name AS query_or_subquery */ +{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-6].minor.yy281, &yymsp[-5].minor.yy641, yymsp[-2].minor.yy776, yymsp[-4].minor.yy776, yymsp[0].minor.yy776); } break; case 274: /* cmd ::= DROP STREAM exists_opt stream_name */ -{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy497, &yymsp[0].minor.yy149); } +{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy281, &yymsp[0].minor.yy641); } break; case 276: /* stream_options ::= stream_options TRIGGER AT_ONCE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy312)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy312 = yymsp[-2].minor.yy312; } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ ((SStreamOptions*)yymsp[-2].minor.yy776)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy776 = yymsp[-2].minor.yy776; } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 277: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy312)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy312 = yymsp[-2].minor.yy312; } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ ((SStreamOptions*)yymsp[-2].minor.yy776)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy776 = yymsp[-2].minor.yy776; } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 278: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-3].minor.yy312)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy312)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy312); yylhsminor.yy312 = yymsp[-3].minor.yy312; } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ ((SStreamOptions*)yymsp[-3].minor.yy776)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy776)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy776); yylhsminor.yy776 = yymsp[-3].minor.yy776; } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 280: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ -{ ((SStreamOptions*)yymsp[-3].minor.yy312)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy312 = yymsp[-3].minor.yy312; } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ ((SStreamOptions*)yymsp[-3].minor.yy776)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy776 = yymsp[-3].minor.yy776; } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 281: /* cmd ::= KILL CONNECTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &yymsp[0].minor.yy0); } @@ -4347,42 +4313,42 @@ static YYACTIONTYPE yy_reduce( { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; case 286: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ -{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy824); } +{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy280); } break; case 287: /* cmd ::= SPLIT VGROUP NK_INTEGER */ { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &yymsp[0].minor.yy0); } break; case 288: /* dnode_list ::= DNODE NK_INTEGER */ -{ yymsp[-1].minor.yy824 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } +{ yymsp[-1].minor.yy280 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } break; case 290: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ -{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy312, yymsp[0].minor.yy312); } +{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy776, yymsp[0].minor.yy776); } break; - case 292: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_expression */ -{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy312, yymsp[-2].minor.yy824, yymsp[0].minor.yy312); } + case 292: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ +{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy776, yymsp[-2].minor.yy280, yymsp[0].minor.yy776); } break; - case 293: /* cmd ::= INSERT INTO full_table_name query_expression */ -{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy312, NULL, yymsp[0].minor.yy312); } + case 293: /* cmd ::= INSERT INTO full_table_name query_or_subquery */ +{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy776, NULL, yymsp[0].minor.yy776); } break; case 294: /* literal ::= NK_INTEGER */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 295: /* literal ::= NK_FLOAT */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 296: /* literal ::= NK_STRING */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 297: /* literal ::= NK_BOOL */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 298: /* literal ::= TIMESTAMP NK_STRING */ -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 299: /* literal ::= duration_literal */ case 309: /* signed_literal ::= signed */ yytestcase(yyruleno==309); @@ -4400,169 +4366,173 @@ static YYACTIONTYPE yy_reduce( case 415: /* table_reference ::= table_primary */ yytestcase(yyruleno==415); case 416: /* table_reference ::= joined_table */ yytestcase(yyruleno==416); case 420: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==420); - case 470: /* query_expression_body ::= query_primary */ yytestcase(yyruleno==470); - case 473: /* query_primary ::= query_specification */ yytestcase(yyruleno==473); -{ yylhsminor.yy312 = yymsp[0].minor.yy312; } - yymsp[0].minor.yy312 = yylhsminor.yy312; + case 470: /* query_simple ::= query_specification */ yytestcase(yyruleno==470); + case 471: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==471); + case 474: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==474); + case 475: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==475); + case 476: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==476); + case 477: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==477); +{ yylhsminor.yy776 = yymsp[0].minor.yy776; } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 300: /* literal ::= NULL */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 301: /* literal ::= NK_QUESTION */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 302: /* duration_literal ::= NK_VARIABLE */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 303: /* signed ::= NK_INTEGER */ -{ yylhsminor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 304: /* signed ::= NK_PLUS NK_INTEGER */ -{ yymsp[-1].minor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } +{ yymsp[-1].minor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } break; case 305: /* 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.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); + yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 306: /* signed ::= NK_FLOAT */ -{ yylhsminor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 307: /* signed ::= NK_PLUS NK_FLOAT */ -{ yymsp[-1].minor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } +{ yymsp[-1].minor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } break; case 308: /* 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.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); + yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 310: /* signed_literal ::= NK_STRING */ -{ yylhsminor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 311: /* signed_literal ::= NK_BOOL */ -{ yylhsminor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 312: /* signed_literal ::= TIMESTAMP NK_STRING */ -{ yymsp[-1].minor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } +{ yymsp[-1].minor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } break; case 313: /* signed_literal ::= duration_literal */ case 315: /* signed_literal ::= literal_func */ yytestcase(yyruleno==315); case 381: /* star_func_para ::= expression */ yytestcase(yyruleno==381); case 436: /* select_item ::= common_expression */ yytestcase(yyruleno==436); - case 486: /* search_condition ::= common_expression */ yytestcase(yyruleno==486); -{ yylhsminor.yy312 = releaseRawExprNode(pCxt, yymsp[0].minor.yy312); } - yymsp[0].minor.yy312 = yylhsminor.yy312; + case 489: /* search_condition ::= common_expression */ yytestcase(yyruleno==489); +{ yylhsminor.yy776 = releaseRawExprNode(pCxt, yymsp[0].minor.yy776); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 314: /* signed_literal ::= NULL */ -{ yylhsminor.yy312 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 316: /* signed_literal ::= NK_QUESTION */ -{ yylhsminor.yy312 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 334: /* expression ::= NK_LP expression NK_RP */ case 408: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==408); -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy312)); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy776)); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 335: /* expression ::= NK_PLUS expression */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy312)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy776)); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 336: /* expression ::= NK_MINUS expression */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy312), NULL)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy776), NULL)); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 337: /* expression ::= expression NK_PLUS expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 338: /* expression ::= expression NK_MINUS expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 339: /* expression ::= expression NK_STAR expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 340: /* expression ::= expression NK_SLASH expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 341: /* expression ::= expression NK_REM expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 342: /* expression ::= column_reference NK_ARROW NK_STRING */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 343: /* expression ::= expression NK_BITAND expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 344: /* expression ::= expression NK_BITOR expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 347: /* column_reference ::= column_name */ -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy149, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy149)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy641, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy641)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 348: /* column_reference ::= table_name NK_DOT column_name */ -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy149, createColumnNode(pCxt, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy149)); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy641, createColumnNode(pCxt, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy641)); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 349: /* pseudo_column ::= ROWTS */ case 350: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==350); @@ -4573,326 +4543,319 @@ static YYACTIONTYPE yy_reduce( case 356: /* pseudo_column ::= WEND */ yytestcase(yyruleno==356); case 357: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==357); case 363: /* literal_func ::= NOW */ yytestcase(yyruleno==363); -{ yylhsminor.yy312 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 351: /* pseudo_column ::= table_name NK_DOT TBNAME */ -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy149)))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy641)))); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 358: /* function_expression ::= function_name NK_LP expression_list NK_RP */ case 359: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==359); -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy149, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy149, yymsp[-1].minor.yy824)); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy641, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy641, yymsp[-1].minor.yy280)); } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 360: /* function_expression ::= CAST NK_LP expression AS type_name NK_RP */ -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), yymsp[-1].minor.yy84)); } - yymsp[-5].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), yymsp[-1].minor.yy304)); } + yymsp[-5].minor.yy776 = yylhsminor.yy776; break; case 362: /* literal_func ::= noarg_func NK_LP NK_RP */ -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy149, NULL)); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy641, NULL)); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 377: /* star_func_para_list ::= NK_STAR */ -{ yylhsminor.yy824 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy280 = yylhsminor.yy280; break; case 382: /* star_func_para ::= table_name NK_DOT NK_STAR */ case 439: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==439); -{ yylhsminor.yy312 = createColumnNode(pCxt, &yymsp[-2].minor.yy149, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createColumnNode(pCxt, &yymsp[-2].minor.yy641, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 383: /* predicate ::= expression compare_op expression */ case 388: /* predicate ::= expression in_op in_predicate_value */ yytestcase(yyruleno==388); { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy320, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy668, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 384: /* predicate ::= expression BETWEEN expression AND expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy312), releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy776), releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-4].minor.yy312 = yylhsminor.yy312; + yymsp[-4].minor.yy776 = yylhsminor.yy776; break; case 385: /* predicate ::= expression NOT BETWEEN expression AND expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy312), releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy776), releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-5].minor.yy312 = yylhsminor.yy312; + yymsp[-5].minor.yy776 = yylhsminor.yy776; break; case 386: /* predicate ::= expression IS NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), NULL)); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 387: /* predicate ::= expression IS NOT NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), NULL)); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 389: /* compare_op ::= NK_LT */ -{ yymsp[0].minor.yy320 = OP_TYPE_LOWER_THAN; } +{ yymsp[0].minor.yy668 = OP_TYPE_LOWER_THAN; } break; case 390: /* compare_op ::= NK_GT */ -{ yymsp[0].minor.yy320 = OP_TYPE_GREATER_THAN; } +{ yymsp[0].minor.yy668 = OP_TYPE_GREATER_THAN; } break; case 391: /* compare_op ::= NK_LE */ -{ yymsp[0].minor.yy320 = OP_TYPE_LOWER_EQUAL; } +{ yymsp[0].minor.yy668 = OP_TYPE_LOWER_EQUAL; } break; case 392: /* compare_op ::= NK_GE */ -{ yymsp[0].minor.yy320 = OP_TYPE_GREATER_EQUAL; } +{ yymsp[0].minor.yy668 = OP_TYPE_GREATER_EQUAL; } break; case 393: /* compare_op ::= NK_NE */ -{ yymsp[0].minor.yy320 = OP_TYPE_NOT_EQUAL; } +{ yymsp[0].minor.yy668 = OP_TYPE_NOT_EQUAL; } break; case 394: /* compare_op ::= NK_EQ */ -{ yymsp[0].minor.yy320 = OP_TYPE_EQUAL; } +{ yymsp[0].minor.yy668 = OP_TYPE_EQUAL; } break; case 395: /* compare_op ::= LIKE */ -{ yymsp[0].minor.yy320 = OP_TYPE_LIKE; } +{ yymsp[0].minor.yy668 = OP_TYPE_LIKE; } break; case 396: /* compare_op ::= NOT LIKE */ -{ yymsp[-1].minor.yy320 = OP_TYPE_NOT_LIKE; } +{ yymsp[-1].minor.yy668 = OP_TYPE_NOT_LIKE; } break; case 397: /* compare_op ::= MATCH */ -{ yymsp[0].minor.yy320 = OP_TYPE_MATCH; } +{ yymsp[0].minor.yy668 = OP_TYPE_MATCH; } break; case 398: /* compare_op ::= NMATCH */ -{ yymsp[0].minor.yy320 = OP_TYPE_NMATCH; } +{ yymsp[0].minor.yy668 = OP_TYPE_NMATCH; } break; case 399: /* compare_op ::= CONTAINS */ -{ yymsp[0].minor.yy320 = OP_TYPE_JSON_CONTAINS; } +{ yymsp[0].minor.yy668 = OP_TYPE_JSON_CONTAINS; } break; case 400: /* in_op ::= IN */ -{ yymsp[0].minor.yy320 = OP_TYPE_IN; } +{ yymsp[0].minor.yy668 = OP_TYPE_IN; } break; case 401: /* in_op ::= NOT IN */ -{ yymsp[-1].minor.yy320 = OP_TYPE_NOT_IN; } +{ yymsp[-1].minor.yy668 = OP_TYPE_NOT_IN; } break; case 402: /* in_predicate_value ::= NK_LP literal_list NK_RP */ -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy824)); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy280)); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 404: /* boolean_value_expression ::= NOT boolean_primary */ { - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy312), NULL)); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy776), NULL)); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 405: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 406: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy312); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy312); - yylhsminor.yy312 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy776); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy776); + yylhsminor.yy776 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 412: /* from_clause_opt ::= FROM table_reference_list */ case 441: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==441); case 464: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==464); -{ yymsp[-1].minor.yy312 = yymsp[0].minor.yy312; } +{ yymsp[-1].minor.yy776 = yymsp[0].minor.yy776; } break; case 414: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ -{ yylhsminor.yy312 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy312, yymsp[0].minor.yy312, NULL); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy776, yymsp[0].minor.yy776, NULL); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 417: /* table_primary ::= table_name alias_opt */ -{ yylhsminor.yy312 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy149, &yymsp[0].minor.yy149); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy641, &yymsp[0].minor.yy641); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 418: /* table_primary ::= db_name NK_DOT table_name alias_opt */ -{ yylhsminor.yy312 = createRealTableNode(pCxt, &yymsp[-3].minor.yy149, &yymsp[-1].minor.yy149, &yymsp[0].minor.yy149); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createRealTableNode(pCxt, &yymsp[-3].minor.yy641, &yymsp[-1].minor.yy641, &yymsp[0].minor.yy641); } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; case 419: /* table_primary ::= subquery alias_opt */ -{ yylhsminor.yy312 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy312), &yymsp[0].minor.yy149); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy776), &yymsp[0].minor.yy641); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 421: /* alias_opt ::= */ -{ yymsp[1].minor.yy149 = nil_token; } +{ yymsp[1].minor.yy641 = nil_token; } break; case 422: /* alias_opt ::= table_alias */ -{ yylhsminor.yy149 = yymsp[0].minor.yy149; } - yymsp[0].minor.yy149 = yylhsminor.yy149; +{ yylhsminor.yy641 = yymsp[0].minor.yy641; } + yymsp[0].minor.yy641 = yylhsminor.yy641; break; case 423: /* alias_opt ::= AS table_alias */ -{ yymsp[-1].minor.yy149 = yymsp[0].minor.yy149; } +{ yymsp[-1].minor.yy641 = yymsp[0].minor.yy641; } break; case 424: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ case 425: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==425); -{ yymsp[-2].minor.yy312 = yymsp[-1].minor.yy312; } +{ yymsp[-2].minor.yy776 = yymsp[-1].minor.yy776; } break; case 426: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ -{ yylhsminor.yy312 = createJoinTableNode(pCxt, yymsp[-4].minor.yy832, yymsp[-5].minor.yy312, yymsp[-2].minor.yy312, yymsp[0].minor.yy312); } - yymsp[-5].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createJoinTableNode(pCxt, yymsp[-4].minor.yy468, yymsp[-5].minor.yy776, yymsp[-2].minor.yy776, yymsp[0].minor.yy776); } + yymsp[-5].minor.yy776 = yylhsminor.yy776; break; case 427: /* join_type ::= */ -{ yymsp[1].minor.yy832 = JOIN_TYPE_INNER; } +{ yymsp[1].minor.yy468 = JOIN_TYPE_INNER; } break; case 428: /* join_type ::= INNER */ -{ yymsp[0].minor.yy832 = JOIN_TYPE_INNER; } +{ yymsp[0].minor.yy468 = JOIN_TYPE_INNER; } break; case 429: /* 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.yy312 = createSelectStmt(pCxt, yymsp[-10].minor.yy497, yymsp[-9].minor.yy824, yymsp[-8].minor.yy312); - yymsp[-11].minor.yy312 = addWhereClause(pCxt, yymsp[-11].minor.yy312, yymsp[-7].minor.yy312); - yymsp[-11].minor.yy312 = addPartitionByClause(pCxt, yymsp[-11].minor.yy312, yymsp[-6].minor.yy824); - yymsp[-11].minor.yy312 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy312, yymsp[-2].minor.yy312); - yymsp[-11].minor.yy312 = addGroupByClause(pCxt, yymsp[-11].minor.yy312, yymsp[-1].minor.yy824); - yymsp[-11].minor.yy312 = addHavingClause(pCxt, yymsp[-11].minor.yy312, yymsp[0].minor.yy312); - yymsp[-11].minor.yy312 = addRangeClause(pCxt, yymsp[-11].minor.yy312, yymsp[-5].minor.yy312); - yymsp[-11].minor.yy312 = addEveryClause(pCxt, yymsp[-11].minor.yy312, yymsp[-4].minor.yy312); - yymsp[-11].minor.yy312 = addFillClause(pCxt, yymsp[-11].minor.yy312, yymsp[-3].minor.yy312); + yymsp[-11].minor.yy776 = createSelectStmt(pCxt, yymsp[-10].minor.yy281, yymsp[-9].minor.yy280, yymsp[-8].minor.yy776); + yymsp[-11].minor.yy776 = addWhereClause(pCxt, yymsp[-11].minor.yy776, yymsp[-7].minor.yy776); + yymsp[-11].minor.yy776 = addPartitionByClause(pCxt, yymsp[-11].minor.yy776, yymsp[-6].minor.yy280); + yymsp[-11].minor.yy776 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy776, yymsp[-2].minor.yy776); + yymsp[-11].minor.yy776 = addGroupByClause(pCxt, yymsp[-11].minor.yy776, yymsp[-1].minor.yy280); + yymsp[-11].minor.yy776 = addHavingClause(pCxt, yymsp[-11].minor.yy776, yymsp[0].minor.yy776); + yymsp[-11].minor.yy776 = addRangeClause(pCxt, yymsp[-11].minor.yy776, yymsp[-5].minor.yy776); + yymsp[-11].minor.yy776 = addEveryClause(pCxt, yymsp[-11].minor.yy776, yymsp[-4].minor.yy776); + yymsp[-11].minor.yy776 = addFillClause(pCxt, yymsp[-11].minor.yy776, yymsp[-3].minor.yy776); } break; case 432: /* set_quantifier_opt ::= ALL */ -{ yymsp[0].minor.yy497 = false; } +{ yymsp[0].minor.yy281 = false; } break; case 435: /* select_item ::= NK_STAR */ -{ yylhsminor.yy312 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy776 = yylhsminor.yy776; break; case 437: /* select_item ::= common_expression column_alias */ -{ yylhsminor.yy312 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy312), &yymsp[0].minor.yy149); } - yymsp[-1].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy776), &yymsp[0].minor.yy641); } + yymsp[-1].minor.yy776 = yylhsminor.yy776; break; case 438: /* select_item ::= common_expression AS column_alias */ -{ yylhsminor.yy312 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), &yymsp[0].minor.yy149); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; +{ yylhsminor.yy776 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), &yymsp[0].minor.yy641); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; case 443: /* partition_by_clause_opt ::= PARTITION BY expression_list */ case 460: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==460); - case 476: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==476); -{ yymsp[-2].minor.yy824 = yymsp[0].minor.yy824; } + case 479: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==479); +{ yymsp[-2].minor.yy280 = yymsp[0].minor.yy280; } break; case 445: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ -{ yymsp[-5].minor.yy312 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), releaseRawExprNode(pCxt, yymsp[-1].minor.yy312)); } +{ yymsp[-5].minor.yy776 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), releaseRawExprNode(pCxt, yymsp[-1].minor.yy776)); } break; case 446: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */ -{ yymsp[-3].minor.yy312 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy312)); } +{ yymsp[-3].minor.yy776 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy776)); } break; case 447: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-5].minor.yy312 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), NULL, yymsp[-1].minor.yy312, yymsp[0].minor.yy312); } +{ yymsp[-5].minor.yy776 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), NULL, yymsp[-1].minor.yy776, yymsp[0].minor.yy776); } break; case 448: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-7].minor.yy312 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy312), releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), yymsp[-1].minor.yy312, yymsp[0].minor.yy312); } +{ yymsp[-7].minor.yy776 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy776), releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), yymsp[-1].minor.yy776, yymsp[0].minor.yy776); } break; case 450: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ case 468: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==468); -{ yymsp[-3].minor.yy312 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy312); } +{ yymsp[-3].minor.yy776 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy776); } break; case 452: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ -{ yymsp[-3].minor.yy312 = createFillNode(pCxt, yymsp[-1].minor.yy134, NULL); } +{ yymsp[-3].minor.yy776 = createFillNode(pCxt, yymsp[-1].minor.yy774, NULL); } break; case 453: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ -{ yymsp[-5].minor.yy312 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy824)); } +{ yymsp[-5].minor.yy776 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy280)); } break; case 454: /* fill_mode ::= NONE */ -{ yymsp[0].minor.yy134 = FILL_MODE_NONE; } +{ yymsp[0].minor.yy774 = FILL_MODE_NONE; } break; case 455: /* fill_mode ::= PREV */ -{ yymsp[0].minor.yy134 = FILL_MODE_PREV; } +{ yymsp[0].minor.yy774 = FILL_MODE_PREV; } break; case 456: /* fill_mode ::= NULL */ -{ yymsp[0].minor.yy134 = FILL_MODE_NULL; } +{ yymsp[0].minor.yy774 = FILL_MODE_NULL; } break; case 457: /* fill_mode ::= LINEAR */ -{ yymsp[0].minor.yy134 = FILL_MODE_LINEAR; } +{ yymsp[0].minor.yy774 = FILL_MODE_LINEAR; } break; case 458: /* fill_mode ::= NEXT */ -{ yymsp[0].minor.yy134 = FILL_MODE_NEXT; } +{ yymsp[0].minor.yy774 = FILL_MODE_NEXT; } break; case 461: /* group_by_list ::= expression */ -{ yylhsminor.yy824 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); } - yymsp[0].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } + yymsp[0].minor.yy280 = yylhsminor.yy280; break; case 462: /* group_by_list ::= group_by_list NK_COMMA expression */ -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy312))); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; +{ yylhsminor.yy280 = addNodeToList(pCxt, yymsp[-2].minor.yy280, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy776))); } + yymsp[-2].minor.yy280 = yylhsminor.yy280; break; case 466: /* range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */ -{ yymsp[-5].minor.yy312 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy312), releaseRawExprNode(pCxt, yymsp[-1].minor.yy312)); } +{ yymsp[-5].minor.yy776 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy776), releaseRawExprNode(pCxt, yymsp[-1].minor.yy776)); } break; - case 469: /* query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */ -{ - yylhsminor.yy312 = addOrderByClause(pCxt, yymsp[-3].minor.yy312, yymsp[-2].minor.yy824); - yylhsminor.yy312 = addSlimitClause(pCxt, yylhsminor.yy312, yymsp[-1].minor.yy312); - yylhsminor.yy312 = addLimitClause(pCxt, yylhsminor.yy312, yymsp[0].minor.yy312); + case 469: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ +{ + yylhsminor.yy776 = addOrderByClause(pCxt, yymsp[-3].minor.yy776, yymsp[-2].minor.yy280); + yylhsminor.yy776 = addSlimitClause(pCxt, yylhsminor.yy776, yymsp[-1].minor.yy776); + yylhsminor.yy776 = addLimitClause(pCxt, yylhsminor.yy776, yymsp[0].minor.yy776); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; - case 471: /* query_expression_body ::= query_expression_body UNION ALL query_expression_body */ -{ yylhsminor.yy312 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy312, yymsp[0].minor.yy312); } - yymsp[-3].minor.yy312 = yylhsminor.yy312; + case 472: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ +{ yylhsminor.yy776 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy776, yymsp[0].minor.yy776); } + yymsp[-3].minor.yy776 = yylhsminor.yy776; break; - case 472: /* query_expression_body ::= query_expression_body UNION query_expression_body */ -{ yylhsminor.yy312 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy312, yymsp[0].minor.yy312); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + case 473: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ +{ yylhsminor.yy776 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy776, yymsp[0].minor.yy776); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; - case 474: /* query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */ -{ - yymsp[-5].minor.yy312 = addOrderByClause(pCxt, yymsp[-4].minor.yy312, yymsp[-3].minor.yy824); - yymsp[-5].minor.yy312 = addSlimitClause(pCxt, yymsp[-5].minor.yy312, yymsp[-2].minor.yy312); - yymsp[-5].minor.yy312 = addLimitClause(pCxt, yymsp[-5].minor.yy312, yymsp[-1].minor.yy312); - } + case 481: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ + case 485: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==485); +{ yymsp[-1].minor.yy776 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } break; - case 478: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ - case 482: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==482); -{ yymsp[-1].minor.yy312 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } + case 482: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + case 486: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==486); +{ yymsp[-3].minor.yy776 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; - case 479: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - case 483: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==483); -{ yymsp[-3].minor.yy312 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } + case 483: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + case 487: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==487); +{ yymsp[-3].minor.yy776 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } break; - case 480: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - case 484: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==484); -{ yymsp[-3].minor.yy312 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } + case 488: /* subquery ::= NK_LP query_expression NK_RP */ +{ yylhsminor.yy776 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy776); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; - case 485: /* subquery ::= NK_LP query_expression NK_RP */ -{ yylhsminor.yy312 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy312); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + case 492: /* sort_specification ::= expression ordering_specification_opt null_ordering_opt */ +{ yylhsminor.yy776 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy776), yymsp[-1].minor.yy2, yymsp[0].minor.yy649); } + yymsp[-2].minor.yy776 = yylhsminor.yy776; break; - case 489: /* sort_specification ::= expression ordering_specification_opt null_ordering_opt */ -{ yylhsminor.yy312 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy312), yymsp[-1].minor.yy158, yymsp[0].minor.yy417); } - yymsp[-2].minor.yy312 = yylhsminor.yy312; + case 493: /* ordering_specification_opt ::= */ +{ yymsp[1].minor.yy2 = ORDER_ASC; } break; - case 490: /* ordering_specification_opt ::= */ -{ yymsp[1].minor.yy158 = ORDER_ASC; } + case 494: /* ordering_specification_opt ::= ASC */ +{ yymsp[0].minor.yy2 = ORDER_ASC; } break; - case 491: /* ordering_specification_opt ::= ASC */ -{ yymsp[0].minor.yy158 = ORDER_ASC; } + case 495: /* ordering_specification_opt ::= DESC */ +{ yymsp[0].minor.yy2 = ORDER_DESC; } break; - case 492: /* ordering_specification_opt ::= DESC */ -{ yymsp[0].minor.yy158 = ORDER_DESC; } + case 496: /* null_ordering_opt ::= */ +{ yymsp[1].minor.yy649 = NULL_ORDER_DEFAULT; } break; - case 493: /* null_ordering_opt ::= */ -{ yymsp[1].minor.yy417 = NULL_ORDER_DEFAULT; } + case 497: /* null_ordering_opt ::= NULLS FIRST */ +{ yymsp[-1].minor.yy649 = NULL_ORDER_FIRST; } break; - case 494: /* null_ordering_opt ::= NULLS FIRST */ -{ yymsp[-1].minor.yy417 = NULL_ORDER_FIRST; } - break; - case 495: /* null_ordering_opt ::= NULLS LAST */ -{ yymsp[-1].minor.yy417 = NULL_ORDER_LAST; } + case 498: /* null_ordering_opt ::= NULLS LAST */ +{ yymsp[-1].minor.yy649 = NULL_ORDER_LAST; } break; default: break; From 273adb989591111e4671c4a4f4bf14ec31d5da6a Mon Sep 17 00:00:00 2001 From: Liu Jicong Date: Fri, 16 Sep 2022 14:36:01 +0800 Subject: [PATCH 11/21] fix memory leak --- include/common/tmsg.h | 2 +- include/libs/stream/streamState.h | 3 --- source/client/src/clientImpl.c | 1 + source/client/src/clientTmq.c | 6 +++-- source/dnode/mnode/impl/src/mndConsumer.c | 1 + source/dnode/mnode/impl/src/mndDef.c | 28 ++++++++++++---------- source/dnode/mnode/impl/src/mndStb.c | 27 ++++++++++++++------- source/dnode/mnode/impl/src/mndSubscribe.c | 8 +++++++ source/dnode/mnode/impl/src/mndTopic.c | 13 ++++++++++ source/dnode/vnode/src/tq/tqOffset.c | 1 + source/util/src/tarray.c | 9 +++---- 11 files changed, 67 insertions(+), 32 deletions(-) diff --git a/include/common/tmsg.h b/include/common/tmsg.h index dfce7e54d0..ac6ce82ffb 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -2956,7 +2956,7 @@ static FORCE_INLINE void* tDecodeSMqSubTopicEp(void* buf, SMqSubTopicEp* pTopicE } static FORCE_INLINE void tDeleteSMqSubTopicEp(SMqSubTopicEp* pSubTopicEp) { - // taosMemoryFree(pSubTopicEp->schema.pSchema); + if (pSubTopicEp->schema.nCols) taosMemoryFreeClear(pSubTopicEp->schema.pSchema); taosArrayDestroy(pSubTopicEp->vgs); } diff --git a/include/libs/stream/streamState.h b/include/libs/stream/streamState.h index df19544396..80fa7a7218 100644 --- a/include/libs/stream/streamState.h +++ b/include/libs/stream/streamState.h @@ -44,7 +44,6 @@ typedef struct { TBC* pCur; } SStreamStateCur; -#if 1 int32_t streamStateFuncPut(SStreamState* pState, const STupleKey* key, const void* value, int32_t vLen); int32_t streamStateFuncGet(SStreamState* pState, const STupleKey* key, void** pVal, int32_t* pVLen); int32_t streamStateFuncDel(SStreamState* pState, const STupleKey* key); @@ -69,8 +68,6 @@ int32_t streamStateSeekLast(SStreamState* pState, SStreamStateCur* pCur); int32_t streamStateCurNext(SStreamState* pState, SStreamStateCur* pCur); int32_t streamStateCurPrev(SStreamState* pState, SStreamStateCur* pCur); -#endif - #ifdef __cplusplus } #endif diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 1073ea59ef..0e1d82b273 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -438,6 +438,7 @@ void setResSchemaInfo(SReqResultInfo* pResInfo, const SSchema* pSchema, int32_t } pResInfo->fields = taosMemoryCalloc(numOfCols, sizeof(TAOS_FIELD)); pResInfo->userFields = taosMemoryCalloc(numOfCols, sizeof(TAOS_FIELD)); + ASSERT(numOfCols == pResInfo->numOfCols); for (int32_t i = 0; i < pResInfo->numOfCols; ++i) { pResInfo->fields[i].bytes = pSchema[i].bytes; diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 9f9a14952e..f0dc420f3d 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -841,7 +841,7 @@ void tmqFreeImpl(void* handle) { int32_t sz = taosArrayGetSize(tmq->clientTopics); for (int32_t i = 0; i < sz; i++) { SMqClientTopic* pTopic = taosArrayGet(tmq->clientTopics, i); - if (pTopic->schema.nCols) taosMemoryFree(pTopic->schema.pSchema); + if (pTopic->schema.nCols) taosMemoryFreeClear(pTopic->schema.pSchema); int32_t vgSz = taosArrayGetSize(pTopic->vgs); taosArrayDestroy(pTopic->vgs); } @@ -1218,6 +1218,8 @@ bool tmqUpdateEp(tmq_t* tmq, int32_t epoch, SMqAskEpRsp* pRsp) { SMqClientTopic topic = {0}; SMqSubTopicEp* pTopicEp = taosArrayGet(pRsp->topics, i); topic.schema = pTopicEp->schema; + pTopicEp->schema.nCols = 0; + pTopicEp->schema.pSchema = NULL; tstrncpy(topic.topicName, pTopicEp->topic, TSDB_TOPIC_FNAME_LEN); tstrncpy(topic.db, pTopicEp->db, TSDB_DB_FNAME_LEN); @@ -1251,7 +1253,7 @@ bool tmqUpdateEp(tmq_t* tmq, int32_t epoch, SMqAskEpRsp* pRsp) { int32_t sz = taosArrayGetSize(tmq->clientTopics); for (int32_t i = 0; i < sz; i++) { SMqClientTopic* pTopic = taosArrayGet(tmq->clientTopics, i); - if (pTopic->schema.nCols) taosMemoryFree(pTopic->schema.pSchema); + if (pTopic->schema.nCols) taosMemoryFreeClear(pTopic->schema.pSchema); int32_t vgSz = taosArrayGetSize(pTopic->vgs); taosArrayDestroy(pTopic->vgs); } diff --git a/source/dnode/mnode/impl/src/mndConsumer.c b/source/dnode/mnode/impl/src/mndConsumer.c index 614348c209..4470a6b064 100644 --- a/source/dnode/mnode/impl/src/mndConsumer.c +++ b/source/dnode/mnode/impl/src/mndConsumer.c @@ -487,6 +487,7 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) { pConsumerNew = tNewSMqConsumerObj(consumerId, cgroup); tstrncpy(pConsumerNew->clientId, subscribe.clientId, 256); pConsumerNew->updateType = CONSUMER_UPDATE__MODIFY; + taosArrayDestroy(pConsumerNew->rebNewTopics); pConsumerNew->rebNewTopics = newSub; subscribe.topicNames = NULL; diff --git a/source/dnode/mnode/impl/src/mndDef.c b/source/dnode/mnode/impl/src/mndDef.c index e6f1a40993..f1280700f0 100644 --- a/source/dnode/mnode/impl/src/mndDef.c +++ b/source/dnode/mnode/impl/src/mndDef.c @@ -145,7 +145,10 @@ SMqVgEp *tCloneSMqVgEp(const SMqVgEp *pVgEp) { } void tDeleteSMqVgEp(SMqVgEp *pVgEp) { - if (pVgEp->qmsg) taosMemoryFree(pVgEp->qmsg); + if (pVgEp) { + taosMemoryFreeClear(pVgEp->qmsg); + taosMemoryFree(pVgEp); + } } int32_t tEncodeSMqVgEp(void **buf, const SMqVgEp *pVgEp) { @@ -200,18 +203,10 @@ SMqConsumerObj *tNewSMqConsumerObj(int64_t consumerId, char cgroup[TSDB_CGROUP_L } void tDeleteSMqConsumerObj(SMqConsumerObj *pConsumer) { - if (pConsumer->currentTopics) { - taosArrayDestroyP(pConsumer->currentTopics, (FDelete)taosMemoryFree); - } - if (pConsumer->rebNewTopics) { - taosArrayDestroyP(pConsumer->rebNewTopics, (FDelete)taosMemoryFree); - } - if (pConsumer->rebRemovedTopics) { - taosArrayDestroyP(pConsumer->rebRemovedTopics, (FDelete)taosMemoryFree); - } - if (pConsumer->assignedTopics) { - taosArrayDestroyP(pConsumer->assignedTopics, (FDelete)taosMemoryFree); - } + taosArrayDestroyP(pConsumer->currentTopics, (FDelete)taosMemoryFree); + taosArrayDestroyP(pConsumer->rebNewTopics, (FDelete)taosMemoryFree); + taosArrayDestroyP(pConsumer->rebRemovedTopics, (FDelete)taosMemoryFree); + taosArrayDestroyP(pConsumer->assignedTopics, (FDelete)taosMemoryFree); } int32_t tEncodeSMqConsumerObj(void **buf, const SMqConsumerObj *pConsumer) { @@ -428,6 +423,13 @@ SMqSubscribeObj *tCloneSubscribeObj(const SMqSubscribeObj *pSub) { } void tDeleteSubscribeObj(SMqSubscribeObj *pSub) { + void *pIter = NULL; + while (1) { + pIter = taosHashIterate(pSub->consumerHash, pIter); + if (pIter == NULL) break; + SMqConsumerEp *pConsumerEp = (SMqConsumerEp *)pIter; + taosArrayDestroyP(pConsumerEp->vgs, (FDelete)tDeleteSMqVgEp); + } taosHashCleanup(pSub->consumerHash); taosArrayDestroyP(pSub->unassignedVgs, (FDelete)tDeleteSMqVgEp); } diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index dc8285740a..8719f9f8f0 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -1187,6 +1187,7 @@ static int32_t mndCheckAlterColForTopic(SMnode *pMnode, const char *stbFullName, if (pCol->colId > 0 && pCol->colId == colId) { sdbRelease(pSdb, pTopic); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); terrno = TSDB_CODE_MND_FIELD_CONFLICT_WITH_TOPIC; mError("topic:%s, check colId:%d conflicted", pTopic->name, pCol->colId); return -1; @@ -1197,6 +1198,7 @@ static int32_t mndCheckAlterColForTopic(SMnode *pMnode, const char *stbFullName, NEXT: sdbRelease(pSdb, pTopic); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); } return 0; } @@ -1228,6 +1230,7 @@ static int32_t mndCheckAlterColForStream(SMnode *pMnode, const char *stbFullName if (pCol->colId > 0 && pCol->colId == colId) { sdbRelease(pSdb, pStream); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); terrno = TSDB_CODE_MND_STREAM_MUST_BE_DELETED; mError("stream:%s, check colId:%d conflicted", pStream->name, pCol->colId); return -1; @@ -1238,6 +1241,7 @@ static int32_t mndCheckAlterColForStream(SMnode *pMnode, const char *stbFullName NEXT: sdbRelease(pSdb, pStream); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); } return 0; } @@ -1275,6 +1279,7 @@ static int32_t mndCheckAlterColForTSma(SMnode *pMnode, const char *stbFullName, if ((pCol->colId) > 0 && (pCol->colId == colId)) { sdbRelease(pSdb, pSma); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); terrno = TSDB_CODE_MND_FIELD_CONFLICT_WITH_TSMA; mError("tsma:%s, check colId:%d conflicted", pSma->name, pCol->colId); return -1; @@ -1285,6 +1290,7 @@ static int32_t mndCheckAlterColForTSma(SMnode *pMnode, const char *stbFullName, NEXT: sdbRelease(pSdb, pSma); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); } return 0; } @@ -1774,8 +1780,8 @@ static int32_t mndBuildSMAlterStbRsp(SDbObj *pDb, SStbObj *pObj, void **pCont, i return 0; } -int32_t mndBuildSMCreateStbRsp(SMnode *pMnode, char* dbFName, char* stbFName, void **pCont, int32_t *pLen) { - int32_t ret = -1; +int32_t mndBuildSMCreateStbRsp(SMnode *pMnode, char *dbFName, char *stbFName, void **pCont, int32_t *pLen) { + int32_t ret = -1; SDbObj *pDb = mndAcquireDb(pMnode, dbFName); if (NULL == pDb) { return -1; @@ -1785,11 +1791,11 @@ int32_t mndBuildSMCreateStbRsp(SMnode *pMnode, char* dbFName, char* stbFName, vo if (NULL == pObj) { goto _OVER; } - - SEncoder ec = {0}; - uint32_t contLen = 0; + + SEncoder ec = {0}; + uint32_t contLen = 0; SMCreateStbRsp stbRsp = {0}; - SName name = {0}; + SName name = {0}; tNameFromString(&name, pObj->name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); stbRsp.pMeta = taosMemoryCalloc(1, sizeof(STableMetaRsp)); @@ -1821,12 +1827,12 @@ int32_t mndBuildSMCreateStbRsp(SMnode *pMnode, char* dbFName, char* stbFName, vo *pLen = contLen; ret = 0; - + _OVER: if (pObj) { mndReleaseStb(pMnode, pObj); } - + if (pDb) { mndReleaseDb(pMnode, pDb); } @@ -1834,7 +1840,6 @@ _OVER: return ret; } - static int32_t mndAlterStbImp(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb, SStbObj *pStb, bool needRsp, void *alterOriData, int32_t alterOriDataLen) { int32_t code = -1; @@ -2091,6 +2096,7 @@ static int32_t mndCheckDropStbForTopic(SMnode *pMnode, const char *stbFullName, if (pCol->tableId == suid) { sdbRelease(pSdb, pTopic); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); return -1; } else { goto NEXT; @@ -2099,6 +2105,7 @@ static int32_t mndCheckDropStbForTopic(SMnode *pMnode, const char *stbFullName, NEXT: sdbRelease(pSdb, pTopic); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); } return 0; } @@ -2136,6 +2143,7 @@ static int32_t mndCheckDropStbForStream(SMnode *pMnode, const char *stbFullName, if (pCol->tableId == suid) { sdbRelease(pSdb, pStream); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); return -1; } else { goto NEXT; @@ -2144,6 +2152,7 @@ static int32_t mndCheckDropStbForStream(SMnode *pMnode, const char *stbFullName, NEXT: sdbRelease(pSdb, pStream); nodesDestroyNode(pAst); + nodesDestroyList(pNodeList); } return 0; } diff --git a/source/dnode/mnode/impl/src/mndSubscribe.c b/source/dnode/mnode/impl/src/mndSubscribe.c index 8a968712e0..3a3bf36594 100644 --- a/source/dnode/mnode/impl/src/mndSubscribe.c +++ b/source/dnode/mnode/impl/src/mndSubscribe.c @@ -490,8 +490,12 @@ static int32_t mndPersistRebResult(SMnode *pMnode, SRpcMsg *pMsg, const SMqRebOu mndReleaseConsumer(pMnode, pConsumerOld); if (mndSetConsumerCommitLogs(pMnode, pTrans, pConsumerNew) != 0) { ASSERT(0); + tDeleteSMqConsumerObj(pConsumerNew); + taosMemoryFree(pConsumerNew); goto REB_FAIL; } + tDeleteSMqConsumerObj(pConsumerNew); + taosMemoryFree(pConsumerNew); } // 3.3 set removed consumer @@ -509,8 +513,12 @@ static int32_t mndPersistRebResult(SMnode *pMnode, SRpcMsg *pMsg, const SMqRebOu mndReleaseConsumer(pMnode, pConsumerOld); if (mndSetConsumerCommitLogs(pMnode, pTrans, pConsumerNew) != 0) { ASSERT(0); + tDeleteSMqConsumerObj(pConsumerNew); + taosMemoryFree(pConsumerNew); goto REB_FAIL; } + tDeleteSMqConsumerObj(pConsumerNew); + taosMemoryFree(pConsumerNew); } #if 0 if (consumerNum) { diff --git a/source/dnode/mnode/impl/src/mndTopic.c b/source/dnode/mnode/impl/src/mndTopic.c index 7b36966d6c..b24d7067bc 100644 --- a/source/dnode/mnode/impl/src/mndTopic.c +++ b/source/dnode/mnode/impl/src/mndTopic.c @@ -224,6 +224,7 @@ SSdbRow *mndTopicActionDecode(SSdbRaw *pRaw) { if (taosDecodeSSchemaWrapper(buf, &pTopic->schema) == NULL) { goto TOPIC_DECODE_OVER; } + taosMemoryFree(buf); } else { pTopic->schema.nCols = 0; pTopic->schema.version = 0; @@ -266,6 +267,11 @@ static int32_t mndTopicActionInsert(SSdb *pSdb, SMqTopicObj *pTopic) { static int32_t mndTopicActionDelete(SSdb *pSdb, SMqTopicObj *pTopic) { mTrace("topic:%s, perform delete action", pTopic->name); + taosMemoryFreeClear(pTopic->sql); + taosMemoryFreeClear(pTopic->ast); + taosMemoryFreeClear(pTopic->physicalPlan); + if (pTopic->schema.nCols) taosMemoryFreeClear(pTopic->schema.pSchema); + taosArrayDestroy(pTopic->ntbColIds); return 0; } @@ -347,6 +353,7 @@ static int32_t extractTopicTbInfo(SNode *pAst, SMqTopicObj *pTopic) { } } } + nodesDestroyList(pNodeList); return 0; } @@ -416,6 +423,8 @@ static int32_t mndCreateTopic(SMnode *pMnode, SRpcMsg *pReq, SCMCreateTopicReq * taosMemoryFree(topicObj.sql); return -1; } + nodesDestroyNode(pAst); + nodesDestroyNode((SNode *)pPlan); } else if (pCreate->subType == TOPIC_SUB_TYPE__TABLE) { SStbObj *pStb = mndAcquireStb(pMnode, pCreate->subStbName); if (pStb == NULL) { @@ -512,6 +521,10 @@ static int32_t mndCreateTopic(SMnode *pMnode, SRpcMsg *pReq, SCMCreateTopicReq * } taosMemoryFreeClear(topicObj.physicalPlan); + taosMemoryFreeClear(topicObj.sql); + taosMemoryFreeClear(topicObj.ast); + taosArrayDestroy(topicObj.ntbColIds); + if (topicObj.schema.nCols) taosMemoryFreeClear(topicObj.schema.pSchema); mndTransDrop(pTrans); return TSDB_CODE_ACTION_IN_PROGRESS; } diff --git a/source/dnode/vnode/src/tq/tqOffset.c b/source/dnode/vnode/src/tq/tqOffset.c index 5c1d5d65b4..d8d8025151 100644 --- a/source/dnode/vnode/src/tq/tqOffset.c +++ b/source/dnode/vnode/src/tq/tqOffset.c @@ -147,6 +147,7 @@ int32_t tqOffsetCommitFile(STqOffsetStore* pStore) { taosHashCancelIterate(pStore->pHash, pIter); return -1; } + taosMemoryFree(buf); } // close and rename file taosCloseFile(&pFile); diff --git a/source/util/src/tarray.c b/source/util/src/tarray.c index 454739348e..4f170c203c 100644 --- a/source/util/src/tarray.c +++ b/source/util/src/tarray.c @@ -386,11 +386,12 @@ void* taosArrayDestroy(SArray* pArray) { } void taosArrayDestroyP(SArray* pArray, FDelete fp) { - if(!pArray) return; - for (int32_t i = 0; i < pArray->size; i++) { - fp(*(void**)TARRAY_GET_ELEM(pArray, i)); + if (pArray) { + for (int32_t i = 0; i < pArray->size; i++) { + fp(*(void**)TARRAY_GET_ELEM(pArray, i)); + } + taosArrayDestroy(pArray); } - taosArrayDestroy(pArray); } void taosArrayDestroyEx(SArray* pArray, FDelete fp) { From 142067b05f06bb53b18b9be6170574a7123e97eb Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 16 Sep 2022 16:40:17 +0800 Subject: [PATCH 12/21] fix: fix invalid read issue --- source/libs/qworker/src/qwUtil.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/libs/qworker/src/qwUtil.c b/source/libs/qworker/src/qwUtil.c index 34f638b774..581eea4a81 100644 --- a/source/libs/qworker/src/qwUtil.c +++ b/source/libs/qworker/src/qwUtil.c @@ -454,8 +454,10 @@ void qwDestroySchStatus(SQWSchStatus *pStatus) { taosHashCleanup(pStatus->tasksH void qwDestroyImpl(void *pMgmt) { SQWorker *mgmt = (SQWorker *)pMgmt; - - qDebug("start to destroy qworker, type:%d, id:%d, handle:%p", mgmt->nodeType, mgmt->nodeId, mgmt); + int8_t nodeType = mgmt->nodeType; + int32_t nodeId = mgmt->nodeId; + + qDebug("start to destroy qworker, type:%d, id:%d, handle:%p", nodeType, nodeId, mgmt); taosTmrStop(mgmt->hbTimer); mgmt->hbTimer = NULL; @@ -489,7 +491,7 @@ void qwDestroyImpl(void *pMgmt) { qwCloseRef(); - qDebug("qworker destroyed, type:%d, id:%d, handle:%p", mgmt->nodeType, mgmt->nodeId, mgmt); + qDebug("qworker destroyed, type:%d, id:%d, handle:%p", nodeType, nodeId, mgmt); } int32_t qwOpenRef(void) { From cf759fba4257f9753eb751253bdc08ab21ac93dc Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 16 Sep 2022 19:54:46 +0800 Subject: [PATCH 13/21] fix: parsing conflicts --- source/libs/parser/inc/sql.y | 4 ++-- source/libs/parser/src/sql.c | 4 ++-- source/libs/planner/test/planSetOpTest.cpp | 2 ++ tests/script/tsim/parser/union.sim | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 12224e2146..6e43843cda 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -952,10 +952,10 @@ union_query_expression(A) ::= query_simple_or_subquery(B) UNION query_simple_or_subquery(C). { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, C); } query_simple_or_subquery(A) ::= query_simple(B). { A = B; } -query_simple_or_subquery(A) ::= subquery(B). { A = B; } +query_simple_or_subquery(A) ::= subquery(B). { A = releaseRawExprNode(pCxt, B); } query_or_subquery(A) ::= query_expression(B). { A = B; } -query_or_subquery(A) ::= subquery(B). { A = B; } +query_or_subquery(A) ::= subquery(B). { A = releaseRawExprNode(pCxt, B); } %type order_by_clause_opt { SNodeList* } %destructor order_by_clause_opt { nodesDestroyList($$); } diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index 689cb27aa5..c24eef0016 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -4369,9 +4369,7 @@ static YYACTIONTYPE yy_reduce( case 470: /* query_simple ::= query_specification */ yytestcase(yyruleno==470); case 471: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==471); case 474: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==474); - case 475: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==475); case 476: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==476); - case 477: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==477); { yylhsminor.yy776 = yymsp[0].minor.yy776; } yymsp[0].minor.yy776 = yylhsminor.yy776; break; @@ -4432,6 +4430,8 @@ static YYACTIONTYPE yy_reduce( case 315: /* signed_literal ::= literal_func */ yytestcase(yyruleno==315); case 381: /* star_func_para ::= expression */ yytestcase(yyruleno==381); case 436: /* select_item ::= common_expression */ yytestcase(yyruleno==436); + case 475: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==475); + case 477: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==477); case 489: /* search_condition ::= common_expression */ yytestcase(yyruleno==489); { yylhsminor.yy776 = releaseRawExprNode(pCxt, yymsp[0].minor.yy776); } yymsp[0].minor.yy776 = yylhsminor.yy776; diff --git a/source/libs/planner/test/planSetOpTest.cpp b/source/libs/planner/test/planSetOpTest.cpp index de6d7466b8..5348952db8 100644 --- a/source/libs/planner/test/planSetOpTest.cpp +++ b/source/libs/planner/test/planSetOpTest.cpp @@ -44,6 +44,8 @@ TEST_F(PlanSetOpTest, unionAllWithSubquery) { run("SELECT ts FROM (SELECT ts FROM st1s1) UNION ALL SELECT ts FROM (SELECT ts FROM st1s2)"); // super table run("SELECT ts FROM (SELECT ts FROM st1) UNION ALL SELECT ts FROM (SELECT ts FROM st1)"); + + run("(SELECT SERVER_STATUS()) UNION ALL (SELECT SERVER_STATUS())"); } TEST_F(PlanSetOpTest, unionAllWithOrderBy) { diff --git a/tests/script/tsim/parser/union.sim b/tests/script/tsim/parser/union.sim index 8bafeff444..8dc19912c8 100644 --- a/tests/script/tsim/parser/union.sim +++ b/tests/script/tsim/parser/union.sim @@ -116,7 +116,7 @@ sql_error (select c1 from union_tb0 limit 1 union all select c1 from union_tb1 l sql_error (select c1 from union_tb0 limit 1 union all select c1 from union_tb1 limit 1) limit 1 # sql with parenthese -sql (((select c1 from union_tb0))) +sql (select c1 from union_tb0) if $rows != 10000 then return -1 endi From 28d34540c1cb5d5ee32af5a6bc64478898305914 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Fri, 16 Sep 2022 20:23:40 +0800 Subject: [PATCH 14/21] feat: update taostools 9e75540 for3.0 (#16900) * feat: update taos-tools 9f4c01e for 3.0 * feat: update taos-tools e7270c9 for 3.0 * feat: update taos-tools 7d7b3ce for 3.0 --- cmake/taostools_CMakeLists.txt.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/taostools_CMakeLists.txt.in b/cmake/taostools_CMakeLists.txt.in index 6fb2a69847..980a15e462 100644 --- a/cmake/taostools_CMakeLists.txt.in +++ b/cmake/taostools_CMakeLists.txt.in @@ -2,7 +2,7 @@ # taos-tools ExternalProject_Add(taos-tools GIT_REPOSITORY https://github.com/taosdata/taos-tools.git - GIT_TAG e7270c9 + GIT_TAG 7d7b3ce SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools" BINARY_DIR "" #BUILD_IN_SOURCE TRUE From e848dc716be2ec057d71b775c96d40ad4df9e29c Mon Sep 17 00:00:00 2001 From: Liu Jicong Date: Fri, 16 Sep 2022 22:49:35 +0800 Subject: [PATCH 15/21] fix test case --- source/libs/executor/src/dataDeleter.c | 3 +++ source/libs/executor/src/executor.c | 6 ++++-- source/libs/executor/src/scanoperator.c | 4 +++- tests/system-test/7-tmq/tmqDelete-multiCtb.py | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/source/libs/executor/src/dataDeleter.c b/source/libs/executor/src/dataDeleter.c index 55a1a1fdb9..1ade4b89e6 100644 --- a/source/libs/executor/src/dataDeleter.c +++ b/source/libs/executor/src/dataDeleter.c @@ -93,6 +93,7 @@ static void toDataCacheEntry(SDataDeleterHandle* pHandle, const SInputData* pInp strcpy(pRes->tableName, pHandle->pDeleter->tableFName); strcpy(pRes->tsColName, pHandle->pDeleter->tsColName); pRes->affectedRows = *(int64_t*)pColRes->pData; + if (pRes->affectedRows) { pRes->skey = *(int64_t*)pColSKey->pData; pRes->ekey = *(int64_t*)pColEKey->pData; @@ -102,6 +103,8 @@ static void toDataCacheEntry(SDataDeleterHandle* pHandle, const SInputData* pInp pRes->ekey = pHandle->pDeleter->deleteTimeRange.ekey; } + qDebug("delete %ld rows, from %ld to %ld", pRes->affectedRows, pRes->skey, pRes->ekey); + pBuf->useSize += pEntry->dataLen; atomic_add_fetch_64(&pHandle->cachedSize, pEntry->dataLen); diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index a2bcca9545..44541ee27c 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -264,11 +264,11 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S } int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bool isAdd) { - SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; + SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; STableListInfo* pListInfo = &pTaskInfo->tableqinfoList; if (isAdd) { - qDebug("add %d tables id into query list, %s", (int32_t) taosArrayGetSize(tableIdList), pTaskInfo->id.str); + qDebug("add %d tables id into query list, %s", (int32_t)taosArrayGetSize(tableIdList), pTaskInfo->id.str); } if (pListInfo->map == NULL) { @@ -321,6 +321,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo } bool exists = false; +#if 0 for (int32_t k = 0; k < taosArrayGetSize(pListInfo->pTableList); ++k) { STableKeyInfo* pKeyInfo = taosArrayGet(pListInfo->pTableList, k); if (pKeyInfo->uid == keyInfo.uid) { @@ -328,6 +329,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo exists = true; } } +#endif if (!exists) { taosArrayPush(pTaskInfo->tableqinfoList.pTableList, &keyInfo); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index a6d718bafa..edc7ddb92e 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -637,7 +637,8 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, pInfo->currentTable); tsdbSetTableId(pInfo->dataReader, pTableInfo->uid); - qDebug("set uid:%" PRIu64 " into scanner, total tables:%d, index:%d %s", pTableInfo->uid, numOfTables, pInfo->currentTable, pTaskInfo->id.str); + qDebug("set uid:%" PRIu64 " into scanner, total tables:%d, index:%d %s", pTableInfo->uid, numOfTables, + pInfo->currentTable, pTaskInfo->id.str); tsdbReaderReset(pInfo->dataReader, &pInfo->cond); pInfo->scanTimes = 0; @@ -1332,6 +1333,7 @@ static void checkUpdateData(SStreamScanInfo* pInfo, bool invertible, SSDataBlock bool closedWin = isClosed && isSignleIntervalWindow(pInfo) && isDeletedWindow(&win, pBlock->info.groupId, pInfo->windowSup.pIntervalAggSup); if ((update || closedWin) && out) { + qDebug("stream update check not pass, update %d, closedWin %d", update, closedWin); uint64_t gpId = closedWin && pInfo->partitionSup.needCalc ? calGroupIdByData(&pInfo->partitionSup, pInfo->pPartScalarSup, pBlock, rowId) : 0; diff --git a/tests/system-test/7-tmq/tmqDelete-multiCtb.py b/tests/system-test/7-tmq/tmqDelete-multiCtb.py index e59040305a..c9d90b45be 100644 --- a/tests/system-test/7-tmq/tmqDelete-multiCtb.py +++ b/tests/system-test/7-tmq/tmqDelete-multiCtb.py @@ -325,7 +325,9 @@ class TDTestCase: expectrowcnt = int(paraDict["rowsPerTbl"] * paraDict["ctbNum"] * (1 + 1/4 + 3/4)) elif self.snapshot == 1: consumerId = 5 - expectrowcnt = int(paraDict["rowsPerTbl"] * paraDict["ctbNum"] * (1 - 1/4 + 1/4 + 3/4)) + # expectrowcnt = int(paraDict["rowsPerTbl"] * paraDict["ctbNum"] * (1 - 1/4 + 1/4 + 3/4)) + # fix case: sometimes only 200 rows are deleted + expectrowcnt = int(paraDict["rowsPerTbl"] * paraDict["ctbNum"] * (1 + 1/4 + 3/4)) topicList = topicFromStb1 ifcheckdata = 1 From 5c86f820d47bf512c7860da1cb2a9433c7b6edcf Mon Sep 17 00:00:00 2001 From: Xuefeng Tan <1172915550@qq.com> Date: Sat, 17 Sep 2022 10:58:01 +0800 Subject: [PATCH 16/21] enh(taosAdapter): prometheus remote_write support ttl (#16896) --- cmake/taosadapter_CMakeLists.txt.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/taosadapter_CMakeLists.txt.in b/cmake/taosadapter_CMakeLists.txt.in index eb0faf6d5d..1a2f5d396f 100644 --- a/cmake/taosadapter_CMakeLists.txt.in +++ b/cmake/taosadapter_CMakeLists.txt.in @@ -2,7 +2,7 @@ # taosadapter ExternalProject_Add(taosadapter GIT_REPOSITORY https://github.com/taosdata/taosadapter.git - GIT_TAG 71e7ccf + GIT_TAG 05fb2ff SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosadapter" BINARY_DIR "" #BUILD_IN_SOURCE TRUE From c1b518722bffe6cd8ad998d16d8199bbc21a4f75 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Sat, 17 Sep 2022 13:41:51 +0800 Subject: [PATCH 17/21] docs: fix query doc error --- docs/en/12-taos-sql/12-distinguished.md | 10 ++++++++-- docs/zh/12-taos-sql/12-distinguished.md | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/en/12-taos-sql/12-distinguished.md b/docs/en/12-taos-sql/12-distinguished.md index 98b782c3eb..296c237642 100644 --- a/docs/en/12-taos-sql/12-distinguished.md +++ b/docs/en/12-taos-sql/12-distinguished.md @@ -46,7 +46,7 @@ The following restrictions apply: ### Other Rules -- The window clause must occur after the PARTITION BY clause and before the GROUP BY clause. It cannot be used with a GROUP BY clause. +- The window clause must occur after the PARTITION BY clause. It cannot be used with a GROUP BY clause. - SELECT clauses on windows can contain only the following expressions: - Constants - Aggregate functions @@ -78,7 +78,7 @@ These pseudocolumns occur after the aggregation clause. 1. A huge volume of interpolation output may be returned using `FILL`, so it's recommended to specify the time range when using `FILL`. The maximum number of interpolation values that can be returned in a single query is 10,000,000. 2. The result set is in ascending order of timestamp when you aggregate by time window. -3. If aggregate by window is used on STable, the aggregate function is performed on all the rows matching the filter conditions. If `PARTITION BY` is not used in the query, the result set will be returned in strict ascending order of timestamp; otherwise the result set is not exactly in the order of ascending timestamp in each group. +3. If aggregate by window is used on STable, the aggregate function is performed on all the rows matching the filter conditions. If `PARTITION BY` is not used in the query, the result set will be returned in strict ascending order of timestamp; otherwise the result set will be returned in the order of ascending timestamp in each group. ::: @@ -120,6 +120,12 @@ In case of using integer, bool, or string to represent the status of a device at SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status); ``` +Only care about the information of the status window when the status is 2. For example: + +``` +SELECT * FROM (SELECT COUNT(*) AS cnt, FIRST(ts) AS fst, status FROM temp_tb_1 STATE_WINDOW(status)) t WHERE status = 2; +``` + ### Session Window The primary key, i.e. timestamp, is used to determine which session window a row belongs to. As shown in the figure below, if the limit of time interval for the session window is specified as 12 seconds, then the 6 rows in the figure constitutes 2 time windows, [2019-04-28 14:22:10,2019-04-28 14:22:30] and [2019-04-28 14:23:10,2019-04-28 14:23:30] because the time difference between 2019-04-28 14:22:30 and 2019-04-28 14:23:10 is 40 seconds, which exceeds the time interval limit of 12 seconds. diff --git a/docs/zh/12-taos-sql/12-distinguished.md b/docs/zh/12-taos-sql/12-distinguished.md index 268712e757..861ef4ebb7 100644 --- a/docs/zh/12-taos-sql/12-distinguished.md +++ b/docs/zh/12-taos-sql/12-distinguished.md @@ -46,7 +46,7 @@ SELECT select_list FROM tb_name ### 窗口子句的规则 -- 窗口子句位于数据切分子句之后,GROUP BY 子句之前,且不可以和 GROUP BY 子句一起使用。 +- 窗口子句位于数据切分子句之后,不可以和 GROUP BY 子句一起使用。 - 窗口子句将数据按窗口进行切分,对每个窗口进行 SELECT 列表中的表达式的计算,SELECT 列表中的表达式只能包含: - 常量。 - _wstart伪列、_wend伪列和_wduration伪列。 @@ -71,7 +71,7 @@ FILL 语句指定某一窗口区间数据缺失的情况下的填充模式。填 1. 使用 FILL 语句的时候可能生成大量的填充输出,务必指定查询的时间区间。针对每次查询,系统可返回不超过 1 千万条具有插值的结果。 2. 在时间维度聚合中,返回的结果中时间序列严格单调递增。 -3. 如果查询对象是超级表,则聚合函数会作用于该超级表下满足值过滤条件的所有表的数据。如果查询中没有使用 PARTITION BY 语句,则返回的结果按照时间序列严格单调递增;如果查询中使用了 PARTITION BY 语句分组,则返回结果中每个 PARTITION 内不按照时间序列严格单调递增。 +3. 如果查询对象是超级表,则聚合函数会作用于该超级表下满足值过滤条件的所有表的数据。如果查询中没有使用 PARTITION BY 语句,则返回的结果按照时间序列严格单调递增;如果查询中使用了 PARTITION BY 语句分组,则返回结果中每个 PARTITION 内按照时间序列严格单调递增。 ::: @@ -113,6 +113,12 @@ SELECT COUNT(*) FROM temp_tb_1 INTERVAL(1m) SLIDING(2m); SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status); ``` +仅关心 status 为 2 时的状态窗口的信息。例如: + +``` +SELECT * FROM (SELECT COUNT(*) AS cnt, FIRST(ts) AS fst, status FROM temp_tb_1 STATE_WINDOW(status)) t WHERE status = 2; +``` + ### 会话窗口 会话窗口根据记录的时间戳主键的值来确定是否属于同一个会话。如下图所示,如果设置时间戳的连续的间隔小于等于 12 秒,则以下 6 条记录构成 2 个会话窗口,分别是:[2019-04-28 14:22:10,2019-04-28 14:22:30]和[2019-04-28 14:23:10,2019-04-28 14:23:30]。因为 2019-04-28 14:22:30 与 2019-04-28 14:23:10 之间的时间间隔是 40 秒,超过了连续时间间隔(12 秒)。 From bd3db36a407b42d55dbc183aa4db08997b74f69f Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Sun, 18 Sep 2022 11:19:52 +0800 Subject: [PATCH 18/21] feat: update taostools 125c77a for3.0 (#16907) * feat: update taos-tools 9f4c01e for 3.0 * feat: update taos-tools e7270c9 for 3.0 * feat: update taos-tools 7d7b3ce for 3.0 * feat: update taos-tools 125c77a for 3.0 --- cmake/taostools_CMakeLists.txt.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/taostools_CMakeLists.txt.in b/cmake/taostools_CMakeLists.txt.in index 980a15e462..6a3439ada9 100644 --- a/cmake/taostools_CMakeLists.txt.in +++ b/cmake/taostools_CMakeLists.txt.in @@ -2,7 +2,7 @@ # taos-tools ExternalProject_Add(taos-tools GIT_REPOSITORY https://github.com/taosdata/taos-tools.git - GIT_TAG 7d7b3ce + GIT_TAG 125c77a SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools" BINARY_DIR "" #BUILD_IN_SOURCE TRUE From d0bfa65cc4fecc5be9d12f1db255839cbebd9952 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Mon, 19 Sep 2022 11:54:30 +0800 Subject: [PATCH 19/21] docs: add insert select description --- docs/en/12-taos-sql/05-insert.md | 6 +++++- docs/zh/12-taos-sql/05-insert.md | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/en/12-taos-sql/05-insert.md b/docs/en/12-taos-sql/05-insert.md index e7d56fb3c7..97bfc38c7e 100644 --- a/docs/en/12-taos-sql/05-insert.md +++ b/docs/en/12-taos-sql/05-insert.md @@ -16,6 +16,8 @@ INSERT INTO [(field1_name, ...)] VALUES (field1_value, ...) [(field1_value2, ...) ...] | FILE csv_file_path ...]; + +INSERT INTO tb_name [(field1_name, ...)] query ``` **Timestamps** @@ -37,7 +39,7 @@ INSERT INTO 4. The FILE clause inserts tags or data from a comma-separates values (CSV) file. Do not include headers in your CSV files. -5. A single INSERT statement can write data to multiple tables. +5. A single INSERT ... VALUES statement or INSERT ... FILE statement can write data to multiple tables. 6. The INSERT statement is fully parsed before being executed, so that if any element of the statement fails, the entire statement will fail. For example, the following statement will not create a table because the latter part of the statement is invalid: @@ -47,6 +49,8 @@ INSERT INTO 7. However, an INSERT statement that writes data to multiple subtables can succeed for some tables and fail for others. This situation is caused because vnodes perform write operations independently of each other. One vnode failing to write data does not affect the ability of other vnodes to write successfully. +8. Data from TDengine can be inserted into a specified table using the INSERT ... query statement. Arbitrary query statements are supported. This syntax can only be used for subtables and normal tables, and does not support automatic table creation. + ## Insert a Record Single row or multiple rows specified with VALUES can be inserted into a specific table. A single row is inserted using the below statement. diff --git a/docs/zh/12-taos-sql/05-insert.md b/docs/zh/12-taos-sql/05-insert.md index 59af9c55ed..c865bc8022 100644 --- a/docs/zh/12-taos-sql/05-insert.md +++ b/docs/zh/12-taos-sql/05-insert.md @@ -17,6 +17,8 @@ INSERT INTO [(field1_name, ...)] VALUES (field1_value, ...) [(field1_value2, ...) ...] | FILE csv_file_path ...]; + +INSERT INTO tb_name [(field1_name, ...)] query ``` **关于时间戳** @@ -38,7 +40,7 @@ INSERT INTO 4. FILE 语法表示数据来自于 CSV 文件(英文逗号分隔、英文单引号括住每个值),CSV 文件无需表头。 -5. 无论使用哪种语法,均可以在一条 INSERT 语句中同时向多个表插入数据。 +5. INSERT ... VALUES 语句和 INSERT ... FILE 语句均可以在一条 INSERT 语句中同时向多个表插入数据。 6. INSERT 语句是完整解析后再执行的,对如下语句,不会再出现数据错误但建表成功的情况: @@ -48,6 +50,8 @@ INSERT INTO 7. 对于向多个子表插入数据的情况,依然会有部分数据写入失败,部分数据写入成功的情况。这是因为多个子表可能分布在不同的 VNODE 上,客户端将 INSERT 语句完整解析后,将数据发往各个涉及的 VNODE 上,每个 VNODE 独立进行写入操作。如果某个 VNODE 因为某些原因(比如网络问题或磁盘故障)导致写入失败,并不会影响其他 VNODE 节点的写入。 +8. 可以使用 INSERT ... query 语句将 TDengine 中的数据插入到指定表中。query 可以是任意的查询语句。此语法只能用于子表和普通表,且不支持自动建表。 + ## 插入一条记录 指定已经创建好的数据子表的表名,并通过 VALUES 关键字提供一行或多行数据,即可向数据库写入这些数据。例如,执行如下语句可以写入一行记录: From 23a243230a0d24fdf411079f9a9cc375b9cbfbc1 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Mon, 19 Sep 2022 13:11:05 +0800 Subject: [PATCH 20/21] docs: add insert select description --- docs/en/12-taos-sql/05-insert.md | 6 +++--- docs/zh/12-taos-sql/05-insert.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/12-taos-sql/05-insert.md b/docs/en/12-taos-sql/05-insert.md index 97bfc38c7e..da21896866 100644 --- a/docs/en/12-taos-sql/05-insert.md +++ b/docs/en/12-taos-sql/05-insert.md @@ -17,7 +17,7 @@ INSERT INTO VALUES (field1_value, ...) [(field1_value2, ...) ...] | FILE csv_file_path ...]; -INSERT INTO tb_name [(field1_name, ...)] query +INSERT INTO tb_name [(field1_name, ...)] subquery ``` **Timestamps** @@ -39,7 +39,7 @@ INSERT INTO tb_name [(field1_name, ...)] query 4. The FILE clause inserts tags or data from a comma-separates values (CSV) file. Do not include headers in your CSV files. -5. A single INSERT ... VALUES statement or INSERT ... FILE statement can write data to multiple tables. +5. A single `INSERT ... VALUES` statement and `INSERT ... FILE` statement can write data to multiple tables. 6. The INSERT statement is fully parsed before being executed, so that if any element of the statement fails, the entire statement will fail. For example, the following statement will not create a table because the latter part of the statement is invalid: @@ -49,7 +49,7 @@ INSERT INTO tb_name [(field1_name, ...)] query 7. However, an INSERT statement that writes data to multiple subtables can succeed for some tables and fail for others. This situation is caused because vnodes perform write operations independently of each other. One vnode failing to write data does not affect the ability of other vnodes to write successfully. -8. Data from TDengine can be inserted into a specified table using the INSERT ... query statement. Arbitrary query statements are supported. This syntax can only be used for subtables and normal tables, and does not support automatic table creation. +8. Data from TDengine can be inserted into a specified table using the `INSERT ... subquery` statement. Arbitrary query statements are supported. This syntax can only be used for subtables and normal tables, and does not support automatic table creation. ## Insert a Record diff --git a/docs/zh/12-taos-sql/05-insert.md b/docs/zh/12-taos-sql/05-insert.md index c865bc8022..5e64827a8f 100644 --- a/docs/zh/12-taos-sql/05-insert.md +++ b/docs/zh/12-taos-sql/05-insert.md @@ -18,7 +18,7 @@ INSERT INTO VALUES (field1_value, ...) [(field1_value2, ...) ...] | FILE csv_file_path ...]; -INSERT INTO tb_name [(field1_name, ...)] query +INSERT INTO tb_name [(field1_name, ...)] subquery ``` **关于时间戳** @@ -40,7 +40,7 @@ INSERT INTO tb_name [(field1_name, ...)] query 4. FILE 语法表示数据来自于 CSV 文件(英文逗号分隔、英文单引号括住每个值),CSV 文件无需表头。 -5. INSERT ... VALUES 语句和 INSERT ... FILE 语句均可以在一条 INSERT 语句中同时向多个表插入数据。 +5. `INSERT ... VALUES` 语句和 `INSERT ... FILE` 语句均可以在一条 INSERT 语句中同时向多个表插入数据。 6. INSERT 语句是完整解析后再执行的,对如下语句,不会再出现数据错误但建表成功的情况: @@ -50,7 +50,7 @@ INSERT INTO tb_name [(field1_name, ...)] query 7. 对于向多个子表插入数据的情况,依然会有部分数据写入失败,部分数据写入成功的情况。这是因为多个子表可能分布在不同的 VNODE 上,客户端将 INSERT 语句完整解析后,将数据发往各个涉及的 VNODE 上,每个 VNODE 独立进行写入操作。如果某个 VNODE 因为某些原因(比如网络问题或磁盘故障)导致写入失败,并不会影响其他 VNODE 节点的写入。 -8. 可以使用 INSERT ... query 语句将 TDengine 中的数据插入到指定表中。query 可以是任意的查询语句。此语法只能用于子表和普通表,且不支持自动建表。 +8. 可以使用 `INSERT ... subquery` 语句将 TDengine 中的数据插入到指定表中。subquery 可以是任意的查询语句。此语法只能用于子表和普通表,且不支持自动建表。 ## 插入一条记录 From 8c48dc4d581ba0a03f58574d5a1faef937b9a89d Mon Sep 17 00:00:00 2001 From: danielclow <106956386+danielclow@users.noreply.github.com> Date: Mon, 19 Sep 2022 13:55:35 +0800 Subject: [PATCH 21/21] doc: update quick start docs for new edition --- docs/en/05-get-started/01-docker.md | 6 +++++- docs/en/05-get-started/03-package.md | 6 +++++- docs/en/05-get-started/index.md | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/en/05-get-started/01-docker.md b/docs/en/05-get-started/01-docker.md index 6191492b37..be61dfeb8e 100644 --- a/docs/en/05-get-started/01-docker.md +++ b/docs/en/05-get-started/01-docker.md @@ -3,7 +3,11 @@ sidebar_label: Docker title: Quick Install on Docker --- -This document describes how to install TDengine in a Docker container and perform queries and inserts. To get started with TDengine in a non-containerized environment, see [Quick Install](../../get-started/package). If you want to view the source code, build TDengine yourself, or contribute to the project, see the [TDengine GitHub repository](https://github.com/taosdata/TDengine). +This document describes how to install TDengine in a Docker container and perform queries and inserts. + +- To get started with TDengine in a non-containerized environment, see [Quick Install from Package](../../get-started/package). +- For a fully managed solution, see the [TDengine Cloud documentation](/cloud/). +- If you want to view the source code, build TDengine yourself, or contribute to the project, see the [TDengine GitHub repository](https://github.com/taosdata/TDengine). ## Run TDengine diff --git a/docs/en/05-get-started/03-package.md b/docs/en/05-get-started/03-package.md index 292fa82183..da06aca148 100644 --- a/docs/en/05-get-started/03-package.md +++ b/docs/en/05-get-started/03-package.md @@ -7,7 +7,11 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; import PkgListV3 from "/components/PkgListV3"; -For information about installing TDengine on Docker, see [Quick Install on Docker](../../get-started/docker). If you want to view the source code, build TDengine yourself, or contribute to the project, see the [TDengine GitHub repository](https://github.com/taosdata/TDengine). +This document describes how to install TDengine on Linux and Windows and perform queries and inserts. + +- To get started with TDengine on Docker, see [Quick Install on Docker](../../get-started/docker). +- For a fully managed solution, see the [TDengine Cloud documentation](/cloud/). +- If you want to view the source code, build TDengine yourself, or contribute to the project, see the [TDengine GitHub repository](https://github.com/taosdata/TDengine). The full package of TDengine includes the TDengine Server (`taosd`), TDengine Client (`taosc`), taosAdapter for connecting with third-party systems and providing a RESTful interface, a command-line interface (CLI, taos), and some tools. Note that taosAdapter supports Linux only. In addition to connectors for multiple languages, TDengine also provides a [REST API](../../reference/rest-api) through [taosAdapter](../../reference/taosadapter). diff --git a/docs/en/05-get-started/index.md b/docs/en/05-get-started/index.md index cf475a8cd7..09875362f4 100644 --- a/docs/en/05-get-started/index.md +++ b/docs/en/05-get-started/index.md @@ -3,9 +3,9 @@ title: Get Started description: This article describes how to install TDengine and test its performance. --- -The full package of TDengine includes the TDengine Server (`taosd`), TDengine Client (`taosc`), taosAdapter for connecting with third-party systems and providing a RESTful interface, a command-line interface, and some tools. In addition to connectors for multiple languages, TDengine also provides a [RESTful interface](/reference/rest-api) through [taosAdapter](/reference/taosadapter). +You can install and run TDengine on Linux and Windows machines as well as Docker containers. You can also deploy TDengine as a managed service with TDengine Cloud. -You can install and run TDengine on Linux and Windows machines as well as Docker containers. +The full package of TDengine includes the TDengine Server (`taosd`), TDengine Client (`taosc`), taosAdapter for connecting with third-party systems and providing a RESTful interface, a command-line interface, and some tools. In addition to connectors for multiple languages, TDengine also provides a [RESTful interface](/reference/rest-api) through [taosAdapter](/reference/taosadapter). ```mdx-code-block import DocCardList from '@theme/DocCardList';