提交 2e1d69ce 编写于 作者: J jiacy-jcy

Merge branch '3.0' into 3.0test/jcy

......@@ -52,6 +52,7 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption);
* @param pMnode The mnode object to close.
*/
void mndClose(SMnode *pMnode);
void mndPreClose(SMnode *pMnode);
/**
* @brief Start mnode
......
......@@ -69,10 +69,9 @@ typedef void (*_ref_fn_t)(const void *pObj);
#define T_REF_VAL_GET(x) (x)->_ref.val
// single writer multiple reader lock
typedef volatile int64_t SRWLatch;
typedef volatile int32_t SRWLatch;
void taosInitRWLatch(SRWLatch *pLatch);
void taosInitReentrantRWLatch(SRWLatch *pLatch);
void taosWLockLatch(SRWLatch *pLatch);
void taosWUnLockLatch(SRWLatch *pLatch);
void taosRLockLatch(SRWLatch *pLatch);
......
......@@ -169,6 +169,7 @@ typedef struct SReqResultInfo {
uint32_t numOfRows;
uint64_t totalRows;
uint32_t current;
bool localResultFetched;
bool completed;
int32_t precision;
bool convertUcs4;
......
......@@ -1905,6 +1905,10 @@ int32_t appendTbToReq(SArray* pList, int32_t pos1, int32_t len1, int32_t pos2, i
tbLen = len1;
}
if (dbLen <= 0 || tbLen <= 0) {
return -1;
}
if (tNameSetDbName(&name, acctId, dbName, dbLen)) {
return -1;
}
......
......@@ -852,23 +852,33 @@ void taos_fetch_rows_a(TAOS_RES *res, __taos_async_fn_t fp, void *param) {
}
// all data has returned to App already, no need to try again
if ((pResultInfo->pData == NULL || pResultInfo->current >= pResultInfo->numOfRows) && pResultInfo->completed) {
if (pResultInfo->completed && (pRequest->body.queryJob != 0)) {
pResultInfo->numOfRows = 0;
pRequest->body.fetchFp(param, pRequest, pResultInfo->numOfRows);
return;
}
// it is a local executed query, no need to do async fetch
if (pResultInfo->current < pResultInfo->numOfRows && pRequest->body.queryJob == 0) {
pRequest->body.fetchFp(param, pRequest, pResultInfo->numOfRows);
if (pRequest->body.queryJob == 0) {
ASSERT(pResultInfo->completed && pResultInfo->numOfRows >= 0);
if (pResultInfo->localResultFetched) {
pResultInfo->numOfRows = 0;
pResultInfo->current = 0;
pRequest->body.fetchFp(param, pRequest, pResultInfo->numOfRows);
} else {
pResultInfo->localResultFetched = true;
pRequest->body.fetchFp(param, pRequest, pResultInfo->numOfRows);
}
return;
}
SSchedulerReq req = {
.syncReq = false,
.fetchFp = fetchCallback,
.cbParam = pRequest,
};
schedulerFetchRows(pRequest->body.queryJob, &req);
}
......@@ -880,10 +890,10 @@ void taos_fetch_raw_block_a(TAOS_RES *res, __taos_async_fn_t fp, void *param) {
SReqResultInfo *pResultInfo = &pRequest->body.resInfo;
// set the current block is all consumed
pResultInfo->current = pResultInfo->numOfRows;
pResultInfo->convertUcs4 = false;
taos_fetch_rows_a(res, fp, param);
// it is a local executed query, no need to do async fetch
taos_fetch_rows_a(pRequest, fp, param);
}
const void *taos_get_raw_block(TAOS_RES *res) {
......
......@@ -114,7 +114,7 @@ int32_t tsMinSlidingTime = 10;
// the maxinum number of distict query result
int32_t tsMaxNumOfDistinctResults = 1000 * 10000;
// 1 us for interval time range, changed accordingly
// 1 database precision unit for interval time range, changed accordingly
int32_t tsMinIntervalTime = 1;
// 20sec, the maximum value of stream computing delay, changed accordingly
......
......@@ -150,6 +150,7 @@ static void mmStop(SMnodeMgmt *pMgmt) {
dDebug("mnode-mgmt start to stop");
taosThreadRwlockWrlock(&pMgmt->lock);
pMgmt->stopped = 1;
mndPreClose(pMgmt->pMnode);
taosThreadRwlockUnlock(&pMgmt->lock);
mndStop(pMgmt->pMnode);
......
......@@ -75,11 +75,13 @@ int32_t vmOpenVnode(SVnodeMgmt *pMgmt, SWrapperCfg *pCfg, SVnode *pImpl) {
void vmCloseVnode(SVnodeMgmt *pMgmt, SVnodeObj *pVnode) {
char path[TSDB_FILENAME_LEN] = {0};
vnodePreClose(pVnode->pImpl);
taosThreadRwlockWrlock(&pMgmt->lock);
taosHashRemove(pMgmt->hash, &pVnode->vgId, sizeof(int32_t));
taosThreadRwlockUnlock(&pMgmt->lock);
vmReleaseVnode(pMgmt, pVnode);
while (pVnode->refCount > 0) taosMsleep(10);
dTrace("vgId:%d, wait for vnode queue is empty", pVnode->vgId);
......
......@@ -366,6 +366,12 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) {
return pMnode;
}
void mndPreClose(SMnode *pMnode) {
if (pMnode != NULL) {
syncLeaderTransfer(pMnode->syncMgmt.sync);
}
}
void mndClose(SMnode *pMnode) {
if (pMnode != NULL) {
mDebug("start to close mnode");
......
......@@ -199,6 +199,7 @@ int32_t mndInitSync(SMnode *pMnode) {
}
// decrease election timer
setPingTimerMS(pMgmt->sync, 5000);
setElectTimerMS(pMgmt->sync, 600);
setHeartbeatTimerMS(pMgmt->sync, 300);
......
......@@ -51,6 +51,7 @@ void vnodeCleanup();
int32_t vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs);
void vnodeDestroy(const char *path, STfs *pTfs);
SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb);
void vnodePreClose(SVnode *pVnode);
void vnodeClose(SVnode *pVnode);
int32_t vnodeStart(SVnode *pVnode);
......
......@@ -175,6 +175,12 @@ _err:
return NULL;
}
void vnodePreClose(SVnode *pVnode) {
if (pVnode) {
syncLeaderTransfer(pVnode->sync);
}
}
void vnodeClose(SVnode *pVnode) {
if (pVnode) {
vnodeCommit(pVnode);
......
......@@ -569,7 +569,7 @@ int32_t vnodeSyncOpen(SVnode *pVnode, char *path) {
return -1;
}
setPingTimerMS(pVnode->sync, 3000);
setPingTimerMS(pVnode->sync, 5000);
setElectTimerMS(pVnode->sync, 500);
setHeartbeatTimerMS(pVnode->sync, 100);
return 0;
......
......@@ -482,33 +482,33 @@ typedef struct SCtgOperation {
#define CTG_LOCK(type, _lock) do { \
if (CTG_READ == (type)) { \
assert(atomic_load_64((_lock)) >= 0); \
CTG_LOCK_DEBUG("CTG RLOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
CTG_LOCK_DEBUG("CTG RLOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosRLockLatch(_lock); \
CTG_LOCK_DEBUG("CTG RLOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) > 0); \
CTG_LOCK_DEBUG("CTG RLOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) > 0); \
} else { \
assert(atomic_load_64((_lock)) >= 0); \
CTG_LOCK_DEBUG("CTG WLOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
CTG_LOCK_DEBUG("CTG WLOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosWLockLatch(_lock); \
CTG_LOCK_DEBUG("CTG WLOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
CTG_LOCK_DEBUG("CTG WLOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
} \
} while (0)
#define CTG_UNLOCK(type, _lock) do { \
if (CTG_READ == (type)) { \
assert(atomic_load_64((_lock)) > 0); \
CTG_LOCK_DEBUG("CTG RULOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) > 0); \
CTG_LOCK_DEBUG("CTG RULOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosRUnLockLatch(_lock); \
CTG_LOCK_DEBUG("CTG RULOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) >= 0); \
CTG_LOCK_DEBUG("CTG RULOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
} else { \
assert(atomic_load_64((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
CTG_LOCK_DEBUG("CTG WULOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
CTG_LOCK_DEBUG("CTG WULOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosWUnLockLatch(_lock); \
CTG_LOCK_DEBUG("CTG WULOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) >= 0); \
CTG_LOCK_DEBUG("CTG WULOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
} \
} while (0)
......
......@@ -538,7 +538,7 @@ static int32_t doSetInputDataBlock(SOperatorInfo* pOperator, SqlFunctionCtx* pCt
return code;
}
static int32_t doAggregateImpl(SOperatorInfo* pOperator, TSKEY startTs, SqlFunctionCtx* pCtx) {
static int32_t doAggregateImpl(SOperatorInfo* pOperator, SqlFunctionCtx* pCtx) {
for (int32_t k = 0; k < pOperator->exprSupp.numOfExprs; ++k) {
if (functionNeedToExecute(&pCtx[k])) {
// todo add a dummy funtion to avoid process check
......@@ -2969,25 +2969,10 @@ static int32_t doOpenAggregateOptr(SOperatorInfo* pOperator) {
// the pDataBlock are always the same one, no need to call this again
setExecutionContext(pOperator, pOperator->exprSupp.numOfExprs, pBlock->info.groupId, pAggInfo);
setInputDataBlock(pOperator, pSup->pCtx, pBlock, order, scanFlag, true);
code = doAggregateImpl(pOperator, 0, pSup->pCtx);
code = doAggregateImpl(pOperator, pSup->pCtx);
if (code != 0) {
longjmp(pTaskInfo->env, code);
}
#if 0 // test for encode/decode result info
if(pOperator->fpSet.encodeResultRow){
char *result = NULL;
int32_t length = 0;
pOperator->fpSet.encodeResultRow(pOperator, &result, &length);
SAggSupporter* pSup = &pAggInfo->aggSup;
taosHashClear(pSup->pResultRowHashTable);
pInfo->resultRowInfo.size = 0;
pOperator->fpSet.decodeResultRow(pOperator, result);
if(result){
taosMemoryFree(result);
}
}
#endif
}
closeAllResultRows(&pAggInfo->binfo.resultRowInfo);
......
......@@ -2860,101 +2860,3 @@ _error:
return NULL;
}
static SSDataBlock* doScanLastrow(SOperatorInfo* pOperator) {
if (pOperator->status == OP_EXEC_DONE) {
return NULL;
}
SLastrowScanInfo* pInfo = pOperator->info;
SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo;
int32_t size = taosArrayGetSize(pInfo->pTableList);
if (size == 0) {
setTaskStatus(pTaskInfo, TASK_COMPLETED);
return NULL;
}
// check if it is a group by tbname
if (size == taosArrayGetSize(pInfo->pTableList)) {
blockDataCleanup(pInfo->pRes);
tsdbRetrieveLastRow(pInfo->pLastrowReader, pInfo->pRes, pInfo->pSlotIds);
return (pInfo->pRes->info.rows == 0) ? NULL : pInfo->pRes;
} else {
// todo fetch the result for each group
}
return pInfo->pRes->info.rows == 0 ? NULL : pInfo->pRes;
}
static void destroyLastrowScanOperator(void* param, int32_t numOfOutput) {
SLastrowScanInfo* pInfo = (SLastrowScanInfo*)param;
blockDataDestroy(pInfo->pRes);
tsdbLastrowReaderClose(pInfo->pLastrowReader);
taosMemoryFreeClear(param);
}
SOperatorInfo* createLastrowScanOperator(SLastRowScanPhysiNode* pScanNode, SReadHandle* readHandle, SArray* pTableList,
SExecTaskInfo* pTaskInfo) {
SLastrowScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SLastrowScanInfo));
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
if (pInfo == NULL || pOperator == NULL) {
goto _error;
}
pInfo->pTableList = pTableList;
pInfo->readHandle = *readHandle;
pInfo->pRes = createResDataBlock(pScanNode->node.pOutputDataBlockDesc);
int32_t numOfCols = 0;
pInfo->pColMatchInfo = extractColMatchInfo(pScanNode->pScanCols, pScanNode->node.pOutputDataBlockDesc, &numOfCols,
COL_MATCH_FROM_COL_ID);
int32_t* pCols = taosMemoryMalloc(numOfCols * sizeof(int32_t));
for (int32_t i = 0; i < numOfCols; ++i) {
SColMatchInfo* pColMatch = taosArrayGet(pInfo->pColMatchInfo, i);
pCols[i] = pColMatch->colId;
}
pInfo->pSlotIds = taosMemoryMalloc(numOfCols * sizeof(pInfo->pSlotIds[0]));
for (int32_t i = 0; i < numOfCols; ++i) {
SColMatchInfo* pColMatch = taosArrayGet(pInfo->pColMatchInfo, i);
for (int32_t j = 0; j < pTaskInfo->schemaVer.sw->nCols; ++j) {
if (pColMatch->colId == pTaskInfo->schemaVer.sw->pSchema[j].colId &&
pColMatch->colId == PRIMARYKEY_TIMESTAMP_COL_ID) {
pInfo->pSlotIds[pColMatch->targetSlotId] = -1;
break;
}
if (pColMatch->colId == pTaskInfo->schemaVer.sw->pSchema[j].colId) {
pInfo->pSlotIds[pColMatch->targetSlotId] = j;
break;
}
}
}
tsdbLastRowReaderOpen(readHandle->vnode, LASTROW_RETRIEVE_TYPE_ALL, pTableList, pCols, numOfCols,
&pInfo->pLastrowReader);
taosMemoryFree(pCols);
pOperator->name = "LastrowScanOperator";
pOperator->operatorType = QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN;
pOperator->blocking = false;
pOperator->status = OP_NOT_OPENED;
pOperator->info = pInfo;
pOperator->pTaskInfo = pTaskInfo;
pOperator->exprSupp.numOfExprs = taosArrayGetSize(pInfo->pRes->pDataBlock);
initResultSizeInfo(pOperator, 1024);
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
pOperator->fpSet =
createOperatorFpSet(operatorDummyOpenFn, doScanLastrow, NULL, NULL, destroyLastrowScanOperator, NULL, NULL, NULL);
pOperator->cost.openCost = 0;
return pOperator;
_error:
pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY;
taosMemoryFree(pInfo);
taosMemoryFree(pOperator);
return NULL;
}
......@@ -338,6 +338,104 @@ typedef struct SGroupKeyInfo {
} \
} while (0)
#define LIST_ADD_N(_res, _col, _start, _rows, _t, numOfElem) \
do { \
_t* d = (_t*)(_col->pData); \
for (int32_t i = (_start); i < (_rows) + (_start); ++i) { \
if (((_col)->hasNull) && colDataIsNull_f((_col)->nullbitmap, i)) { \
continue; \
}; \
(_res) += (d)[i]; \
(numOfElem)++; \
} \
} while (0)
#define LIST_SUB_N(_res, _col, _start, _rows, _t, numOfElem) \
do { \
_t* d = (_t*)(_col->pData); \
for (int32_t i = (_start); i < (_rows) + (_start); ++i) { \
if (((_col)->hasNull) && colDataIsNull_f((_col)->nullbitmap, i)) { \
continue; \
}; \
(_res) -= (d)[i]; \
(numOfElem)++; \
} \
} while (0)
#define LIST_AVG_N(sumT, T) \
do { \
T* plist = (T*)pCol->pData; \
for (int32_t i = start; i < numOfRows + pInput->startRowIndex; ++i) { \
if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) { \
continue; \
} \
\
numOfElem += 1; \
pAvgRes->count -= 1; \
sumT -= plist[i]; \
} \
} while (0)
#define LIST_STDDEV_SUB_N(sumT, T) \
do { \
T* plist = (T*)pCol->pData; \
for (int32_t i = start; i < numOfRows + start; ++i) { \
if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) { \
continue; \
} \
numOfElem += 1; \
pStddevRes->count -= 1; \
sumT -= plist[i]; \
pStddevRes->quadraticISum -= plist[i] * plist[i]; \
} \
} while (0)
#define LEASTSQR_CAL(p, x, y, index, step) \
do { \
(p)[0][0] += (double)(x) * (x); \
(p)[0][1] += (double)(x); \
(p)[0][2] += (double)(x) * (y)[index]; \
(p)[1][2] += (y)[index]; \
(x) += step; \
} while (0)
#define STATE_COMP(_op, _lval, _param) STATE_COMP_IMPL(_op, _lval, GET_STATE_VAL(_param))
#define GET_STATE_VAL(param) ((param.nType == TSDB_DATA_TYPE_BIGINT) ? (param.i) : (param.d))
#define STATE_COMP_IMPL(_op, _lval, _rval) \
do { \
switch (_op) { \
case STATE_OPER_LT: \
return ((_lval) < (_rval)); \
break; \
case STATE_OPER_GT: \
return ((_lval) > (_rval)); \
break; \
case STATE_OPER_LE: \
return ((_lval) <= (_rval)); \
break; \
case STATE_OPER_GE: \
return ((_lval) >= (_rval)); \
break; \
case STATE_OPER_NE: \
return ((_lval) != (_rval)); \
break; \
case STATE_OPER_EQ: \
return ((_lval) == (_rval)); \
break; \
default: \
break; \
} \
} while (0)
#define INIT_INTP_POINT(_p, _k, _v) \
do { \
(_p).key = (_k); \
(_p).val = (_v); \
} while (0)
bool dummyGetEnv(SFunctionNode* UNUSED_PARAM(pFunc), SFuncExecEnv* UNUSED_PARAM(pEnv)) { return true; }
bool dummyInit(SqlFunctionCtx* UNUSED_PARAM(pCtx), SResultRowEntryInfo* UNUSED_PARAM(pResultInfo)) { return true; }
......@@ -499,30 +597,6 @@ int32_t combineFunction(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx) {
return TSDB_CODE_SUCCESS;
}
#define LIST_ADD_N(_res, _col, _start, _rows, _t, numOfElem) \
do { \
_t* d = (_t*)(_col->pData); \
for (int32_t i = (_start); i < (_rows) + (_start); ++i) { \
if (((_col)->hasNull) && colDataIsNull_f((_col)->nullbitmap, i)) { \
continue; \
}; \
(_res) += (d)[i]; \
(numOfElem)++; \
} \
} while (0)
#define LIST_SUB_N(_res, _col, _start, _rows, _t, numOfElem) \
do { \
_t* d = (_t*)(_col->pData); \
for (int32_t i = (_start); i < (_rows) + (_start); ++i) { \
if (((_col)->hasNull) && colDataIsNull_f((_col)->nullbitmap, i)) { \
continue; \
}; \
(_res) -= (d)[i]; \
(numOfElem)++; \
} \
} while (0)
int32_t sumFunction(SqlFunctionCtx* pCtx) {
int32_t numOfElem = 0;
......@@ -920,20 +994,6 @@ int32_t avgFunctionMerge(SqlFunctionCtx* pCtx) {
return TSDB_CODE_SUCCESS;
}
#define LIST_AVG_N(sumT, T) \
do { \
T* plist = (T*)pCol->pData; \
for (int32_t i = start; i < numOfRows + pInput->startRowIndex; ++i) { \
if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) { \
continue; \
} \
\
numOfElem += 1; \
pAvgRes->count -= 1; \
sumT -= plist[i]; \
} \
} while (0)
int32_t avgInvertFunction(SqlFunctionCtx* pCtx) {
int32_t numOfElem = 0;
......@@ -1884,20 +1944,6 @@ int32_t stddevFunctionMerge(SqlFunctionCtx* pCtx) {
return TSDB_CODE_SUCCESS;
}
#define LIST_STDDEV_SUB_N(sumT, T) \
do { \
T* plist = (T*)pCol->pData; \
for (int32_t i = start; i < numOfRows + start; ++i) { \
if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) { \
continue; \
} \
numOfElem += 1; \
pStddevRes->count -= 1; \
sumT -= plist[i]; \
pStddevRes->quadraticISum -= plist[i] * plist[i]; \
} \
} while (0)
int32_t stddevInvertFunction(SqlFunctionCtx* pCtx) {
int32_t numOfElem = 0;
......@@ -2046,15 +2092,6 @@ bool leastSQRFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResultInf
return true;
}
#define LEASTSQR_CAL(p, x, y, index, step) \
do { \
(p)[0][0] += (double)(x) * (x); \
(p)[0][1] += (double)(x); \
(p)[0][2] += (double)(x) * (y)[index]; \
(p)[1][2] += (y)[index]; \
(x) += step; \
} while (0)
int32_t leastSQRFunction(SqlFunctionCtx* pCtx) {
int32_t numOfElem = 0;
......@@ -2733,7 +2770,6 @@ int32_t firstFunction(SqlFunctionCtx* pCtx) {
}
}
pInfo->hasResult = true;
// DO_UPDATE_TAG_COLUMNS(pCtx, ts);
pResInfo->numOfRes = 1;
break;
}
......@@ -2830,7 +2866,6 @@ int32_t lastFunction(SqlFunctionCtx* pCtx) {
}
pInfo->hasResult = true;
pResInfo->numOfRes = 1;
// DO_UPDATE_TAG_COLUMNS(pCtx, ts);
}
break;
}
......@@ -4477,36 +4512,6 @@ static int8_t getStateOpType(char* opStr) {
return opType;
}
#define GET_STATE_VAL(param) ((param.nType == TSDB_DATA_TYPE_BIGINT) ? (param.i) : (param.d))
#define STATE_COMP(_op, _lval, _param) STATE_COMP_IMPL(_op, _lval, GET_STATE_VAL(_param))
#define STATE_COMP_IMPL(_op, _lval, _rval) \
do { \
switch (_op) { \
case STATE_OPER_LT: \
return ((_lval) < (_rval)); \
break; \
case STATE_OPER_GT: \
return ((_lval) > (_rval)); \
break; \
case STATE_OPER_LE: \
return ((_lval) <= (_rval)); \
break; \
case STATE_OPER_GE: \
return ((_lval) >= (_rval)); \
break; \
case STATE_OPER_NE: \
return ((_lval) != (_rval)); \
break; \
case STATE_OPER_EQ: \
return ((_lval) == (_rval)); \
break; \
default: \
break; \
} \
} while (0)
static bool checkStateOp(int8_t op, SColumnInfoData* pCol, int32_t index, SVariant param) {
char* data = colDataGetData(pCol, index);
switch (pCol->info.type) {
......@@ -5214,12 +5219,6 @@ static double twa_get_area(SPoint1 s, SPoint1 e) {
return val;
}
#define INIT_INTP_POINT(_p, _k, _v) \
do { \
(_p).key = (_k); \
(_p).val = (_v); \
} while (0)
int32_t twaFunction(SqlFunctionCtx* pCtx) {
SInputColumnInfoData* pInput = &pCtx->input;
SColumnInfoData* pInputCol = pInput->pData[0];
......@@ -6009,6 +6008,15 @@ int32_t lastrowFunction(SqlFunctionCtx* pCtx) {
pInfo->hasResult = true;
pResInfo->numOfRes = 1;
if (pCtx->subsidiaries.num > 0) {
STuplePos* pTuplePos = (STuplePos*)(pInfo->buf + bytes + sizeof(TSKEY));
if (!pInfo->hasResult) {
saveTupleData(pCtx, i, pCtx->pSrcBlock, pTuplePos);
} else {
copyTupleData(pCtx, i, pCtx->pSrcBlock, pTuplePos);
}
}
}
}
......
......@@ -2481,7 +2481,6 @@ static int32_t jsonToSubplan(const SJson* pJson, void* pObj) {
int32_t code = tjsonToObject(pJson, jkSubplanId, jsonToSubplanId, &pNode->id);
if (TSDB_CODE_SUCCESS == code) {
tjsonGetNumberValue(pJson, jkSubplanType, pNode->subplanType, code);
;
}
if (TSDB_CODE_SUCCESS == code) {
code = tjsonGetIntValue(pJson, jkSubplanMsgType, &pNode->msgType);
......
......@@ -956,7 +956,8 @@ void nodesDestroyNode(SNode* pNode) {
}
case QUERY_NODE_PHYSICAL_SUBPLAN: {
SSubplan* pSubplan = (SSubplan*)pNode;
nodesDestroyList(pSubplan->pChildren);
// nodesDestroyList(pSubplan->pChildren);
nodesClearList(pSubplan->pChildren);
nodesDestroyNode((SNode*)pSubplan->pNode);
nodesDestroyNode((SNode*)pSubplan->pDataSink);
nodesDestroyNode((SNode*)pSubplan->pTagCond);
......@@ -972,7 +973,7 @@ void nodesDestroyNode(SNode* pNode) {
SNode* pElement = NULL;
FOREACH(pElement, pPlan->pSubplans) {
if (first) {
first = false;
// first = false;
nodesDestroyNode(pElement);
} else {
nodesClearList(((SNodeListNode*)pElement)->pNodeList);
......
......@@ -556,6 +556,7 @@ signed_literal(A) ::= TIMESTAMP NK_STRING(B).
signed_literal(A) ::= duration_literal(B). { A = releaseRawExprNode(pCxt, B); }
signed_literal(A) ::= NULL(B). { A = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B); }
signed_literal(A) ::= literal_func(B). { A = releaseRawExprNode(pCxt, B); }
signed_literal(A) ::= NK_QUESTION(B). { A = createPlaceholderValueNode(pCxt, &B); }
%type literal_list { SNodeList* }
%destructor literal_list { nodesDestroyList($$); }
......
......@@ -133,7 +133,10 @@ static int32_t createSName(SName* pName, SToken* pTableName, int32_t acctId, con
assert(*p == TS_PATH_DELIMITER[0]);
int32_t dbLen = p - pTableName->z;
char name[TSDB_DB_FNAME_LEN] = {0};
if (dbLen <= 0) {
return buildInvalidOperationMsg(pMsgBuf, msg2);
}
char name[TSDB_DB_FNAME_LEN] = {0};
strncpy(name, pTableName->z, dbLen);
dbLen = strdequote(name);
......
......@@ -2173,14 +2173,28 @@ static int64_t getMonthsFromTimeVal(int64_t val, int32_t fromPrecision, char uni
return -1;
}
static const char* getPrecisionStr(uint8_t precision) {
switch (precision) {
case TSDB_TIME_PRECISION_MILLI:
return TSDB_TIME_PRECISION_MILLI_STR;
case TSDB_TIME_PRECISION_MICRO:
return TSDB_TIME_PRECISION_MICRO_STR;
case TSDB_TIME_PRECISION_NANO:
return TSDB_TIME_PRECISION_NANO_STR;
default:
break;
}
return "unknown";
}
static int32_t checkIntervalWindow(STranslateContext* pCxt, SIntervalWindowNode* pInterval) {
uint8_t precision = ((SColumnNode*)pInterval->pCol)->node.resType.precision;
SValueNode* pInter = (SValueNode*)pInterval->pInterval;
bool valInter = TIME_IS_VAR_DURATION(pInter->unit);
if (pInter->datum.i <= 0 ||
(!valInter && convertTimePrecision(pInter->datum.i, precision, TSDB_TIME_PRECISION_MICRO) < tsMinIntervalTime)) {
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INTER_VALUE_TOO_SMALL, tsMinIntervalTime);
if (pInter->datum.i <= 0 || (!valInter && pInter->datum.i < tsMinIntervalTime)) {
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INTER_VALUE_TOO_SMALL, tsMinIntervalTime,
getPrecisionStr(precision));
}
if (NULL != pInterval->pOffset) {
......@@ -2754,6 +2768,11 @@ static int32_t translateInsertProject(STranslateContext* pCxt, SInsertStmt* pIns
}
}
if (NULL == pPrimaryKeyExpr) {
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_COLUMNS_NUM,
"Primary timestamp column can not be null");
}
return addOrderByPrimaryKeyToQuery(pCxt, pPrimaryKeyExpr, pInsert->pQuery);
}
......@@ -2998,8 +3017,7 @@ static int32_t checkDatabaseOptions(STranslateContext* pCxt, const char* pDbName
int32_t code =
checkRangeOption(pCxt, "buffer", pOptions->buffer, TSDB_MIN_BUFFER_PER_VNODE, TSDB_MAX_BUFFER_PER_VNODE);
if (TSDB_CODE_SUCCESS == code) {
code = checkRangeOption(pCxt, "cacheLast", pOptions->cacheLast, TSDB_MIN_DB_CACHE_LAST,
TSDB_MAX_DB_CACHE_LAST);
code = checkRangeOption(pCxt, "cacheLast", pOptions->cacheLast, TSDB_MIN_DB_CACHE_LAST, TSDB_MAX_DB_CACHE_LAST);
}
if (TSDB_CODE_SUCCESS == code) {
code = checkRangeOption(pCxt, "cacheLastSize", pOptions->cacheLastSize, TSDB_MIN_DB_CACHE_LAST_SIZE,
......
......@@ -60,7 +60,7 @@ static char* getSyntaxErrFormat(int32_t errCode) {
case TSDB_CODE_PAR_EXPRIE_STATEMENT:
return "This statement is no longer supported";
case TSDB_CODE_PAR_INTER_VALUE_TOO_SMALL:
return "Interval cannot be less than %d us";
return "Interval cannot be less than %d %s";
case TSDB_CODE_PAR_DB_NOT_SPECIFIED:
return "Database not specified";
case TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME:
......
......@@ -140,16 +140,16 @@ typedef union {
#define ParseCTX_STORE
#define YYFALLBACK 1
#define YYNSTATE 666
#define YYNRULE 488
#define YYNRULE 489
#define YYNTOKEN 255
#define YY_MAX_SHIFT 665
#define YY_MIN_SHIFTREDUCE 969
#define YY_MAX_SHIFTREDUCE 1456
#define YY_ERROR_ACTION 1457
#define YY_ACCEPT_ACTION 1458
#define YY_NO_ACTION 1459
#define YY_MIN_REDUCE 1460
#define YY_MAX_REDUCE 1947
#define YY_MIN_SHIFTREDUCE 970
#define YY_MAX_SHIFTREDUCE 1458
#define YY_ERROR_ACTION 1459
#define YY_ACCEPT_ACTION 1460
#define YY_NO_ACTION 1461
#define YY_MIN_REDUCE 1462
#define YY_MAX_REDUCE 1950
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
......@@ -216,260 +216,240 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (2520)
#define YY_ACTTAB_COUNT (2318)
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 529, 1698, 433, 552, 434, 1495, 441, 1587, 434, 1495,
/* 10 */ 1769, 113, 39, 37, 386, 62, 517, 1583, 471, 380,
/* 20 */ 338, 1766, 1258, 1002, 324, 79, 1782, 1695, 1598, 30,
/* 30 */ 260, 122, 143, 1333, 103, 1256, 1554, 102, 101, 100,
/* 40 */ 99, 98, 97, 96, 95, 94, 1591, 1762, 1768, 327,
/* 50 */ 71, 302, 557, 1925, 1800, 555, 1328, 1512, 1283, 574,
/* 60 */ 1925, 14, 581, 1006, 1007, 500, 1924, 1752, 1264, 580,
/* 70 */ 1922, 120, 1594, 159, 39, 37, 1396, 1922, 498, 487,
/* 80 */ 496, 529, 338, 557, 1258, 1, 250, 1867, 551, 1019,
/* 90 */ 550, 1018, 164, 1925, 1813, 1333, 61, 1256, 89, 1783,
/* 100 */ 583, 1785, 1786, 579, 469, 574, 161, 662, 1859, 1598,
/* 110 */ 1922, 343, 305, 1855, 1643, 1645, 71, 61, 1328, 1020,
/* 120 */ 43, 1335, 1336, 14, 1925, 1461, 1925, 33, 32, 117,
/* 130 */ 1264, 40, 38, 36, 35, 34, 475, 161, 1593, 160,
/* 140 */ 142, 1922, 1472, 1922, 1483, 1782, 103, 2, 214, 102,
/* 150 */ 101, 100, 99, 98, 97, 96, 95, 94, 474, 1155,
/* 160 */ 1156, 486, 485, 484, 170, 1925, 1259, 483, 1257, 662,
/* 170 */ 118, 480, 325, 1800, 479, 478, 477, 1458, 1923, 74,
/* 180 */ 140, 556, 1922, 1335, 1336, 1752, 1752, 555, 580, 1600,
/* 190 */ 1644, 1645, 69, 1262, 1263, 68, 1311, 1312, 1314, 1315,
/* 200 */ 1316, 1317, 1318, 576, 572, 1326, 1327, 1329, 1330, 1331,
/* 210 */ 1332, 1334, 1337, 1813, 36, 35, 34, 90, 1783, 583,
/* 220 */ 1785, 1786, 579, 529, 574, 162, 371, 1859, 1259, 555,
/* 230 */ 1257, 329, 1855, 154, 113, 419, 162, 350, 1482, 33,
/* 0 */ 529, 1700, 433, 552, 434, 1497, 441, 1589, 434, 1497,
/* 10 */ 1772, 113, 39, 37, 386, 62, 517, 1585, 471, 380,
/* 20 */ 338, 1768, 1259, 1003, 324, 79, 1785, 1697, 1600, 30,
/* 30 */ 260, 122, 143, 1335, 103, 1257, 1556, 102, 101, 100,
/* 40 */ 99, 98, 97, 96, 95, 94, 1593, 1764, 1770, 327,
/* 50 */ 71, 302, 557, 1928, 1803, 555, 1330, 1514, 1285, 574,
/* 60 */ 1928, 14, 581, 1007, 1008, 500, 1927, 1754, 1265, 580,
/* 70 */ 1925, 120, 1596, 159, 39, 37, 1398, 1925, 498, 487,
/* 80 */ 496, 529, 338, 557, 1259, 1, 250, 1870, 551, 1020,
/* 90 */ 550, 1019, 164, 1928, 1816, 1335, 61, 1257, 89, 1786,
/* 100 */ 583, 1788, 1789, 579, 469, 574, 161, 662, 1862, 1600,
/* 110 */ 1925, 343, 305, 1858, 1645, 1647, 71, 61, 1330, 1021,
/* 120 */ 43, 1337, 1338, 14, 1928, 1463, 1928, 33, 32, 117,
/* 130 */ 1265, 40, 38, 36, 35, 34, 475, 161, 1595, 160,
/* 140 */ 142, 1925, 1474, 1925, 1485, 1785, 103, 2, 214, 102,
/* 150 */ 101, 100, 99, 98, 97, 96, 95, 94, 474, 1156,
/* 160 */ 1157, 486, 485, 484, 170, 1928, 1260, 483, 1258, 662,
/* 170 */ 118, 480, 325, 1803, 479, 478, 477, 1460, 1926, 74,
/* 180 */ 140, 556, 1925, 1337, 1338, 1754, 1754, 555, 580, 1602,
/* 190 */ 1646, 1647, 69, 1263, 1264, 68, 1313, 1314, 1316, 1317,
/* 200 */ 1318, 1319, 1320, 576, 572, 1328, 1329, 1331, 1332, 1333,
/* 210 */ 1334, 1336, 1339, 1816, 36, 35, 34, 90, 1786, 583,
/* 220 */ 1788, 1789, 579, 529, 574, 162, 371, 1862, 1260, 555,
/* 230 */ 1258, 329, 1858, 154, 113, 419, 162, 350, 1484, 33,
/* 240 */ 32, 476, 450, 40, 38, 36, 35, 34, 373, 369,
/* 250 */ 1283, 1598, 552, 1886, 1393, 1262, 1263, 162, 1311, 1312,
/* 260 */ 1314, 1315, 1316, 1317, 1318, 576, 572, 1326, 1327, 1329,
/* 270 */ 1330, 1331, 1332, 1334, 1337, 39, 37, 1453, 1925, 1752,
/* 280 */ 122, 174, 173, 338, 220, 1258, 40, 38, 36, 35,
/* 290 */ 34, 159, 306, 61, 42, 1922, 1333, 1739, 1256, 1113,
/* 300 */ 605, 604, 603, 1117, 602, 1119, 1120, 601, 1122, 598,
/* 310 */ 1800, 1128, 595, 1130, 1131, 592, 589, 1296, 545, 1328,
/* 320 */ 120, 1782, 33, 32, 14, 1355, 40, 38, 36, 35,
/* 330 */ 34, 1264, 39, 37, 554, 155, 1867, 1868, 86, 1872,
/* 340 */ 338, 552, 1258, 1769, 359, 1650, 1238, 1239, 2, 1800,
/* 350 */ 341, 119, 326, 1333, 1766, 1256, 544, 581, 140, 1590,
/* 360 */ 344, 1648, 1752, 529, 580, 1400, 1452, 1600, 140, 122,
/* 370 */ 662, 1282, 1282, 379, 165, 378, 1328, 1600, 557, 1356,
/* 380 */ 1762, 1768, 333, 1576, 1335, 1336, 1460, 432, 1264, 1813,
/* 390 */ 436, 1598, 574, 89, 1783, 583, 1785, 1786, 579, 1481,
/* 400 */ 574, 440, 1361, 1859, 436, 8, 215, 305, 1855, 120,
/* 410 */ 112, 111, 110, 109, 108, 107, 106, 105, 104, 1925,
/* 420 */ 482, 481, 632, 630, 156, 1867, 1868, 662, 1872, 1259,
/* 430 */ 208, 1257, 159, 162, 162, 61, 1922, 75, 516, 1480,
/* 440 */ 1752, 1335, 1336, 450, 29, 336, 1350, 1351, 1352, 1353,
/* 450 */ 1354, 1358, 1359, 1360, 1479, 315, 1262, 1263, 546, 1311,
/* 460 */ 1312, 1314, 1315, 1316, 1317, 1318, 576, 572, 1326, 1327,
/* 470 */ 1329, 1330, 1331, 1332, 1334, 1337, 1392, 33, 32, 1925,
/* 480 */ 1752, 40, 38, 36, 35, 34, 1259, 1357, 1257, 73,
/* 490 */ 304, 1650, 159, 519, 541, 1752, 1922, 33, 32, 348,
/* 500 */ 1284, 40, 38, 36, 35, 34, 316, 1649, 314, 313,
/* 510 */ 1362, 473, 616, 1262, 1263, 475, 1311, 1312, 1314, 1315,
/* 520 */ 1316, 1317, 1318, 576, 572, 1326, 1327, 1329, 1330, 1331,
/* 530 */ 1332, 1334, 1337, 39, 37, 1338, 438, 474, 1006, 1007,
/* 540 */ 1925, 338, 1280, 1258, 1782, 162, 1874, 1478, 1313, 1019,
/* 550 */ 306, 1018, 27, 159, 1333, 1427, 1256, 1922, 1589, 33,
/* 560 */ 32, 221, 222, 40, 38, 36, 35, 34, 1285, 1766,
/* 570 */ 1871, 552, 1800, 547, 542, 162, 1574, 1328, 1281, 1020,
/* 580 */ 556, 529, 529, 1355, 153, 1752, 1477, 580, 1752, 1264,
/* 590 */ 39, 37, 384, 385, 22, 1762, 1768, 1637, 338, 122,
/* 600 */ 1258, 1522, 1075, 11, 10, 140, 9, 574, 1650, 1598,
/* 610 */ 1598, 1333, 1813, 1256, 1601, 342, 90, 1783, 583, 1785,
/* 620 */ 1786, 579, 304, 574, 1648, 519, 1859, 1752, 662, 529,
/* 630 */ 329, 1855, 154, 252, 1328, 1077, 616, 1356, 1874, 120,
/* 640 */ 389, 1473, 1335, 1336, 158, 1343, 1264, 1694, 1688, 299,
/* 650 */ 517, 1282, 1885, 1264, 157, 1867, 1868, 1598, 1872, 172,
/* 660 */ 1361, 1696, 1870, 9, 639, 638, 637, 636, 346, 561,
/* 250 */ 1285, 1600, 552, 1889, 1395, 1263, 1264, 162, 1313, 1314,
/* 260 */ 1316, 1317, 1318, 1319, 1320, 576, 572, 1328, 1329, 1331,
/* 270 */ 1332, 1333, 1334, 1336, 1339, 39, 37, 1455, 1928, 1754,
/* 280 */ 122, 174, 173, 338, 220, 1259, 40, 38, 36, 35,
/* 290 */ 34, 159, 306, 61, 42, 1925, 1335, 1741, 1257, 1114,
/* 300 */ 605, 604, 603, 1118, 602, 1120, 1121, 601, 1123, 598,
/* 310 */ 1803, 1129, 595, 1131, 1132, 592, 589, 1298, 545, 1330,
/* 320 */ 120, 1785, 33, 32, 14, 1357, 40, 38, 36, 35,
/* 330 */ 34, 1265, 39, 37, 554, 155, 1870, 1871, 86, 1875,
/* 340 */ 338, 552, 1259, 1772, 359, 1652, 1239, 1240, 2, 1803,
/* 350 */ 341, 119, 326, 1335, 1768, 1257, 544, 581, 140, 1592,
/* 360 */ 344, 1650, 1754, 529, 580, 1402, 1454, 1602, 140, 122,
/* 370 */ 662, 1284, 1284, 379, 165, 378, 1330, 1602, 557, 1358,
/* 380 */ 1764, 1770, 333, 1578, 1337, 1338, 1462, 432, 1265, 1816,
/* 390 */ 436, 1600, 574, 89, 1786, 583, 1788, 1789, 579, 1483,
/* 400 */ 574, 440, 1363, 1862, 436, 8, 215, 305, 1858, 120,
/* 410 */ 112, 111, 110, 109, 108, 107, 106, 105, 104, 1928,
/* 420 */ 482, 481, 632, 630, 156, 1870, 1871, 662, 1875, 1260,
/* 430 */ 208, 1258, 159, 162, 162, 61, 1925, 75, 516, 1482,
/* 440 */ 1754, 1337, 1338, 450, 29, 336, 1352, 1353, 1354, 1355,
/* 450 */ 1356, 1360, 1361, 1362, 1481, 315, 1263, 1264, 546, 1313,
/* 460 */ 1314, 1316, 1317, 1318, 1319, 1320, 576, 572, 1328, 1329,
/* 470 */ 1331, 1332, 1333, 1334, 1336, 1339, 1394, 33, 32, 1928,
/* 480 */ 1754, 40, 38, 36, 35, 34, 1260, 1359, 1258, 73,
/* 490 */ 304, 1652, 159, 519, 541, 1754, 1925, 33, 32, 348,
/* 500 */ 1286, 40, 38, 36, 35, 34, 316, 1651, 314, 313,
/* 510 */ 1364, 473, 616, 1263, 1264, 475, 1313, 1314, 1316, 1317,
/* 520 */ 1318, 1319, 1320, 576, 572, 1328, 1329, 1331, 1332, 1333,
/* 530 */ 1334, 1336, 1339, 39, 37, 1340, 438, 474, 1007, 1008,
/* 540 */ 1928, 338, 1282, 1259, 1785, 162, 1877, 1480, 1315, 1020,
/* 550 */ 306, 1019, 27, 159, 1335, 1429, 1257, 1925, 1591, 33,
/* 560 */ 32, 221, 222, 40, 38, 36, 35, 34, 1287, 1768,
/* 570 */ 1874, 552, 1803, 547, 542, 162, 1576, 1330, 1283, 1021,
/* 580 */ 556, 529, 529, 1357, 153, 1754, 1479, 580, 1754, 1265,
/* 590 */ 39, 37, 384, 385, 22, 1764, 1770, 1639, 338, 122,
/* 600 */ 1259, 1524, 1076, 11, 10, 140, 9, 574, 1652, 1600,
/* 610 */ 1600, 1335, 1816, 1257, 1603, 342, 90, 1786, 583, 1788,
/* 620 */ 1789, 579, 304, 574, 1650, 519, 1862, 1754, 662, 529,
/* 630 */ 329, 1858, 154, 252, 1330, 1078, 616, 1358, 1877, 120,
/* 640 */ 389, 1557, 1337, 1338, 158, 1345, 1265, 1696, 1690, 299,
/* 650 */ 517, 1284, 1888, 1265, 157, 1870, 1871, 1600, 1875, 172,
/* 660 */ 1363, 1698, 1873, 9, 639, 638, 637, 636, 346, 1587,
/* 670 */ 635, 634, 633, 123, 628, 627, 626, 625, 624, 623,
/* 680 */ 622, 621, 133, 617, 1525, 662, 1282, 1259, 1369, 1257,
/* 690 */ 33, 32, 1874, 1476, 40, 38, 36, 35, 34, 1335,
/* 700 */ 1336, 232, 29, 336, 1350, 1351, 1352, 1353, 1354, 1358,
/* 710 */ 1359, 1360, 7, 1475, 1262, 1263, 1869, 1311, 1312, 1314,
/* 720 */ 1315, 1316, 1317, 1318, 576, 572, 1326, 1327, 1329, 1330,
/* 730 */ 1331, 1332, 1334, 1337, 1752, 33, 32, 1879, 1389, 40,
/* 740 */ 38, 36, 35, 34, 1259, 608, 1257, 486, 485, 484,
/* 750 */ 44, 4, 1258, 483, 1752, 272, 118, 480, 1628, 619,
/* 760 */ 479, 478, 477, 1474, 1585, 1256, 1417, 1693, 1407, 299,
/* 770 */ 612, 1262, 1263, 1641, 1311, 1312, 1314, 1315, 1316, 1317,
/* 780 */ 1318, 576, 572, 1326, 1327, 1329, 1330, 1331, 1332, 1334,
/* 790 */ 1337, 39, 37, 301, 613, 1280, 614, 1641, 1264, 338,
/* 800 */ 1581, 1258, 412, 1782, 1752, 424, 211, 538, 1415, 1416,
/* 810 */ 1418, 1419, 1333, 1296, 1256, 131, 130, 611, 610, 609,
/* 820 */ 11, 10, 397, 1575, 425, 575, 399, 59, 1313, 529,
/* 830 */ 529, 1800, 529, 1471, 620, 1328, 1570, 662, 1573, 581,
/* 840 */ 404, 405, 26, 449, 1752, 509, 580, 1264, 33, 32,
/* 850 */ 1507, 1505, 40, 38, 36, 35, 34, 1598, 1598, 390,
/* 860 */ 1598, 33, 32, 1313, 2, 40, 38, 36, 35, 34,
/* 870 */ 562, 1813, 489, 492, 1752, 91, 1783, 583, 1785, 1786,
/* 880 */ 579, 28, 574, 607, 631, 1859, 662, 33, 32, 1858,
/* 890 */ 1855, 40, 38, 36, 35, 34, 1259, 1389, 1257, 423,
/* 900 */ 1335, 1336, 418, 417, 416, 415, 414, 411, 410, 409,
/* 680 */ 622, 621, 133, 617, 1527, 662, 1284, 1260, 1371, 1258,
/* 690 */ 33, 32, 1877, 1478, 40, 38, 36, 35, 34, 1337,
/* 700 */ 1338, 232, 29, 336, 1352, 1353, 1354, 1355, 1356, 1360,
/* 710 */ 1361, 1362, 7, 1477, 1263, 1264, 1872, 1313, 1314, 1316,
/* 720 */ 1317, 1318, 1319, 1320, 576, 572, 1328, 1329, 1331, 1332,
/* 730 */ 1333, 1334, 1336, 1339, 1754, 33, 32, 1882, 1391, 40,
/* 740 */ 38, 36, 35, 34, 1260, 561, 1258, 486, 485, 484,
/* 750 */ 44, 4, 1259, 483, 1754, 272, 118, 480, 1630, 608,
/* 760 */ 479, 478, 477, 1476, 619, 1257, 1419, 1695, 1409, 299,
/* 770 */ 612, 1263, 1264, 1643, 1313, 1314, 1316, 1317, 1318, 1319,
/* 780 */ 1320, 576, 572, 1328, 1329, 1331, 1332, 1333, 1334, 1336,
/* 790 */ 1339, 39, 37, 301, 613, 1282, 614, 1643, 1265, 338,
/* 800 */ 1583, 1259, 412, 1785, 1754, 424, 1268, 538, 1417, 1418,
/* 810 */ 1420, 1421, 1335, 1298, 1257, 131, 130, 611, 610, 609,
/* 820 */ 11, 10, 397, 529, 425, 211, 399, 631, 1315, 529,
/* 830 */ 529, 1803, 529, 1473, 404, 1330, 620, 662, 1572, 581,
/* 840 */ 405, 449, 26, 1597, 1754, 59, 580, 1265, 33, 32,
/* 850 */ 1509, 1600, 40, 38, 36, 35, 34, 1600, 1600, 390,
/* 860 */ 1600, 33, 32, 1315, 2, 40, 38, 36, 35, 34,
/* 870 */ 374, 1816, 489, 570, 1754, 91, 1786, 583, 1788, 1789,
/* 880 */ 579, 28, 574, 1457, 1458, 1862, 662, 33, 32, 1861,
/* 890 */ 1858, 40, 38, 36, 35, 34, 1260, 1391, 1258, 423,
/* 900 */ 1337, 1338, 418, 417, 416, 415, 414, 411, 410, 409,
/* 910 */ 408, 407, 403, 402, 401, 400, 394, 393, 392, 391,
/* 920 */ 614, 388, 387, 1262, 1263, 529, 1470, 374, 199, 141,
/* 930 */ 1555, 197, 564, 529, 278, 614, 1595, 52, 513, 131,
/* 940 */ 130, 611, 610, 609, 1727, 1259, 255, 1257, 276, 58,
/* 950 */ 41, 219, 57, 1598, 131, 130, 611, 610, 609, 1267,
/* 960 */ 1770, 1598, 502, 1469, 1782, 1455, 1456, 1752, 177, 429,
/* 970 */ 427, 1766, 1262, 1263, 1468, 1311, 1312, 1314, 1315, 1316,
/* 980 */ 1317, 1318, 576, 572, 1326, 1327, 1329, 1330, 1331, 1332,
/* 990 */ 1334, 1337, 1800, 1206, 223, 539, 61, 1762, 1768, 529,
/* 1000 */ 581, 468, 529, 1925, 1752, 1752, 139, 580, 1467, 574,
/* 1010 */ 510, 1266, 1466, 514, 529, 1752, 159, 1772, 201, 1465,
/* 1020 */ 1922, 200, 1464, 203, 1463, 527, 202, 1598, 570, 503,
/* 1030 */ 1598, 1801, 1813, 244, 88, 125, 90, 1783, 583, 1785,
/* 1040 */ 1786, 579, 1598, 574, 529, 1782, 1859, 529, 529, 1752,
/* 1050 */ 329, 1855, 1938, 1752, 205, 528, 1774, 204, 261, 345,
/* 1060 */ 1752, 1893, 552, 1752, 1046, 1752, 559, 128, 1501, 66,
/* 1070 */ 65, 383, 1598, 1800, 169, 1598, 1598, 347, 522, 85,
/* 1080 */ 377, 581, 129, 50, 335, 334, 1752, 1496, 580, 82,
/* 1090 */ 122, 236, 1270, 300, 1272, 1638, 367, 1047, 365, 361,
/* 1100 */ 357, 166, 352, 349, 249, 1333, 1889, 1265, 254, 553,
/* 1110 */ 229, 557, 257, 1813, 50, 3, 657, 90, 1783, 583,
/* 1120 */ 1785, 1786, 579, 1782, 574, 1106, 1414, 1859, 1328, 41,
/* 1130 */ 120, 329, 1855, 1938, 239, 565, 162, 41, 491, 259,
/* 1140 */ 1264, 80, 1916, 587, 1269, 250, 1867, 551, 53, 550,
/* 1150 */ 5, 1800, 1925, 501, 351, 1280, 354, 1363, 128, 581,
/* 1160 */ 1347, 358, 1222, 129, 1752, 159, 580, 207, 311, 1922,
/* 1170 */ 114, 128, 1319, 1075, 312, 406, 1782, 268, 1690, 569,
/* 1180 */ 271, 494, 171, 413, 421, 488, 1134, 420, 422, 1286,
/* 1190 */ 206, 1813, 426, 428, 430, 90, 1783, 583, 1785, 1786,
/* 1200 */ 579, 1138, 574, 431, 1800, 1859, 1145, 439, 1289, 329,
/* 1210 */ 1855, 1938, 581, 1143, 132, 442, 180, 1752, 56, 580,
/* 1220 */ 1878, 55, 443, 182, 1288, 1290, 445, 444, 1782, 185,
/* 1230 */ 447, 187, 1287, 557, 189, 451, 70, 448, 1273, 470,
/* 1240 */ 1268, 472, 192, 1588, 1813, 303, 196, 1732, 285, 1783,
/* 1250 */ 583, 1785, 1786, 579, 1584, 574, 1800, 93, 269, 198,
/* 1260 */ 134, 135, 504, 1586, 581, 1276, 1582, 136, 137, 1752,
/* 1270 */ 209, 580, 505, 212, 1925, 511, 572, 1326, 1327, 1329,
/* 1280 */ 1330, 1331, 1332, 515, 508, 557, 216, 161, 518, 537,
/* 1290 */ 227, 1922, 321, 1782, 126, 1731, 1813, 127, 1700, 520,
/* 1300 */ 285, 1783, 583, 1785, 1786, 579, 323, 574, 523, 1782,
/* 1310 */ 225, 524, 270, 525, 78, 1599, 1285, 1890, 533, 535,
/* 1320 */ 540, 1800, 234, 238, 1900, 536, 1925, 328, 6, 581,
/* 1330 */ 543, 549, 534, 532, 1752, 531, 580, 1800, 248, 159,
/* 1340 */ 1389, 121, 1284, 1922, 566, 578, 563, 48, 1899, 330,
/* 1350 */ 1752, 1875, 580, 1840, 585, 1881, 245, 243, 1642, 148,
/* 1360 */ 247, 1813, 273, 264, 1782, 91, 1783, 583, 1785, 1786,
/* 1370 */ 579, 246, 574, 1571, 658, 1859, 1782, 1813, 659, 568,
/* 1380 */ 1855, 293, 1783, 583, 1785, 1786, 579, 577, 574, 571,
/* 1390 */ 1831, 661, 1800, 51, 147, 275, 1746, 1921, 253, 286,
/* 1400 */ 581, 296, 295, 277, 1800, 1752, 560, 580, 256, 1941,
/* 1410 */ 567, 63, 581, 258, 1745, 1744, 64, 1752, 1743, 580,
/* 1420 */ 353, 1740, 355, 356, 1250, 1251, 167, 360, 1738, 362,
/* 1430 */ 363, 364, 1813, 1737, 366, 1736, 144, 1783, 583, 1785,
/* 1440 */ 1786, 579, 368, 574, 1813, 1735, 370, 1734, 91, 1783,
/* 1450 */ 583, 1785, 1786, 579, 1782, 574, 1717, 372, 1859, 375,
/* 1460 */ 168, 376, 1225, 1856, 1224, 1711, 1710, 381, 1782, 382,
/* 1470 */ 1709, 1708, 1194, 1683, 1682, 1681, 67, 1680, 1782, 1679,
/* 1480 */ 558, 1939, 1800, 1678, 1677, 1676, 395, 322, 396, 1675,
/* 1490 */ 581, 398, 1674, 1673, 1672, 1752, 1800, 580, 1671, 1670,
/* 1500 */ 1669, 530, 1668, 1667, 581, 1666, 1800, 1665, 1664, 1752,
/* 1510 */ 1663, 580, 1662, 1661, 581, 1660, 1659, 1658, 124, 1752,
/* 1520 */ 1657, 580, 1813, 1656, 1655, 1654, 294, 1783, 583, 1785,
/* 1530 */ 1786, 579, 1653, 574, 1652, 1782, 1813, 1651, 1527, 1526,
/* 1540 */ 294, 1783, 583, 1785, 1786, 579, 1813, 574, 1524, 1196,
/* 1550 */ 289, 1783, 583, 1785, 1786, 579, 1492, 574, 1491, 1782,
/* 1560 */ 175, 178, 176, 1800, 152, 115, 1009, 1008, 435, 179,
/* 1570 */ 116, 581, 1725, 1719, 437, 1707, 1752, 186, 580, 184,
/* 1580 */ 1706, 1692, 1577, 1523, 1521, 1782, 452, 1800, 548, 453,
/* 1590 */ 1519, 1517, 1039, 454, 456, 578, 457, 460, 1515, 458,
/* 1600 */ 1752, 1504, 580, 1813, 461, 462, 464, 144, 1783, 583,
/* 1610 */ 1785, 1786, 579, 1800, 574, 465, 466, 1503, 337, 1488,
/* 1620 */ 1579, 581, 1149, 1578, 1148, 195, 1752, 1813, 580, 49,
/* 1630 */ 1074, 293, 1783, 583, 1785, 1786, 579, 629, 574, 1782,
/* 1640 */ 1832, 1073, 1072, 631, 1071, 1068, 1067, 1066, 1065, 1513,
/* 1650 */ 317, 1508, 1940, 1813, 318, 665, 1506, 294, 1783, 583,
/* 1660 */ 1785, 1786, 579, 490, 574, 319, 493, 1800, 1487, 267,
/* 1670 */ 495, 1486, 339, 497, 1485, 581, 499, 92, 1724, 1232,
/* 1680 */ 1752, 1718, 580, 151, 506, 1705, 138, 1703, 655, 651,
/* 1690 */ 647, 643, 265, 1704, 54, 213, 507, 1702, 1701, 320,
/* 1700 */ 15, 1699, 512, 1691, 218, 226, 224, 1813, 41, 76,
/* 1710 */ 77, 294, 1783, 583, 1785, 1786, 579, 194, 574, 231,
/* 1720 */ 87, 521, 1782, 230, 82, 228, 16, 23, 242, 47,
/* 1730 */ 233, 146, 1429, 235, 1411, 237, 467, 463, 459, 455,
/* 1740 */ 193, 1413, 1242, 145, 240, 24, 1782, 1406, 241, 81,
/* 1750 */ 1800, 10, 1772, 25, 1441, 1386, 526, 251, 581, 45,
/* 1760 */ 46, 1385, 1771, 1752, 149, 580, 1446, 18, 72, 1435,
/* 1770 */ 1440, 191, 331, 1445, 1800, 1444, 332, 1274, 1348, 17,
/* 1780 */ 1816, 573, 581, 1304, 13, 19, 1323, 1752, 217, 580,
/* 1790 */ 1813, 150, 163, 1321, 279, 1783, 583, 1785, 1786, 579,
/* 1800 */ 31, 574, 1782, 586, 1112, 584, 1320, 12, 20, 1230,
/* 1810 */ 21, 210, 1135, 340, 1813, 588, 590, 582, 280, 1783,
/* 1820 */ 583, 1785, 1786, 579, 591, 574, 593, 596, 599, 1132,
/* 1830 */ 1800, 606, 594, 190, 183, 597, 188, 1129, 581, 1123,
/* 1840 */ 446, 1127, 1121, 1752, 1782, 580, 1144, 600, 83, 84,
/* 1850 */ 60, 262, 1140, 1126, 1782, 1062, 1037, 1125, 615, 181,
/* 1860 */ 618, 1124, 263, 1081, 1060, 1055, 1782, 1059, 1058, 1057,
/* 1870 */ 1813, 1056, 1800, 1054, 281, 1783, 583, 1785, 1786, 579,
/* 1880 */ 581, 574, 1800, 1053, 1078, 1752, 1076, 580, 1050, 1049,
/* 1890 */ 581, 1048, 1045, 1044, 1800, 1752, 1043, 580, 1042, 1520,
/* 1900 */ 640, 642, 581, 1518, 644, 646, 641, 1752, 1516, 580,
/* 1910 */ 648, 645, 1813, 650, 649, 1514, 288, 1783, 583, 1785,
/* 1920 */ 1786, 579, 1813, 574, 652, 653, 290, 1783, 583, 1785,
/* 1930 */ 1786, 579, 654, 574, 1813, 656, 999, 1484, 282, 1783,
/* 1940 */ 583, 1785, 1786, 579, 1502, 574, 266, 1782, 660, 1459,
/* 1950 */ 1260, 274, 663, 664, 1459, 1459, 1459, 1459, 1459, 1459,
/* 1960 */ 1459, 1459, 1459, 1459, 1459, 1459, 1782, 1459, 1459, 1459,
/* 1970 */ 1459, 1459, 1459, 1459, 1459, 1800, 1459, 1459, 1459, 1459,
/* 1980 */ 1459, 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752, 1459,
/* 1990 */ 580, 1459, 1459, 1459, 1800, 1459, 1459, 1459, 1459, 1459,
/* 2000 */ 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752, 1459, 580,
/* 2010 */ 1459, 1459, 1459, 1459, 1459, 1813, 1459, 1459, 1459, 291,
/* 2020 */ 1783, 583, 1785, 1786, 579, 1459, 574, 1782, 1459, 1459,
/* 2030 */ 1459, 1459, 1459, 1459, 1813, 1459, 1459, 1459, 283, 1783,
/* 2040 */ 583, 1785, 1786, 579, 1459, 574, 1782, 1459, 1459, 1459,
/* 2050 */ 1459, 1459, 1459, 1459, 1459, 1800, 1459, 1459, 1459, 1459,
/* 2060 */ 1459, 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752, 1459,
/* 2070 */ 580, 1459, 1459, 1459, 1800, 1459, 1459, 1459, 1459, 1459,
/* 2080 */ 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752, 1459, 580,
/* 2090 */ 1459, 1459, 1459, 1459, 1459, 1813, 1459, 1459, 1459, 292,
/* 2100 */ 1783, 583, 1785, 1786, 579, 1459, 574, 1459, 1459, 1459,
/* 2110 */ 1459, 1459, 1459, 1782, 1813, 1459, 1459, 1459, 284, 1783,
/* 2120 */ 583, 1785, 1786, 579, 1459, 574, 1459, 1459, 1459, 1782,
/* 2130 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1782,
/* 2140 */ 1459, 1800, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 581,
/* 2150 */ 1459, 1459, 1459, 1459, 1752, 1459, 580, 1800, 1459, 1459,
/* 2160 */ 1459, 1459, 1459, 1459, 1459, 581, 1459, 1800, 1459, 1459,
/* 2170 */ 1752, 1459, 580, 1459, 1459, 581, 1459, 1459, 1459, 1459,
/* 2180 */ 1752, 1813, 580, 1459, 1459, 297, 1783, 583, 1785, 1786,
/* 2190 */ 579, 1459, 574, 1782, 1459, 1459, 1459, 1813, 1459, 1459,
/* 2200 */ 1459, 298, 1783, 583, 1785, 1786, 579, 1813, 574, 1459,
/* 2210 */ 1459, 1794, 1783, 583, 1785, 1786, 579, 1459, 574, 1459,
/* 2220 */ 1459, 1800, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 581,
/* 2230 */ 1459, 1459, 1459, 1459, 1752, 1459, 580, 1459, 1459, 1459,
/* 2240 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1782, 1459, 1459,
/* 2250 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 2260 */ 1459, 1813, 1459, 1459, 1459, 1793, 1783, 583, 1785, 1786,
/* 2270 */ 579, 1459, 574, 1459, 1459, 1800, 1459, 1459, 1459, 1459,
/* 2280 */ 1459, 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752, 1459,
/* 2290 */ 580, 1459, 1459, 1459, 1459, 1459, 1459, 1782, 1459, 1459,
/* 2300 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 2310 */ 1459, 1459, 1459, 1459, 1782, 1813, 1459, 1459, 1459, 1792,
/* 2320 */ 1783, 583, 1785, 1786, 579, 1800, 574, 1459, 1459, 1459,
/* 2330 */ 1459, 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752, 1459,
/* 2340 */ 580, 1459, 1800, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 2350 */ 581, 1459, 1459, 1459, 1459, 1752, 1459, 580, 1459, 1459,
/* 2360 */ 1459, 1459, 1459, 1459, 1459, 1813, 1459, 1459, 1459, 309,
/* 2370 */ 1783, 583, 1785, 1786, 579, 1459, 574, 1782, 1459, 1459,
/* 2380 */ 1459, 1459, 1813, 1459, 1459, 1459, 308, 1783, 583, 1785,
/* 2390 */ 1786, 579, 1459, 574, 1459, 1459, 1459, 1459, 1782, 1459,
/* 2400 */ 1459, 1459, 1459, 1459, 1459, 1800, 1459, 1459, 1459, 1459,
/* 2410 */ 1459, 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752, 1459,
/* 2420 */ 580, 1459, 1459, 1459, 1459, 1459, 1800, 1459, 1459, 1459,
/* 2430 */ 1459, 1459, 1459, 1459, 581, 1459, 1459, 1459, 1459, 1752,
/* 2440 */ 1782, 580, 1459, 1459, 1459, 1813, 1459, 1459, 1459, 310,
/* 2450 */ 1783, 583, 1785, 1786, 579, 1459, 574, 1459, 1459, 1459,
/* 2460 */ 1459, 1459, 1459, 1459, 1459, 1459, 1813, 1459, 1800, 1459,
/* 2470 */ 307, 1783, 583, 1785, 1786, 579, 581, 574, 1459, 1459,
/* 2480 */ 1459, 1752, 1459, 580, 1459, 1459, 1459, 1459, 1459, 1459,
/* 2490 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 2500 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1813, 1459,
/* 2510 */ 1459, 1459, 287, 1783, 583, 1785, 1786, 579, 1459, 574,
/* 920 */ 575, 388, 387, 1263, 1264, 529, 564, 529, 1507, 141,
/* 930 */ 1472, 529, 199, 529, 278, 197, 1729, 201, 510, 1271,
/* 940 */ 200, 1047, 514, 194, 527, 1260, 562, 1258, 276, 58,
/* 950 */ 492, 203, 57, 1600, 202, 1600, 607, 146, 502, 1600,
/* 960 */ 509, 1600, 467, 463, 459, 455, 193, 1785, 177, 429,
/* 970 */ 427, 1754, 1263, 1264, 1048, 1313, 1314, 1316, 1317, 1318,
/* 980 */ 1319, 1320, 576, 572, 1328, 1329, 1331, 1332, 1333, 1334,
/* 990 */ 1336, 1339, 335, 334, 72, 1803, 61, 191, 529, 1928,
/* 1000 */ 529, 205, 1273, 581, 204, 1349, 139, 1475, 1754, 528,
/* 1010 */ 580, 261, 159, 1335, 1773, 1266, 1925, 52, 513, 529,
/* 1020 */ 255, 539, 85, 468, 1471, 1768, 1600, 1470, 1600, 1267,
/* 1030 */ 345, 1469, 82, 41, 88, 1816, 1330, 1577, 1468, 90,
/* 1040 */ 1786, 583, 1788, 1789, 579, 1785, 574, 1600, 1265, 1862,
/* 1050 */ 1467, 1764, 1770, 329, 1858, 1941, 1503, 503, 244, 190,
/* 1060 */ 183, 1575, 188, 574, 1896, 1754, 446, 1466, 1754, 66,
/* 1070 */ 65, 383, 1754, 1803, 169, 1465, 1207, 1804, 347, 1754,
/* 1080 */ 377, 581, 219, 125, 559, 181, 1754, 569, 580, 1775,
/* 1090 */ 1498, 1754, 1640, 300, 128, 129, 367, 50, 365, 361,
/* 1100 */ 357, 166, 352, 349, 657, 1892, 236, 50, 1754, 41,
/* 1110 */ 249, 553, 254, 1816, 257, 259, 1754, 90, 1786, 583,
/* 1120 */ 1788, 1789, 579, 1785, 574, 223, 522, 1862, 1777, 565,
/* 1130 */ 80, 329, 1858, 1941, 614, 3, 162, 229, 1107, 41,
/* 1140 */ 1416, 53, 1919, 5, 351, 1282, 1274, 354, 1269, 239,
/* 1150 */ 1365, 1803, 1321, 131, 130, 611, 610, 609, 614, 581,
/* 1160 */ 587, 128, 1270, 358, 1754, 1785, 580, 311, 1076, 129,
/* 1170 */ 114, 128, 312, 1277, 1279, 1223, 268, 131, 130, 611,
/* 1180 */ 610, 609, 271, 406, 572, 1328, 1329, 1331, 1332, 1333,
/* 1190 */ 1334, 1816, 1692, 1803, 171, 90, 1786, 583, 1788, 1789,
/* 1200 */ 579, 581, 574, 1135, 1139, 1862, 1754, 413, 580, 329,
/* 1210 */ 1858, 1941, 1146, 1144, 132, 421, 426, 420, 422, 428,
/* 1220 */ 1881, 430, 557, 1288, 431, 439, 1785, 180, 1291, 442,
/* 1230 */ 443, 182, 1290, 1816, 444, 1292, 1785, 285, 1786, 583,
/* 1240 */ 1788, 1789, 579, 445, 574, 491, 185, 447, 1289, 187,
/* 1250 */ 448, 189, 70, 451, 1803, 192, 470, 472, 1590, 196,
/* 1260 */ 501, 1586, 581, 1928, 1803, 303, 1734, 1754, 93, 580,
/* 1270 */ 198, 209, 581, 269, 207, 134, 161, 1754, 135, 580,
/* 1280 */ 1925, 1588, 504, 557, 1584, 136, 137, 508, 494, 505,
/* 1290 */ 212, 511, 488, 1785, 1816, 515, 216, 206, 285, 1786,
/* 1300 */ 583, 1788, 1789, 579, 1816, 574, 537, 1785, 91, 1786,
/* 1310 */ 583, 1788, 1789, 579, 126, 574, 518, 1733, 1862, 1702,
/* 1320 */ 321, 1803, 568, 1858, 1928, 56, 520, 523, 55, 578,
/* 1330 */ 323, 127, 524, 525, 1754, 1803, 580, 159, 225, 227,
/* 1340 */ 270, 1925, 1601, 581, 78, 1287, 533, 540, 1754, 535,
/* 1350 */ 580, 234, 1893, 1903, 536, 1902, 238, 1785, 328, 543,
/* 1360 */ 6, 1816, 1884, 549, 534, 293, 1786, 583, 1788, 1789,
/* 1370 */ 579, 577, 574, 571, 1834, 1816, 243, 1785, 148, 144,
/* 1380 */ 1786, 583, 1788, 1789, 579, 1803, 574, 532, 531, 248,
/* 1390 */ 1391, 245, 246, 581, 121, 247, 1286, 1878, 1754, 566,
/* 1400 */ 580, 563, 48, 330, 253, 1803, 1924, 1573, 1644, 273,
/* 1410 */ 322, 658, 585, 581, 560, 1944, 1843, 264, 1754, 661,
/* 1420 */ 580, 51, 659, 558, 1942, 1816, 147, 277, 256, 91,
/* 1430 */ 1786, 583, 1788, 1789, 579, 1748, 574, 286, 275, 1862,
/* 1440 */ 567, 258, 296, 1785, 1859, 1816, 63, 295, 1747, 294,
/* 1450 */ 1786, 583, 1788, 1789, 579, 1785, 574, 1746, 64, 1745,
/* 1460 */ 353, 1742, 355, 1251, 356, 1785, 1252, 167, 360, 1740,
/* 1470 */ 364, 1803, 362, 363, 1739, 366, 530, 1738, 368, 581,
/* 1480 */ 1737, 1736, 370, 1803, 1754, 1719, 580, 372, 168, 375,
/* 1490 */ 376, 581, 1226, 1803, 1225, 1713, 1754, 1712, 580, 381,
/* 1500 */ 382, 581, 1711, 1710, 1195, 1685, 1754, 1684, 580, 1683,
/* 1510 */ 67, 1816, 1682, 1681, 1680, 294, 1786, 583, 1788, 1789,
/* 1520 */ 579, 1785, 574, 1816, 1679, 1678, 396, 289, 1786, 583,
/* 1530 */ 1788, 1789, 579, 1816, 574, 1785, 395, 144, 1786, 583,
/* 1540 */ 1788, 1789, 579, 1677, 574, 398, 1676, 1675, 1674, 1803,
/* 1550 */ 124, 1662, 1661, 1660, 1659, 1658, 1657, 578, 1673, 1672,
/* 1560 */ 1671, 1670, 1754, 1803, 580, 548, 1669, 1668, 337, 1667,
/* 1570 */ 1666, 581, 1665, 1664, 1663, 1656, 1754, 1655, 580, 1197,
/* 1580 */ 1654, 1653, 1943, 1529, 175, 1528, 176, 1526, 1785, 1816,
/* 1590 */ 1494, 178, 1010, 293, 1786, 583, 1788, 1789, 579, 1493,
/* 1600 */ 574, 115, 1835, 1816, 179, 1009, 152, 294, 1786, 583,
/* 1610 */ 1788, 1789, 579, 665, 574, 453, 1803, 435, 116, 1727,
/* 1620 */ 1721, 339, 437, 1709, 581, 184, 1708, 267, 186, 1754,
/* 1630 */ 1785, 580, 1694, 1579, 1525, 1523, 452, 454, 1521, 456,
/* 1640 */ 457, 151, 1519, 460, 1785, 458, 655, 651, 647, 643,
/* 1650 */ 265, 1040, 461, 462, 1517, 466, 1816, 464, 1803, 465,
/* 1660 */ 294, 1786, 583, 1788, 1789, 579, 581, 574, 1506, 1505,
/* 1670 */ 1490, 1754, 1803, 580, 1581, 1150, 49, 1149, 87, 1580,
/* 1680 */ 581, 230, 1075, 1074, 195, 1754, 1073, 580, 1072, 629,
/* 1690 */ 1515, 1069, 631, 1068, 1067, 1066, 1510, 317, 1816, 318,
/* 1700 */ 1508, 490, 279, 1786, 583, 1788, 1789, 579, 1785, 574,
/* 1710 */ 319, 493, 1816, 1489, 526, 495, 280, 1786, 583, 1788,
/* 1720 */ 1789, 579, 1488, 574, 497, 1487, 499, 92, 1726, 1233,
/* 1730 */ 1785, 1720, 506, 1707, 1705, 1706, 1803, 54, 1704, 1703,
/* 1740 */ 1701, 1693, 226, 231, 581, 82, 217, 213, 507, 1754,
/* 1750 */ 1785, 580, 218, 320, 41, 16, 15, 512, 1803, 1431,
/* 1760 */ 138, 521, 228, 224, 47, 242, 581, 1231, 76, 210,
/* 1770 */ 77, 1754, 23, 580, 17, 241, 1816, 1243, 1803, 235,
/* 1780 */ 281, 1786, 583, 1788, 1789, 579, 581, 574, 1413, 1775,
/* 1790 */ 233, 1754, 1785, 580, 237, 25, 251, 145, 1816, 46,
/* 1800 */ 1415, 240, 288, 1786, 583, 1788, 1789, 579, 1785, 574,
/* 1810 */ 1408, 24, 81, 1774, 149, 1388, 1387, 18, 1816, 1443,
/* 1820 */ 1803, 1442, 290, 1786, 583, 1788, 1789, 579, 581, 574,
/* 1830 */ 45, 1448, 1437, 1754, 331, 580, 1803, 1447, 13, 1446,
/* 1840 */ 332, 10, 1275, 19, 581, 1819, 1306, 1325, 573, 1754,
/* 1850 */ 1323, 580, 1322, 150, 1350, 31, 12, 20, 163, 582,
/* 1860 */ 1816, 1785, 21, 586, 282, 1786, 583, 1788, 1789, 579,
/* 1870 */ 340, 574, 584, 1785, 1136, 588, 1816, 1133, 590, 591,
/* 1880 */ 291, 1786, 583, 1788, 1789, 579, 593, 574, 594, 1803,
/* 1890 */ 596, 599, 1130, 1113, 1124, 597, 600, 581, 1128, 1122,
/* 1900 */ 83, 1803, 1754, 84, 580, 1127, 1126, 1125, 1145, 581,
/* 1910 */ 262, 606, 60, 1141, 1754, 1785, 580, 1063, 1082, 1038,
/* 1920 */ 615, 618, 263, 1061, 1060, 1785, 1056, 1059, 1058, 1816,
/* 1930 */ 1057, 1055, 1054, 283, 1786, 583, 1788, 1789, 579, 1785,
/* 1940 */ 574, 1816, 1079, 1803, 1077, 292, 1786, 583, 1788, 1789,
/* 1950 */ 579, 581, 574, 1803, 1051, 1050, 1754, 1049, 580, 1046,
/* 1960 */ 1045, 581, 1044, 1043, 1522, 640, 1754, 1803, 580, 1520,
/* 1970 */ 641, 642, 644, 645, 646, 581, 1518, 648, 649, 1516,
/* 1980 */ 1754, 652, 580, 1816, 650, 653, 654, 284, 1786, 583,
/* 1990 */ 1788, 1789, 579, 1816, 574, 1785, 1504, 297, 1786, 583,
/* 2000 */ 1788, 1789, 579, 656, 574, 1785, 1000, 1816, 1486, 266,
/* 2010 */ 660, 298, 1786, 583, 1788, 1789, 579, 1785, 574, 1261,
/* 2020 */ 274, 663, 664, 1803, 1461, 1461, 1461, 1461, 1461, 1461,
/* 2030 */ 1461, 581, 1461, 1803, 1461, 1461, 1754, 1461, 580, 1461,
/* 2040 */ 1461, 581, 1461, 1461, 1461, 1803, 1754, 1461, 580, 1461,
/* 2050 */ 1461, 1461, 1461, 581, 1461, 1461, 1461, 1461, 1754, 1461,
/* 2060 */ 580, 1461, 1461, 1816, 1461, 1461, 1461, 1797, 1786, 583,
/* 2070 */ 1788, 1789, 579, 1816, 574, 1461, 1461, 1796, 1786, 583,
/* 2080 */ 1788, 1789, 579, 1785, 574, 1816, 1461, 1461, 1461, 1795,
/* 2090 */ 1786, 583, 1788, 1789, 579, 1785, 574, 1461, 1461, 1461,
/* 2100 */ 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
/* 2110 */ 1461, 1803, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 581,
/* 2120 */ 1461, 1461, 1461, 1803, 1754, 1461, 580, 1461, 1461, 1461,
/* 2130 */ 1461, 581, 1461, 1461, 1461, 1461, 1754, 1461, 580, 1461,
/* 2140 */ 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1785, 1461,
/* 2150 */ 1461, 1816, 1461, 1461, 1461, 309, 1786, 583, 1788, 1789,
/* 2160 */ 579, 1461, 574, 1816, 1461, 1461, 1461, 308, 1786, 583,
/* 2170 */ 1788, 1789, 579, 1461, 574, 1461, 1803, 1461, 1461, 1461,
/* 2180 */ 1461, 1461, 1461, 1461, 581, 1461, 1461, 1461, 1461, 1754,
/* 2190 */ 1461, 580, 1461, 1461, 1461, 1461, 1461, 1461, 1785, 1461,
/* 2200 */ 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1785, 1461,
/* 2210 */ 552, 1461, 1461, 1461, 1461, 1461, 1816, 1461, 1461, 1461,
/* 2220 */ 310, 1786, 583, 1788, 1789, 579, 1803, 574, 1461, 1461,
/* 2230 */ 1461, 1461, 1461, 1461, 581, 1461, 1803, 1461, 122, 1754,
/* 2240 */ 1461, 580, 1461, 1461, 581, 1461, 1461, 1461, 1461, 1754,
/* 2250 */ 1461, 580, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 557,
/* 2260 */ 1461, 1461, 1461, 1461, 1461, 1461, 1816, 1461, 1461, 1461,
/* 2270 */ 307, 1786, 583, 1788, 1789, 579, 1816, 574, 120, 1461,
/* 2280 */ 287, 1786, 583, 1788, 1789, 579, 1461, 574, 1461, 1461,
/* 2290 */ 1461, 1461, 1461, 250, 1870, 551, 1461, 550, 1461, 1461,
/* 2300 */ 1928, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
/* 2310 */ 1461, 1461, 1461, 159, 1461, 1461, 1461, 1925,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 266, 0, 262, 266, 264, 265, 262, 287, 264, 265,
......@@ -536,9 +516,9 @@ static const YYCODETYPE yy_lookahead[] = {
/* 610 */ 294, 33, 326, 35, 295, 293, 330, 331, 332, 333,
/* 620 */ 334, 335, 177, 337, 302, 180, 340, 299, 107, 266,
/* 630 */ 344, 345, 346, 153, 56, 68, 60, 148, 328, 334,
/* 640 */ 277, 259, 121, 122, 358, 14, 68, 311, 294, 313,
/* 640 */ 277, 275, 121, 122, 358, 14, 68, 311, 294, 313,
/* 650 */ 301, 20, 366, 68, 349, 350, 351, 294, 353, 305,
/* 660 */ 171, 312, 352, 85, 63, 64, 65, 66, 67, 43,
/* 660 */ 171, 312, 352, 85, 63, 64, 65, 66, 67, 287,
/* 670 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
/* 680 */ 79, 80, 81, 82, 0, 107, 20, 166, 86, 168,
/* 690 */ 8, 9, 328, 258, 12, 13, 14, 15, 16, 121,
......@@ -546,195 +526,175 @@ static const YYCODETYPE yy_lookahead[] = {
/* 710 */ 221, 222, 39, 258, 193, 194, 352, 196, 197, 198,
/* 720 */ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
/* 730 */ 209, 210, 211, 212, 299, 8, 9, 223, 224, 12,
/* 740 */ 13, 14, 15, 16, 166, 96, 168, 63, 64, 65,
/* 750 */ 42, 43, 22, 69, 299, 279, 72, 73, 282, 68,
/* 760 */ 76, 77, 78, 258, 287, 35, 193, 311, 86, 313,
/* 740 */ 13, 14, 15, 16, 166, 43, 168, 63, 64, 65,
/* 750 */ 42, 43, 22, 69, 299, 279, 72, 73, 282, 96,
/* 760 */ 76, 77, 78, 258, 68, 35, 193, 311, 86, 313,
/* 770 */ 296, 193, 194, 299, 196, 197, 198, 199, 200, 201,
/* 780 */ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
/* 790 */ 212, 12, 13, 18, 296, 20, 97, 299, 68, 20,
/* 800 */ 287, 22, 27, 258, 299, 30, 287, 234, 235, 236,
/* 800 */ 287, 22, 27, 258, 299, 30, 35, 234, 235, 236,
/* 810 */ 237, 238, 33, 86, 35, 116, 117, 118, 119, 120,
/* 820 */ 1, 2, 47, 0, 49, 287, 51, 3, 197, 266,
/* 830 */ 266, 286, 266, 258, 274, 56, 276, 107, 0, 294,
/* 840 */ 277, 277, 2, 277, 299, 319, 301, 68, 8, 9,
/* 850 */ 0, 0, 12, 13, 14, 15, 16, 294, 294, 84,
/* 820 */ 1, 2, 47, 266, 49, 287, 51, 43, 197, 266,
/* 830 */ 266, 286, 266, 258, 277, 56, 274, 107, 276, 294,
/* 840 */ 277, 277, 2, 277, 299, 3, 301, 68, 8, 9,
/* 850 */ 0, 294, 12, 13, 14, 15, 16, 294, 294, 84,
/* 860 */ 294, 8, 9, 197, 85, 12, 13, 14, 15, 16,
/* 870 */ 244, 326, 22, 22, 299, 330, 331, 332, 333, 334,
/* 880 */ 335, 2, 337, 287, 43, 340, 107, 8, 9, 344,
/* 870 */ 86, 326, 22, 61, 299, 330, 331, 332, 333, 334,
/* 880 */ 335, 2, 337, 121, 122, 340, 107, 8, 9, 344,
/* 890 */ 345, 12, 13, 14, 15, 16, 166, 224, 168, 124,
/* 900 */ 121, 122, 127, 128, 129, 130, 131, 132, 133, 134,
/* 910 */ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
/* 920 */ 97, 146, 147, 193, 194, 266, 258, 86, 89, 18,
/* 930 */ 275, 92, 43, 266, 23, 97, 277, 153, 154, 116,
/* 940 */ 117, 118, 119, 120, 277, 166, 376, 168, 37, 38,
/* 950 */ 43, 43, 41, 294, 116, 117, 118, 119, 120, 35,
/* 960 */ 288, 294, 315, 258, 258, 121, 122, 299, 57, 58,
/* 970 */ 59, 299, 193, 194, 258, 196, 197, 198, 199, 200,
/* 920 */ 287, 146, 147, 193, 194, 266, 43, 266, 0, 18,
/* 930 */ 258, 266, 89, 266, 23, 92, 277, 89, 277, 168,
/* 940 */ 92, 35, 277, 33, 277, 166, 244, 168, 37, 38,
/* 950 */ 22, 89, 41, 294, 92, 294, 287, 47, 315, 294,
/* 960 */ 319, 294, 52, 53, 54, 55, 56, 258, 57, 58,
/* 970 */ 59, 299, 193, 194, 68, 196, 197, 198, 199, 200,
/* 980 */ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
/* 990 */ 211, 212, 286, 86, 86, 367, 85, 325, 326, 266,
/* 1000 */ 294, 267, 266, 356, 299, 299, 153, 301, 258, 337,
/* 1010 */ 277, 35, 258, 277, 266, 299, 369, 46, 89, 258,
/* 1020 */ 373, 92, 258, 89, 258, 277, 92, 294, 61, 322,
/* 1030 */ 294, 286, 326, 363, 123, 43, 330, 331, 332, 333,
/* 1040 */ 334, 335, 294, 337, 266, 258, 340, 266, 266, 299,
/* 1050 */ 344, 345, 346, 299, 89, 277, 85, 92, 277, 277,
/* 1060 */ 299, 355, 266, 299, 35, 299, 242, 43, 0, 158,
/* 1070 */ 159, 160, 294, 286, 163, 294, 294, 267, 86, 85,
/* 1080 */ 169, 294, 43, 43, 12, 13, 299, 265, 301, 95,
/* 1090 */ 294, 43, 168, 182, 22, 298, 185, 68, 187, 188,
/* 1100 */ 189, 190, 191, 192, 347, 33, 329, 35, 370, 354,
/* 1110 */ 86, 315, 370, 326, 43, 357, 48, 330, 331, 332,
/* 1120 */ 333, 334, 335, 258, 337, 86, 86, 340, 56, 43,
/* 1130 */ 334, 344, 345, 346, 86, 246, 225, 43, 4, 370,
/* 1140 */ 68, 85, 355, 43, 168, 349, 350, 351, 290, 353,
/* 1150 */ 227, 286, 356, 19, 324, 20, 266, 86, 43, 294,
/* 1160 */ 193, 47, 164, 43, 299, 369, 301, 33, 323, 373,
/* 1170 */ 43, 43, 86, 35, 272, 266, 258, 317, 266, 107,
/* 1180 */ 86, 47, 42, 306, 148, 51, 86, 304, 304, 20,
/* 1190 */ 56, 326, 266, 266, 266, 330, 331, 332, 333, 334,
/* 1200 */ 335, 86, 337, 260, 286, 340, 86, 260, 20, 344,
/* 1210 */ 345, 346, 294, 86, 86, 321, 270, 299, 84, 301,
/* 1220 */ 355, 87, 301, 270, 20, 20, 316, 314, 258, 270,
/* 1230 */ 314, 270, 20, 315, 270, 266, 270, 307, 166, 260,
/* 1240 */ 168, 286, 270, 286, 326, 260, 286, 299, 330, 331,
/* 1250 */ 332, 333, 334, 335, 286, 337, 286, 266, 321, 286,
/* 1260 */ 286, 286, 174, 286, 294, 193, 286, 286, 286, 299,
/* 1270 */ 268, 301, 320, 268, 356, 266, 204, 205, 206, 207,
/* 1280 */ 208, 209, 210, 266, 301, 315, 268, 369, 299, 232,
/* 1290 */ 268, 373, 314, 258, 310, 299, 326, 310, 299, 299,
/* 1300 */ 330, 331, 332, 333, 334, 335, 299, 337, 150, 258,
/* 1310 */ 294, 308, 282, 307, 268, 294, 20, 329, 299, 299,
/* 1320 */ 233, 286, 310, 310, 362, 299, 356, 299, 239, 294,
/* 1330 */ 299, 157, 241, 240, 299, 228, 301, 286, 324, 369,
/* 1340 */ 224, 294, 20, 373, 245, 294, 243, 85, 362, 248,
/* 1350 */ 299, 328, 301, 343, 290, 365, 361, 364, 299, 362,
/* 1360 */ 359, 326, 266, 268, 258, 330, 331, 332, 333, 334,
/* 1370 */ 335, 360, 337, 276, 36, 340, 258, 326, 261, 344,
/* 1380 */ 345, 330, 331, 332, 333, 334, 335, 336, 337, 338,
/* 1390 */ 339, 260, 286, 318, 313, 269, 0, 372, 371, 280,
/* 1400 */ 294, 280, 280, 256, 286, 299, 372, 301, 371, 377,
/* 1410 */ 372, 176, 294, 371, 0, 0, 42, 299, 0, 301,
/* 1420 */ 76, 0, 35, 186, 35, 35, 35, 186, 0, 35,
/* 1430 */ 35, 186, 326, 0, 186, 0, 330, 331, 332, 333,
/* 1440 */ 334, 335, 35, 337, 326, 0, 22, 0, 330, 331,
/* 1450 */ 332, 333, 334, 335, 258, 337, 0, 35, 340, 171,
/* 1460 */ 85, 170, 168, 345, 166, 0, 0, 162, 258, 161,
/* 1470 */ 0, 0, 46, 0, 0, 0, 145, 0, 258, 0,
/* 1480 */ 374, 375, 286, 0, 0, 0, 140, 291, 35, 0,
/* 1490 */ 294, 140, 0, 0, 0, 299, 286, 301, 0, 0,
/* 1500 */ 0, 291, 0, 0, 294, 0, 286, 0, 0, 299,
/* 1510 */ 0, 301, 0, 0, 294, 0, 0, 0, 42, 299,
/* 1520 */ 0, 301, 326, 0, 0, 0, 330, 331, 332, 333,
/* 1530 */ 334, 335, 0, 337, 0, 258, 326, 0, 0, 0,
/* 1540 */ 330, 331, 332, 333, 334, 335, 326, 337, 0, 22,
/* 1550 */ 330, 331, 332, 333, 334, 335, 0, 337, 0, 258,
/* 1560 */ 56, 42, 56, 286, 43, 39, 14, 14, 46, 40,
/* 1570 */ 39, 294, 0, 0, 46, 0, 299, 157, 301, 39,
/* 1580 */ 0, 0, 0, 0, 0, 258, 35, 286, 368, 47,
/* 1590 */ 0, 0, 62, 39, 35, 294, 47, 35, 0, 39,
/* 1600 */ 299, 0, 301, 326, 47, 39, 35, 330, 331, 332,
/* 1610 */ 333, 334, 335, 286, 337, 47, 39, 0, 291, 0,
/* 1620 */ 0, 294, 35, 0, 22, 92, 299, 326, 301, 94,
/* 1630 */ 35, 330, 331, 332, 333, 334, 335, 43, 337, 258,
/* 1640 */ 339, 35, 35, 43, 35, 35, 35, 35, 35, 0,
/* 1650 */ 22, 0, 375, 326, 22, 19, 0, 330, 331, 332,
/* 1660 */ 333, 334, 335, 49, 337, 22, 35, 286, 0, 33,
/* 1670 */ 35, 0, 291, 35, 0, 294, 22, 20, 0, 35,
/* 1680 */ 299, 0, 301, 47, 22, 0, 172, 0, 52, 53,
/* 1690 */ 54, 55, 56, 0, 153, 150, 153, 0, 0, 153,
/* 1700 */ 85, 0, 155, 0, 86, 39, 85, 326, 43, 85,
/* 1710 */ 85, 330, 331, 332, 333, 334, 335, 33, 337, 46,
/* 1720 */ 84, 151, 258, 87, 95, 149, 229, 85, 46, 43,
/* 1730 */ 85, 47, 86, 86, 86, 85, 52, 53, 54, 55,
/* 1740 */ 56, 86, 181, 85, 85, 85, 258, 86, 43, 85,
/* 1750 */ 286, 2, 46, 43, 35, 86, 120, 46, 294, 223,
/* 1760 */ 43, 86, 46, 299, 46, 301, 86, 43, 84, 86,
/* 1770 */ 35, 87, 35, 35, 286, 35, 35, 22, 193, 229,
/* 1780 */ 85, 85, 294, 22, 229, 43, 86, 299, 152, 301,
/* 1790 */ 326, 46, 46, 86, 330, 331, 332, 333, 334, 335,
/* 1800 */ 85, 337, 258, 35, 22, 96, 86, 85, 85, 173,
/* 1810 */ 85, 175, 86, 35, 326, 85, 35, 195, 330, 331,
/* 1820 */ 332, 333, 334, 335, 85, 337, 35, 35, 35, 86,
/* 1830 */ 286, 97, 85, 149, 150, 85, 152, 86, 294, 86,
/* 1840 */ 156, 109, 86, 299, 258, 301, 35, 85, 85, 85,
/* 1850 */ 85, 43, 22, 109, 258, 35, 62, 109, 61, 175,
/* 1860 */ 83, 109, 43, 68, 35, 22, 258, 35, 35, 35,
/* 1870 */ 326, 35, 286, 35, 330, 331, 332, 333, 334, 335,
/* 1880 */ 294, 337, 286, 35, 68, 299, 35, 301, 35, 35,
/* 1890 */ 294, 35, 35, 35, 286, 299, 35, 301, 35, 0,
/* 1900 */ 35, 39, 294, 0, 35, 39, 47, 299, 0, 301,
/* 1910 */ 35, 47, 326, 39, 47, 0, 330, 331, 332, 333,
/* 1920 */ 334, 335, 326, 337, 35, 47, 330, 331, 332, 333,
/* 1930 */ 334, 335, 39, 337, 326, 35, 35, 0, 330, 331,
/* 1940 */ 332, 333, 334, 335, 0, 337, 22, 258, 21, 378,
/* 1950 */ 22, 22, 21, 20, 378, 378, 378, 378, 378, 378,
/* 1960 */ 378, 378, 378, 378, 378, 378, 258, 378, 378, 378,
/* 1970 */ 378, 378, 378, 378, 378, 286, 378, 378, 378, 378,
/* 1980 */ 378, 378, 378, 294, 378, 378, 378, 378, 299, 378,
/* 1990 */ 301, 378, 378, 378, 286, 378, 378, 378, 378, 378,
/* 2000 */ 378, 378, 294, 378, 378, 378, 378, 299, 378, 301,
/* 2010 */ 378, 378, 378, 378, 378, 326, 378, 378, 378, 330,
/* 2020 */ 331, 332, 333, 334, 335, 378, 337, 258, 378, 378,
/* 2030 */ 378, 378, 378, 378, 326, 378, 378, 378, 330, 331,
/* 2040 */ 332, 333, 334, 335, 378, 337, 258, 378, 378, 378,
/* 2050 */ 378, 378, 378, 378, 378, 286, 378, 378, 378, 378,
/* 2060 */ 378, 378, 378, 294, 378, 378, 378, 378, 299, 378,
/* 2070 */ 301, 378, 378, 378, 286, 378, 378, 378, 378, 378,
/* 2080 */ 378, 378, 294, 378, 378, 378, 378, 299, 378, 301,
/* 2090 */ 378, 378, 378, 378, 378, 326, 378, 378, 378, 330,
/* 2100 */ 331, 332, 333, 334, 335, 378, 337, 378, 378, 378,
/* 2110 */ 378, 378, 378, 258, 326, 378, 378, 378, 330, 331,
/* 2120 */ 332, 333, 334, 335, 378, 337, 378, 378, 378, 258,
/* 2130 */ 378, 378, 378, 378, 378, 378, 378, 378, 378, 258,
/* 2140 */ 378, 286, 378, 378, 378, 378, 378, 378, 378, 294,
/* 2150 */ 378, 378, 378, 378, 299, 378, 301, 286, 378, 378,
/* 2160 */ 378, 378, 378, 378, 378, 294, 378, 286, 378, 378,
/* 2170 */ 299, 378, 301, 378, 378, 294, 378, 378, 378, 378,
/* 2180 */ 299, 326, 301, 378, 378, 330, 331, 332, 333, 334,
/* 2190 */ 335, 378, 337, 258, 378, 378, 378, 326, 378, 378,
/* 2200 */ 378, 330, 331, 332, 333, 334, 335, 326, 337, 378,
/* 2210 */ 378, 330, 331, 332, 333, 334, 335, 378, 337, 378,
/* 2220 */ 378, 286, 378, 378, 378, 378, 378, 378, 378, 294,
/* 2230 */ 378, 378, 378, 378, 299, 378, 301, 378, 378, 378,
/* 2240 */ 378, 378, 378, 378, 378, 378, 378, 258, 378, 378,
/* 2250 */ 378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
/* 2260 */ 378, 326, 378, 378, 378, 330, 331, 332, 333, 334,
/* 2270 */ 335, 378, 337, 378, 378, 286, 378, 378, 378, 378,
/* 2280 */ 378, 378, 378, 294, 378, 378, 378, 378, 299, 378,
/* 2290 */ 301, 378, 378, 378, 378, 378, 378, 258, 378, 378,
/* 2300 */ 378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
/* 2310 */ 378, 378, 378, 378, 258, 326, 378, 378, 378, 330,
/* 2320 */ 331, 332, 333, 334, 335, 286, 337, 378, 378, 378,
/* 2330 */ 378, 378, 378, 294, 378, 378, 378, 378, 299, 378,
/* 2340 */ 301, 378, 286, 378, 378, 378, 378, 378, 378, 378,
/* 2350 */ 294, 378, 378, 378, 378, 299, 378, 301, 378, 378,
/* 2360 */ 378, 378, 378, 378, 378, 326, 378, 378, 378, 330,
/* 2370 */ 331, 332, 333, 334, 335, 378, 337, 258, 378, 378,
/* 2380 */ 378, 378, 326, 378, 378, 378, 330, 331, 332, 333,
/* 2390 */ 334, 335, 378, 337, 378, 378, 378, 378, 258, 378,
/* 2400 */ 378, 378, 378, 378, 378, 286, 378, 378, 378, 378,
/* 2410 */ 378, 378, 378, 294, 378, 378, 378, 378, 299, 378,
/* 2420 */ 301, 378, 378, 378, 378, 378, 286, 378, 378, 378,
/* 2430 */ 378, 378, 378, 378, 294, 378, 378, 378, 378, 299,
/* 2440 */ 258, 301, 378, 378, 378, 326, 378, 378, 378, 330,
/* 2450 */ 331, 332, 333, 334, 335, 378, 337, 378, 378, 378,
/* 2460 */ 378, 378, 378, 378, 378, 378, 326, 378, 286, 378,
/* 2470 */ 330, 331, 332, 333, 334, 335, 294, 337, 378, 378,
/* 2480 */ 378, 299, 378, 301, 378, 378, 378, 378, 378, 378,
/* 2490 */ 378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
/* 2500 */ 378, 378, 378, 378, 378, 378, 378, 378, 326, 378,
/* 2510 */ 378, 378, 330, 331, 332, 333, 334, 335, 378, 337,
/* 990 */ 211, 212, 12, 13, 84, 286, 85, 87, 266, 356,
/* 1000 */ 266, 89, 22, 294, 92, 193, 153, 259, 299, 277,
/* 1010 */ 301, 277, 369, 33, 288, 35, 373, 153, 154, 266,
/* 1020 */ 376, 367, 85, 267, 258, 299, 294, 258, 294, 35,
/* 1030 */ 277, 258, 95, 43, 123, 326, 56, 0, 258, 330,
/* 1040 */ 331, 332, 333, 334, 335, 258, 337, 294, 68, 340,
/* 1050 */ 258, 325, 326, 344, 345, 346, 0, 322, 363, 149,
/* 1060 */ 150, 0, 152, 337, 355, 299, 156, 258, 299, 158,
/* 1070 */ 159, 160, 299, 286, 163, 258, 86, 286, 267, 299,
/* 1080 */ 169, 294, 43, 43, 242, 175, 299, 107, 301, 46,
/* 1090 */ 265, 299, 298, 182, 43, 43, 185, 43, 187, 188,
/* 1100 */ 189, 190, 191, 192, 48, 329, 43, 43, 299, 43,
/* 1110 */ 347, 354, 370, 326, 370, 370, 299, 330, 331, 332,
/* 1120 */ 333, 334, 335, 258, 337, 86, 86, 340, 85, 246,
/* 1130 */ 85, 344, 345, 346, 97, 357, 225, 86, 86, 43,
/* 1140 */ 86, 290, 355, 227, 324, 20, 166, 266, 168, 86,
/* 1150 */ 86, 286, 86, 116, 117, 118, 119, 120, 97, 294,
/* 1160 */ 43, 43, 168, 47, 299, 258, 301, 323, 35, 43,
/* 1170 */ 43, 43, 272, 193, 194, 164, 317, 116, 117, 118,
/* 1180 */ 119, 120, 86, 266, 204, 205, 206, 207, 208, 209,
/* 1190 */ 210, 326, 266, 286, 42, 330, 331, 332, 333, 334,
/* 1200 */ 335, 294, 337, 86, 86, 340, 299, 306, 301, 344,
/* 1210 */ 345, 346, 86, 86, 86, 148, 266, 304, 304, 266,
/* 1220 */ 355, 266, 315, 20, 260, 260, 258, 270, 20, 321,
/* 1230 */ 301, 270, 20, 326, 314, 20, 258, 330, 331, 332,
/* 1240 */ 333, 334, 335, 316, 337, 4, 270, 314, 20, 270,
/* 1250 */ 307, 270, 270, 266, 286, 270, 260, 286, 286, 286,
/* 1260 */ 19, 286, 294, 356, 286, 260, 299, 299, 266, 301,
/* 1270 */ 286, 268, 294, 321, 33, 286, 369, 299, 286, 301,
/* 1280 */ 373, 286, 174, 315, 286, 286, 286, 301, 47, 320,
/* 1290 */ 268, 266, 51, 258, 326, 266, 268, 56, 330, 331,
/* 1300 */ 332, 333, 334, 335, 326, 337, 232, 258, 330, 331,
/* 1310 */ 332, 333, 334, 335, 310, 337, 299, 299, 340, 299,
/* 1320 */ 314, 286, 344, 345, 356, 84, 299, 150, 87, 294,
/* 1330 */ 299, 310, 308, 307, 299, 286, 301, 369, 294, 268,
/* 1340 */ 282, 373, 294, 294, 268, 20, 299, 233, 299, 299,
/* 1350 */ 301, 310, 329, 362, 299, 362, 310, 258, 299, 299,
/* 1360 */ 239, 326, 365, 157, 241, 330, 331, 332, 333, 334,
/* 1370 */ 335, 336, 337, 338, 339, 326, 364, 258, 362, 330,
/* 1380 */ 331, 332, 333, 334, 335, 286, 337, 240, 228, 324,
/* 1390 */ 224, 361, 360, 294, 294, 359, 20, 328, 299, 245,
/* 1400 */ 301, 243, 85, 248, 371, 286, 372, 276, 299, 266,
/* 1410 */ 291, 36, 290, 294, 372, 377, 343, 268, 299, 260,
/* 1420 */ 301, 318, 261, 374, 375, 326, 313, 256, 371, 330,
/* 1430 */ 331, 332, 333, 334, 335, 0, 337, 280, 269, 340,
/* 1440 */ 372, 371, 280, 258, 345, 326, 176, 280, 0, 330,
/* 1450 */ 331, 332, 333, 334, 335, 258, 337, 0, 42, 0,
/* 1460 */ 76, 0, 35, 35, 186, 258, 35, 35, 186, 0,
/* 1470 */ 186, 286, 35, 35, 0, 186, 291, 0, 35, 294,
/* 1480 */ 0, 0, 22, 286, 299, 0, 301, 35, 85, 171,
/* 1490 */ 170, 294, 168, 286, 166, 0, 299, 0, 301, 162,
/* 1500 */ 161, 294, 0, 0, 46, 0, 299, 0, 301, 0,
/* 1510 */ 145, 326, 0, 0, 0, 330, 331, 332, 333, 334,
/* 1520 */ 335, 258, 337, 326, 0, 0, 35, 330, 331, 332,
/* 1530 */ 333, 334, 335, 326, 337, 258, 140, 330, 331, 332,
/* 1540 */ 333, 334, 335, 0, 337, 140, 0, 0, 0, 286,
/* 1550 */ 42, 0, 0, 0, 0, 0, 0, 294, 0, 0,
/* 1560 */ 0, 0, 299, 286, 301, 368, 0, 0, 291, 0,
/* 1570 */ 0, 294, 0, 0, 0, 0, 299, 0, 301, 22,
/* 1580 */ 0, 0, 375, 0, 56, 0, 56, 0, 258, 326,
/* 1590 */ 0, 42, 14, 330, 331, 332, 333, 334, 335, 0,
/* 1600 */ 337, 39, 339, 326, 40, 14, 43, 330, 331, 332,
/* 1610 */ 333, 334, 335, 19, 337, 47, 286, 46, 39, 0,
/* 1620 */ 0, 291, 46, 0, 294, 39, 0, 33, 157, 299,
/* 1630 */ 258, 301, 0, 0, 0, 0, 35, 39, 0, 35,
/* 1640 */ 47, 47, 0, 35, 258, 39, 52, 53, 54, 55,
/* 1650 */ 56, 62, 47, 39, 0, 39, 326, 35, 286, 47,
/* 1660 */ 330, 331, 332, 333, 334, 335, 294, 337, 0, 0,
/* 1670 */ 0, 299, 286, 301, 0, 35, 94, 22, 84, 0,
/* 1680 */ 294, 87, 35, 35, 92, 299, 35, 301, 35, 43,
/* 1690 */ 0, 35, 43, 35, 35, 35, 0, 22, 326, 22,
/* 1700 */ 0, 49, 330, 331, 332, 333, 334, 335, 258, 337,
/* 1710 */ 22, 35, 326, 0, 120, 35, 330, 331, 332, 333,
/* 1720 */ 334, 335, 0, 337, 35, 0, 22, 20, 0, 35,
/* 1730 */ 258, 0, 22, 0, 0, 0, 286, 153, 0, 0,
/* 1740 */ 0, 0, 39, 46, 294, 95, 152, 150, 153, 299,
/* 1750 */ 258, 301, 86, 153, 43, 229, 85, 155, 286, 86,
/* 1760 */ 172, 151, 149, 85, 43, 46, 294, 173, 85, 175,
/* 1770 */ 85, 299, 85, 301, 229, 43, 326, 181, 286, 86,
/* 1780 */ 330, 331, 332, 333, 334, 335, 294, 337, 86, 46,
/* 1790 */ 85, 299, 258, 301, 85, 43, 46, 85, 326, 43,
/* 1800 */ 86, 85, 330, 331, 332, 333, 334, 335, 258, 337,
/* 1810 */ 86, 85, 85, 46, 46, 86, 86, 43, 326, 35,
/* 1820 */ 286, 35, 330, 331, 332, 333, 334, 335, 294, 337,
/* 1830 */ 223, 86, 86, 299, 35, 301, 286, 35, 229, 35,
/* 1840 */ 35, 2, 22, 43, 294, 85, 22, 86, 85, 299,
/* 1850 */ 86, 301, 86, 46, 193, 85, 85, 85, 46, 195,
/* 1860 */ 326, 258, 85, 35, 330, 331, 332, 333, 334, 335,
/* 1870 */ 35, 337, 96, 258, 86, 85, 326, 86, 35, 85,
/* 1880 */ 330, 331, 332, 333, 334, 335, 35, 337, 85, 286,
/* 1890 */ 35, 35, 86, 22, 86, 85, 85, 294, 109, 86,
/* 1900 */ 85, 286, 299, 85, 301, 109, 109, 109, 35, 294,
/* 1910 */ 43, 97, 85, 22, 299, 258, 301, 35, 68, 62,
/* 1920 */ 61, 83, 43, 35, 35, 258, 22, 35, 35, 326,
/* 1930 */ 35, 35, 35, 330, 331, 332, 333, 334, 335, 258,
/* 1940 */ 337, 326, 68, 286, 35, 330, 331, 332, 333, 334,
/* 1950 */ 335, 294, 337, 286, 35, 35, 299, 35, 301, 35,
/* 1960 */ 35, 294, 35, 35, 0, 35, 299, 286, 301, 0,
/* 1970 */ 47, 39, 35, 47, 39, 294, 0, 35, 47, 0,
/* 1980 */ 299, 35, 301, 326, 39, 47, 39, 330, 331, 332,
/* 1990 */ 333, 334, 335, 326, 337, 258, 0, 330, 331, 332,
/* 2000 */ 333, 334, 335, 35, 337, 258, 35, 326, 0, 22,
/* 2010 */ 21, 330, 331, 332, 333, 334, 335, 258, 337, 22,
/* 2020 */ 22, 21, 20, 286, 378, 378, 378, 378, 378, 378,
/* 2030 */ 378, 294, 378, 286, 378, 378, 299, 378, 301, 378,
/* 2040 */ 378, 294, 378, 378, 378, 286, 299, 378, 301, 378,
/* 2050 */ 378, 378, 378, 294, 378, 378, 378, 378, 299, 378,
/* 2060 */ 301, 378, 378, 326, 378, 378, 378, 330, 331, 332,
/* 2070 */ 333, 334, 335, 326, 337, 378, 378, 330, 331, 332,
/* 2080 */ 333, 334, 335, 258, 337, 326, 378, 378, 378, 330,
/* 2090 */ 331, 332, 333, 334, 335, 258, 337, 378, 378, 378,
/* 2100 */ 378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
/* 2110 */ 378, 286, 378, 378, 378, 378, 378, 378, 378, 294,
/* 2120 */ 378, 378, 378, 286, 299, 378, 301, 378, 378, 378,
/* 2130 */ 378, 294, 378, 378, 378, 378, 299, 378, 301, 378,
/* 2140 */ 378, 378, 378, 378, 378, 378, 378, 378, 258, 378,
/* 2150 */ 378, 326, 378, 378, 378, 330, 331, 332, 333, 334,
/* 2160 */ 335, 378, 337, 326, 378, 378, 378, 330, 331, 332,
/* 2170 */ 333, 334, 335, 378, 337, 378, 286, 378, 378, 378,
/* 2180 */ 378, 378, 378, 378, 294, 378, 378, 378, 378, 299,
/* 2190 */ 378, 301, 378, 378, 378, 378, 378, 378, 258, 378,
/* 2200 */ 378, 378, 378, 378, 378, 378, 378, 378, 258, 378,
/* 2210 */ 266, 378, 378, 378, 378, 378, 326, 378, 378, 378,
/* 2220 */ 330, 331, 332, 333, 334, 335, 286, 337, 378, 378,
/* 2230 */ 378, 378, 378, 378, 294, 378, 286, 378, 294, 299,
/* 2240 */ 378, 301, 378, 378, 294, 378, 378, 378, 378, 299,
/* 2250 */ 378, 301, 378, 378, 378, 378, 378, 378, 378, 315,
/* 2260 */ 378, 378, 378, 378, 378, 378, 326, 378, 378, 378,
/* 2270 */ 330, 331, 332, 333, 334, 335, 326, 337, 334, 378,
/* 2280 */ 330, 331, 332, 333, 334, 335, 378, 337, 378, 378,
/* 2290 */ 378, 378, 378, 349, 350, 351, 378, 353, 378, 378,
/* 2300 */ 356, 378, 378, 378, 378, 378, 378, 378, 378, 378,
/* 2310 */ 378, 378, 378, 369, 378, 378, 378, 373,
};
#define YY_SHIFT_COUNT (665)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (1944)
#define YY_SHIFT_MAX (2008)
static const unsigned short int yy_shift_ofst[] = {
/* 0 */ 911, 0, 0, 62, 62, 263, 263, 263, 320, 320,
/* 10 */ 263, 263, 521, 578, 779, 578, 578, 578, 578, 578,
/* 20 */ 578, 578, 578, 578, 578, 578, 578, 578, 578, 578,
/* 30 */ 578, 578, 578, 578, 578, 578, 578, 578, 578, 578,
/* 40 */ 578, 578, 209, 209, 35, 35, 35, 1072, 1072, 1072,
/* 50 */ 1072, 208, 350, 32, 32, 167, 167, 19, 19, 11,
/* 40 */ 578, 578, 209, 209, 35, 35, 35, 980, 980, 980,
/* 50 */ 980, 208, 350, 32, 32, 167, 167, 19, 19, 11,
/* 60 */ 38, 32, 32, 167, 167, 167, 167, 167, 167, 167,
/* 70 */ 167, 167, 182, 167, 167, 167, 230, 352, 167, 167,
/* 80 */ 352, 438, 167, 352, 352, 352, 167, 452, 775, 231,
......@@ -742,162 +702,162 @@ static const unsigned short int yy_shift_ofst[] = {
/* 100 */ 730, 730, 730, 730, 730, 730, 730, 730, 730, 730,
/* 110 */ 730, 730, 730, 418, 38, 522, 522, 383, 567, 576,
/* 120 */ 480, 480, 480, 567, 558, 230, 1, 1, 352, 352,
/* 130 */ 585, 585, 649, 691, 201, 201, 201, 201, 201, 201,
/* 140 */ 201, 1636, 125, 684, 119, 573, 69, 313, 343, 351,
/* 150 */ 631, 529, 494, 39, 548, 514, 673, 514, 708, 824,
/* 160 */ 824, 824, 250, 666, 1056, 923, 1135, 1114, 1138, 998,
/* 170 */ 1135, 1135, 1140, 1036, 1036, 1135, 1135, 1135, 1169, 1169,
/* 180 */ 1188, 182, 230, 182, 1204, 1205, 182, 1204, 182, 1212,
/* 190 */ 182, 182, 1135, 182, 1169, 352, 352, 352, 352, 352,
/* 200 */ 352, 352, 352, 352, 352, 352, 1135, 1169, 585, 1188,
/* 210 */ 452, 1088, 230, 452, 1135, 1135, 1204, 452, 1057, 585,
/* 220 */ 585, 585, 585, 1057, 585, 1158, 558, 1212, 452, 649,
/* 230 */ 452, 558, 1296, 585, 1087, 1057, 585, 585, 1087, 1057,
/* 240 */ 585, 585, 352, 1089, 1174, 1087, 1091, 1093, 1107, 923,
/* 250 */ 1116, 558, 1322, 1099, 1103, 1101, 1099, 1103, 1099, 1103,
/* 260 */ 1262, 1056, 585, 691, 1135, 452, 1338, 1169, 2520, 2520,
/* 270 */ 2520, 2520, 2520, 2520, 2520, 601, 1684, 386, 1134, 469,
/* 280 */ 551, 682, 840, 879, 853, 727, 823, 314, 314, 314,
/* 290 */ 314, 314, 314, 314, 314, 838, 699, 274, 274, 445,
/* 130 */ 585, 585, 663, 696, 201, 201, 201, 201, 201, 201,
/* 140 */ 201, 1594, 125, 684, 119, 573, 69, 313, 343, 351,
/* 150 */ 631, 529, 494, 39, 548, 514, 673, 514, 708, 842,
/* 160 */ 842, 842, 250, 666, 1045, 916, 1125, 1116, 1133, 1011,
/* 170 */ 1125, 1125, 1152, 1067, 1067, 1125, 1125, 1125, 1203, 1203,
/* 180 */ 1208, 182, 230, 182, 1212, 1215, 182, 1212, 182, 1228,
/* 190 */ 182, 182, 1125, 182, 1203, 352, 352, 352, 352, 352,
/* 200 */ 352, 352, 352, 352, 352, 352, 1125, 1203, 585, 1208,
/* 210 */ 452, 1108, 230, 452, 1125, 1125, 1212, 452, 1074, 585,
/* 220 */ 585, 585, 585, 1074, 585, 1177, 558, 1228, 452, 663,
/* 230 */ 452, 558, 1325, 585, 1114, 1074, 585, 585, 1114, 1074,
/* 240 */ 585, 585, 352, 1121, 1206, 1114, 1123, 1147, 1160, 916,
/* 250 */ 1166, 558, 1376, 1154, 1158, 1155, 1154, 1158, 1154, 1158,
/* 260 */ 1317, 1045, 585, 696, 1125, 452, 1375, 1203, 2318, 2318,
/* 270 */ 2318, 2318, 2318, 2318, 2318, 601, 910, 386, 1241, 469,
/* 280 */ 551, 682, 840, 879, 853, 727, 1037, 314, 314, 314,
/* 290 */ 314, 314, 314, 314, 314, 1061, 699, 274, 274, 445,
/* 300 */ 65, 108, 156, 44, 168, 602, 339, 200, 200, 200,
/* 310 */ 200, 297, 841, 839, 929, 934, 965, 57, 850, 851,
/* 320 */ 92, 784, 907, 908, 992, 1024, 1039, 1040, 1048, 819,
/* 330 */ 844, 626, 889, 1071, 924, 976, 967, 1086, 971, 1094,
/* 340 */ 1100, 1115, 1120, 1127, 1128, 994, 1029, 1068, 1396, 1235,
/* 350 */ 1414, 1415, 1374, 1418, 1344, 1421, 1387, 1237, 1389, 1390,
/* 360 */ 1391, 1241, 1428, 1394, 1395, 1245, 1433, 1248, 1435, 1407,
/* 370 */ 1445, 1424, 1447, 1422, 1456, 1375, 1288, 1291, 1294, 1298,
/* 380 */ 1465, 1466, 1305, 1308, 1470, 1471, 1426, 1473, 1474, 1475,
/* 390 */ 1331, 1477, 1479, 1483, 1484, 1485, 1346, 1453, 1489, 1351,
/* 400 */ 1492, 1493, 1494, 1498, 1499, 1500, 1502, 1503, 1505, 1507,
/* 410 */ 1508, 1510, 1512, 1513, 1476, 1515, 1516, 1517, 1520, 1523,
/* 420 */ 1524, 1527, 1525, 1532, 1534, 1537, 1538, 1504, 1539, 1506,
/* 430 */ 1548, 1556, 1519, 1526, 1521, 1552, 1522, 1553, 1528, 1558,
/* 440 */ 1529, 1531, 1572, 1573, 1575, 1540, 1420, 1580, 1581, 1582,
/* 450 */ 1530, 1583, 1584, 1551, 1542, 1554, 1590, 1559, 1549, 1560,
/* 460 */ 1591, 1562, 1557, 1566, 1598, 1571, 1568, 1577, 1601, 1617,
/* 470 */ 1619, 1620, 1535, 1533, 1587, 1602, 1623, 1595, 1606, 1607,
/* 480 */ 1609, 1594, 1600, 1610, 1611, 1612, 1613, 1649, 1628, 1651,
/* 490 */ 1632, 1614, 1656, 1643, 1631, 1668, 1635, 1671, 1638, 1674,
/* 500 */ 1654, 1657, 1678, 1541, 1644, 1681, 1514, 1662, 1543, 1545,
/* 510 */ 1685, 1687, 1546, 1547, 1693, 1697, 1698, 1615, 1618, 1561,
/* 520 */ 1701, 1621, 1570, 1624, 1703, 1666, 1576, 1625, 1629, 1673,
/* 530 */ 1665, 1497, 1642, 1646, 1645, 1647, 1648, 1650, 1686, 1655,
/* 540 */ 1658, 1659, 1660, 1661, 1705, 1682, 1706, 1664, 1710, 1550,
/* 550 */ 1669, 1675, 1711, 1536, 1717, 1716, 1718, 1680, 1724, 1555,
/* 560 */ 1683, 1719, 1735, 1737, 1738, 1740, 1741, 1683, 1749, 1755,
/* 570 */ 1585, 1742, 1695, 1700, 1696, 1707, 1715, 1720, 1745, 1722,
/* 580 */ 1723, 1746, 1761, 1622, 1725, 1709, 1726, 1768, 1778, 1730,
/* 590 */ 1743, 1781, 1739, 1751, 1791, 1747, 1753, 1792, 1750, 1756,
/* 600 */ 1793, 1762, 1732, 1744, 1748, 1752, 1782, 1734, 1763, 1764,
/* 610 */ 1811, 1765, 1808, 1808, 1830, 1794, 1797, 1820, 1795, 1777,
/* 620 */ 1819, 1829, 1832, 1833, 1834, 1836, 1843, 1838, 1848, 1816,
/* 630 */ 1594, 1851, 1600, 1853, 1854, 1856, 1857, 1858, 1861, 1863,
/* 640 */ 1899, 1865, 1859, 1862, 1903, 1869, 1864, 1866, 1908, 1875,
/* 650 */ 1867, 1874, 1915, 1889, 1878, 1893, 1944, 1900, 1901, 1937,
/* 660 */ 1924, 1927, 1928, 1929, 1931, 1933,
/* 310 */ 200, 297, 784, 843, 848, 862, 912, 57, 850, 928,
/* 320 */ 92, 864, 990, 1039, 1040, 1051, 1052, 1054, 1063, 819,
/* 330 */ 762, 702, 883, 1064, 771, 994, 812, 1066, 1043, 1096,
/* 340 */ 1117, 1118, 1126, 1127, 1128, 937, 906, 1056, 1435, 1270,
/* 350 */ 1448, 1457, 1416, 1459, 1384, 1461, 1427, 1278, 1428, 1431,
/* 360 */ 1432, 1282, 1469, 1437, 1438, 1284, 1474, 1289, 1477, 1443,
/* 370 */ 1480, 1460, 1481, 1452, 1485, 1403, 1318, 1320, 1324, 1328,
/* 380 */ 1495, 1497, 1337, 1339, 1502, 1503, 1458, 1505, 1507, 1509,
/* 390 */ 1365, 1512, 1513, 1514, 1524, 1525, 1396, 1491, 1543, 1405,
/* 400 */ 1546, 1547, 1548, 1558, 1559, 1560, 1561, 1566, 1567, 1569,
/* 410 */ 1570, 1572, 1573, 1574, 1508, 1551, 1552, 1553, 1554, 1555,
/* 420 */ 1556, 1557, 1575, 1577, 1580, 1581, 1583, 1528, 1585, 1530,
/* 430 */ 1587, 1590, 1549, 1562, 1563, 1578, 1571, 1591, 1576, 1599,
/* 440 */ 1564, 1579, 1619, 1620, 1623, 1586, 1471, 1626, 1632, 1633,
/* 450 */ 1589, 1634, 1635, 1601, 1568, 1598, 1638, 1604, 1593, 1606,
/* 460 */ 1642, 1608, 1605, 1614, 1654, 1622, 1612, 1616, 1668, 1669,
/* 470 */ 1670, 1674, 1582, 1592, 1640, 1655, 1679, 1647, 1648, 1651,
/* 480 */ 1653, 1646, 1649, 1656, 1658, 1659, 1660, 1690, 1675, 1696,
/* 490 */ 1677, 1652, 1700, 1688, 1676, 1713, 1680, 1722, 1689, 1725,
/* 500 */ 1704, 1707, 1728, 1584, 1694, 1731, 1588, 1710, 1595, 1597,
/* 510 */ 1733, 1734, 1600, 1602, 1735, 1738, 1739, 1671, 1666, 1596,
/* 520 */ 1740, 1678, 1610, 1683, 1741, 1703, 1613, 1685, 1650, 1697,
/* 530 */ 1711, 1526, 1687, 1673, 1705, 1693, 1702, 1709, 1721, 1714,
/* 540 */ 1712, 1716, 1726, 1724, 1732, 1719, 1743, 1727, 1752, 1545,
/* 550 */ 1729, 1730, 1750, 1607, 1756, 1767, 1768, 1745, 1774, 1609,
/* 560 */ 1746, 1784, 1786, 1799, 1802, 1804, 1805, 1746, 1839, 1820,
/* 570 */ 1661, 1800, 1760, 1761, 1763, 1764, 1770, 1766, 1807, 1771,
/* 580 */ 1772, 1812, 1824, 1664, 1777, 1776, 1788, 1828, 1835, 1790,
/* 590 */ 1791, 1843, 1794, 1806, 1851, 1803, 1808, 1855, 1810, 1813,
/* 600 */ 1856, 1811, 1789, 1796, 1797, 1798, 1871, 1814, 1815, 1818,
/* 610 */ 1873, 1827, 1867, 1867, 1891, 1857, 1859, 1882, 1850, 1838,
/* 620 */ 1879, 1888, 1889, 1892, 1893, 1895, 1904, 1896, 1897, 1874,
/* 630 */ 1646, 1909, 1649, 1919, 1920, 1922, 1924, 1925, 1927, 1928,
/* 640 */ 1964, 1930, 1923, 1932, 1969, 1937, 1926, 1935, 1976, 1942,
/* 650 */ 1931, 1945, 1979, 1946, 1938, 1947, 1996, 1968, 1971, 2008,
/* 660 */ 1987, 1989, 1997, 1998, 2000, 2002,
};
#define YY_REDUCE_COUNT (274)
#define YY_REDUCE_MIN (-312)
#define YY_REDUCE_MAX (2182)
#define YY_REDUCE_MAX (1950)
static const short yy_reduce_ofst[] = {
/* 0 */ -78, -232, 63, 286, -113, 706, 787, 865, 918, 970,
/* 10 */ 545, 1035, 1051, 1106, 1118, 1196, 1210, 1220, 1277, 1301,
/* 20 */ 1327, 1381, 1464, 1488, 1544, 1586, 1596, 1608, 1689, 1708,
/* 30 */ 1769, 1788, 1855, 1871, 1881, 1935, 1989, 2039, 2056, 2119,
/* 40 */ 2140, 2182, -263, 796, -14, 75, 305, -278, 55, 270,
/* 50 */ 672, -296, 123, 184, 647, -266, -43, -260, -256, -303,
/* 60 */ -186, -230, -191, -185, 97, 315, 316, 363, 563, 564,
/* 70 */ 566, 659, -154, 667, 733, 736, -285, -106, 748, 778,
/* 80 */ 59, 24, 781, 72, 322, 82, 782, 70, -252, -312,
/* 0 */ -78, -232, 63, 286, -113, 709, 787, 865, 907, 968,
/* 10 */ 545, 978, 1035, 1049, 1099, 1119, 1185, 1197, 1207, 1263,
/* 20 */ 1277, 1330, 1372, 1386, 1450, 1472, 1492, 1534, 1550, 1603,
/* 30 */ 1615, 1657, 1667, 1681, 1737, 1747, 1759, 1825, 1837, 1890,
/* 40 */ 1940, 1950, -263, 1944, -14, 75, 305, -278, 55, 270,
/* 50 */ 726, -296, 123, 184, 643, -266, -43, -260, -256, -303,
/* 60 */ -186, -230, -191, -185, 97, 315, 316, 363, 557, 563,
/* 70 */ 564, 566, -154, 659, 661, 665, -285, -106, 667, 732,
/* 80 */ 59, 24, 734, 72, 322, 82, 753, 70, -252, -312,
/* 90 */ -312, -312, -117, -239, -114, -20, 141, 181, 196, 289,
/* 100 */ 328, 435, 455, 505, 575, 668, 705, 716, 750, 754,
/* 110 */ 761, 764, 766, 299, -110, 124, 138, -220, 148, -243,
/* 100 */ 328, 435, 455, 505, 575, 672, 766, 769, 773, 780,
/* 110 */ 792, 809, 817, 299, -110, 124, 138, -220, 148, -243,
/* 120 */ 218, 310, 364, 150, 354, 349, 336, 456, 319, 205,
/* 130 */ 474, 498, 476, 560, -280, -270, 477, 513, 519, 538,
/* 140 */ 596, 526, 382, 655, 570, 628, 734, 707, 670, 745,
/* 150 */ 745, 810, 822, 797, 777, 755, 755, 755, 757, 738,
/* 160 */ 742, 769, 758, 745, 858, 830, 890, 845, 902, 860,
/* 170 */ 909, 912, 877, 883, 884, 926, 927, 928, 943, 947,
/* 180 */ 894, 946, 921, 953, 913, 910, 959, 916, 961, 930,
/* 190 */ 964, 966, 969, 972, 979, 955, 957, 960, 968, 973,
/* 200 */ 974, 975, 977, 980, 981, 982, 991, 985, 948, 937,
/* 210 */ 1002, 952, 983, 1005, 1009, 1017, 978, 1018, 984, 989,
/* 220 */ 996, 999, 1000, 987, 1007, 1003, 1016, 1006, 1022, 1030,
/* 230 */ 1046, 1021, 988, 1019, 962, 1012, 1020, 1026, 986, 1013,
/* 240 */ 1028, 1031, 745, 990, 993, 997, 995, 1011, 1001, 1014,
/* 250 */ 755, 1047, 1023, 1025, 1027, 1032, 1034, 1037, 1038, 1042,
/* 260 */ 1010, 1064, 1059, 1097, 1096, 1095, 1117, 1131, 1075, 1081,
/* 270 */ 1119, 1121, 1122, 1126, 1147,
/* 130 */ 474, 498, 476, 562, -280, -270, 382, 513, 538, 633,
/* 140 */ 669, 641, 748, 366, 644, 654, 756, 735, 695, 791,
/* 150 */ 791, 811, 825, 794, 776, 757, 757, 757, 763, 742,
/* 160 */ 744, 745, 778, 791, 851, 820, 881, 844, 900, 859,
/* 170 */ 917, 926, 901, 913, 914, 950, 953, 955, 964, 965,
/* 180 */ 908, 957, 929, 961, 920, 927, 976, 933, 979, 943,
/* 190 */ 981, 982, 987, 985, 996, 971, 972, 973, 975, 984,
/* 200 */ 989, 992, 995, 998, 999, 1000, 1002, 1005, 967, 952,
/* 210 */ 1003, 969, 986, 1022, 1025, 1029, 1006, 1028, 1004, 1017,
/* 220 */ 1018, 1020, 1027, 1021, 1031, 1024, 1044, 1026, 1071, 1058,
/* 230 */ 1076, 1048, 1023, 1047, 991, 1041, 1050, 1055, 993, 1046,
/* 240 */ 1059, 1060, 791, 997, 1012, 1016, 1030, 1032, 1036, 1065,
/* 250 */ 757, 1100, 1069, 1034, 1033, 1038, 1042, 1057, 1068, 1070,
/* 260 */ 1073, 1122, 1109, 1131, 1143, 1149, 1161, 1159, 1103, 1113,
/* 270 */ 1157, 1162, 1167, 1169, 1171,
};
static const YYACTIONTYPE yy_default[] = {
/* 0 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 10 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 20 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 30 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 40 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 50 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 60 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 70 */ 1457, 1457, 1531, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 80 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1529, 1684, 1457,
/* 90 */ 1861, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 100 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 110 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1531, 1457, 1529,
/* 120 */ 1873, 1873, 1873, 1457, 1457, 1457, 1728, 1728, 1457, 1457,
/* 130 */ 1457, 1457, 1627, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 140 */ 1457, 1720, 1457, 1457, 1942, 1457, 1457, 1726, 1896, 1457,
/* 150 */ 1457, 1457, 1457, 1580, 1888, 1865, 1879, 1866, 1863, 1927,
/* 160 */ 1927, 1927, 1882, 1457, 1596, 1892, 1457, 1457, 1457, 1712,
/* 170 */ 1457, 1457, 1689, 1686, 1686, 1457, 1457, 1457, 1457, 1457,
/* 180 */ 1457, 1531, 1457, 1531, 1457, 1457, 1531, 1457, 1531, 1457,
/* 190 */ 1531, 1531, 1457, 1531, 1457, 1457, 1457, 1457, 1457, 1457,
/* 200 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 210 */ 1529, 1722, 1457, 1529, 1457, 1457, 1457, 1529, 1901, 1457,
/* 220 */ 1457, 1457, 1457, 1901, 1457, 1457, 1457, 1457, 1529, 1457,
/* 230 */ 1529, 1457, 1457, 1457, 1903, 1901, 1457, 1457, 1903, 1901,
/* 240 */ 1457, 1457, 1457, 1915, 1911, 1903, 1919, 1917, 1894, 1892,
/* 250 */ 1879, 1457, 1457, 1933, 1929, 1945, 1933, 1929, 1933, 1929,
/* 260 */ 1457, 1596, 1457, 1457, 1457, 1529, 1489, 1457, 1714, 1728,
/* 270 */ 1630, 1630, 1630, 1532, 1462, 1457, 1457, 1457, 1457, 1457,
/* 280 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1799, 1914, 1913,
/* 290 */ 1837, 1836, 1835, 1833, 1798, 1457, 1592, 1797, 1796, 1457,
/* 300 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1790, 1791, 1789,
/* 310 */ 1788, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 320 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1862,
/* 330 */ 1457, 1930, 1934, 1457, 1457, 1457, 1457, 1457, 1773, 1457,
/* 340 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 350 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 360 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 370 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 380 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 390 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 400 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 410 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 420 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 430 */ 1457, 1457, 1457, 1457, 1494, 1457, 1457, 1457, 1457, 1457,
/* 440 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 450 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 460 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 470 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 480 */ 1457, 1561, 1560, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 490 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 500 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 510 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 520 */ 1732, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 530 */ 1895, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 540 */ 1457, 1457, 1457, 1457, 1457, 1457, 1773, 1457, 1912, 1457,
/* 550 */ 1872, 1868, 1457, 1457, 1864, 1772, 1457, 1457, 1928, 1457,
/* 560 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1857, 1457,
/* 570 */ 1457, 1830, 1815, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 580 */ 1457, 1457, 1457, 1784, 1457, 1457, 1457, 1457, 1457, 1624,
/* 590 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 600 */ 1457, 1457, 1609, 1607, 1606, 1605, 1457, 1602, 1457, 1457,
/* 610 */ 1457, 1457, 1633, 1632, 1457, 1457, 1457, 1457, 1457, 1457,
/* 620 */ 1552, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 630 */ 1543, 1457, 1542, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 640 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 650 */ 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
/* 660 */ 1457, 1457, 1457, 1457, 1457, 1457,
/* 0 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 10 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 20 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 30 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 40 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 50 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 60 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 70 */ 1459, 1459, 1533, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 80 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1531, 1686, 1459,
/* 90 */ 1864, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 100 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 110 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1533, 1459, 1531,
/* 120 */ 1876, 1876, 1876, 1459, 1459, 1459, 1730, 1730, 1459, 1459,
/* 130 */ 1459, 1459, 1629, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 140 */ 1459, 1722, 1459, 1459, 1945, 1459, 1459, 1728, 1899, 1459,
/* 150 */ 1459, 1459, 1459, 1582, 1891, 1868, 1882, 1869, 1866, 1930,
/* 160 */ 1930, 1930, 1885, 1459, 1598, 1895, 1459, 1459, 1459, 1714,
/* 170 */ 1459, 1459, 1691, 1688, 1688, 1459, 1459, 1459, 1459, 1459,
/* 180 */ 1459, 1533, 1459, 1533, 1459, 1459, 1533, 1459, 1533, 1459,
/* 190 */ 1533, 1533, 1459, 1533, 1459, 1459, 1459, 1459, 1459, 1459,
/* 200 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 210 */ 1531, 1724, 1459, 1531, 1459, 1459, 1459, 1531, 1904, 1459,
/* 220 */ 1459, 1459, 1459, 1904, 1459, 1459, 1459, 1459, 1531, 1459,
/* 230 */ 1531, 1459, 1459, 1459, 1906, 1904, 1459, 1459, 1906, 1904,
/* 240 */ 1459, 1459, 1459, 1918, 1914, 1906, 1922, 1920, 1897, 1895,
/* 250 */ 1882, 1459, 1459, 1936, 1932, 1948, 1936, 1932, 1936, 1932,
/* 260 */ 1459, 1598, 1459, 1459, 1459, 1531, 1491, 1459, 1716, 1730,
/* 270 */ 1632, 1632, 1632, 1534, 1464, 1459, 1459, 1459, 1459, 1459,
/* 280 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1802, 1917, 1916,
/* 290 */ 1840, 1839, 1838, 1836, 1801, 1459, 1594, 1800, 1799, 1459,
/* 300 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1793, 1794, 1792,
/* 310 */ 1791, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 320 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1865,
/* 330 */ 1459, 1933, 1937, 1459, 1459, 1459, 1459, 1459, 1776, 1459,
/* 340 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 350 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 360 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 370 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 380 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 390 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 400 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 410 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 420 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 430 */ 1459, 1459, 1459, 1459, 1496, 1459, 1459, 1459, 1459, 1459,
/* 440 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 450 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 460 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 470 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 480 */ 1459, 1563, 1562, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 490 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 500 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 510 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 520 */ 1734, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 530 */ 1898, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 540 */ 1459, 1459, 1459, 1459, 1459, 1459, 1776, 1459, 1915, 1459,
/* 550 */ 1875, 1871, 1459, 1459, 1867, 1775, 1459, 1459, 1931, 1459,
/* 560 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1860, 1459,
/* 570 */ 1459, 1833, 1818, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 580 */ 1459, 1459, 1459, 1787, 1459, 1459, 1459, 1459, 1459, 1626,
/* 590 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 600 */ 1459, 1459, 1611, 1609, 1608, 1607, 1459, 1604, 1459, 1459,
/* 610 */ 1459, 1459, 1635, 1634, 1459, 1459, 1459, 1459, 1459, 1459,
/* 620 */ 1554, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 630 */ 1545, 1459, 1544, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 640 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 650 */ 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
/* 660 */ 1459, 1459, 1459, 1459, 1459, 1459,
};
/********** End of lemon-generated parsing tables *****************************/
......@@ -1953,185 +1913,186 @@ static const char *const yyRuleName[] = {
/* 306 */ "signed_literal ::= duration_literal",
/* 307 */ "signed_literal ::= NULL",
/* 308 */ "signed_literal ::= literal_func",
/* 309 */ "literal_list ::= signed_literal",
/* 310 */ "literal_list ::= literal_list NK_COMMA signed_literal",
/* 311 */ "db_name ::= NK_ID",
/* 312 */ "table_name ::= NK_ID",
/* 313 */ "column_name ::= NK_ID",
/* 314 */ "function_name ::= NK_ID",
/* 315 */ "table_alias ::= NK_ID",
/* 316 */ "column_alias ::= NK_ID",
/* 317 */ "user_name ::= NK_ID",
/* 318 */ "index_name ::= NK_ID",
/* 319 */ "topic_name ::= NK_ID",
/* 320 */ "stream_name ::= NK_ID",
/* 321 */ "cgroup_name ::= NK_ID",
/* 322 */ "expression ::= literal",
/* 323 */ "expression ::= pseudo_column",
/* 324 */ "expression ::= column_reference",
/* 325 */ "expression ::= function_expression",
/* 326 */ "expression ::= subquery",
/* 327 */ "expression ::= NK_LP expression NK_RP",
/* 328 */ "expression ::= NK_PLUS expression",
/* 329 */ "expression ::= NK_MINUS expression",
/* 330 */ "expression ::= expression NK_PLUS expression",
/* 331 */ "expression ::= expression NK_MINUS expression",
/* 332 */ "expression ::= expression NK_STAR expression",
/* 333 */ "expression ::= expression NK_SLASH expression",
/* 334 */ "expression ::= expression NK_REM expression",
/* 335 */ "expression ::= column_reference NK_ARROW NK_STRING",
/* 336 */ "expression ::= expression NK_BITAND expression",
/* 337 */ "expression ::= expression NK_BITOR expression",
/* 338 */ "expression_list ::= expression",
/* 339 */ "expression_list ::= expression_list NK_COMMA expression",
/* 340 */ "column_reference ::= column_name",
/* 341 */ "column_reference ::= table_name NK_DOT column_name",
/* 342 */ "pseudo_column ::= ROWTS",
/* 343 */ "pseudo_column ::= TBNAME",
/* 344 */ "pseudo_column ::= table_name NK_DOT TBNAME",
/* 345 */ "pseudo_column ::= QSTARTTS",
/* 346 */ "pseudo_column ::= QENDTS",
/* 347 */ "pseudo_column ::= WSTARTTS",
/* 348 */ "pseudo_column ::= WENDTS",
/* 349 */ "pseudo_column ::= WDURATION",
/* 350 */ "function_expression ::= function_name NK_LP expression_list NK_RP",
/* 351 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP",
/* 352 */ "function_expression ::= CAST NK_LP expression AS type_name NK_RP",
/* 353 */ "function_expression ::= literal_func",
/* 354 */ "literal_func ::= noarg_func NK_LP NK_RP",
/* 355 */ "literal_func ::= NOW",
/* 356 */ "noarg_func ::= NOW",
/* 357 */ "noarg_func ::= TODAY",
/* 358 */ "noarg_func ::= TIMEZONE",
/* 359 */ "noarg_func ::= DATABASE",
/* 360 */ "noarg_func ::= CLIENT_VERSION",
/* 361 */ "noarg_func ::= SERVER_VERSION",
/* 362 */ "noarg_func ::= SERVER_STATUS",
/* 363 */ "noarg_func ::= CURRENT_USER",
/* 364 */ "noarg_func ::= USER",
/* 365 */ "star_func ::= COUNT",
/* 366 */ "star_func ::= FIRST",
/* 367 */ "star_func ::= LAST",
/* 368 */ "star_func ::= LAST_ROW",
/* 369 */ "star_func_para_list ::= NK_STAR",
/* 370 */ "star_func_para_list ::= other_para_list",
/* 371 */ "other_para_list ::= star_func_para",
/* 372 */ "other_para_list ::= other_para_list NK_COMMA star_func_para",
/* 373 */ "star_func_para ::= expression",
/* 374 */ "star_func_para ::= table_name NK_DOT NK_STAR",
/* 375 */ "predicate ::= expression compare_op expression",
/* 376 */ "predicate ::= expression BETWEEN expression AND expression",
/* 377 */ "predicate ::= expression NOT BETWEEN expression AND expression",
/* 378 */ "predicate ::= expression IS NULL",
/* 379 */ "predicate ::= expression IS NOT NULL",
/* 380 */ "predicate ::= expression in_op in_predicate_value",
/* 381 */ "compare_op ::= NK_LT",
/* 382 */ "compare_op ::= NK_GT",
/* 383 */ "compare_op ::= NK_LE",
/* 384 */ "compare_op ::= NK_GE",
/* 385 */ "compare_op ::= NK_NE",
/* 386 */ "compare_op ::= NK_EQ",
/* 387 */ "compare_op ::= LIKE",
/* 388 */ "compare_op ::= NOT LIKE",
/* 389 */ "compare_op ::= MATCH",
/* 390 */ "compare_op ::= NMATCH",
/* 391 */ "compare_op ::= CONTAINS",
/* 392 */ "in_op ::= IN",
/* 393 */ "in_op ::= NOT IN",
/* 394 */ "in_predicate_value ::= NK_LP literal_list NK_RP",
/* 395 */ "boolean_value_expression ::= boolean_primary",
/* 396 */ "boolean_value_expression ::= NOT boolean_primary",
/* 397 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression",
/* 398 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression",
/* 399 */ "boolean_primary ::= predicate",
/* 400 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP",
/* 401 */ "common_expression ::= expression",
/* 402 */ "common_expression ::= boolean_value_expression",
/* 403 */ "from_clause_opt ::=",
/* 404 */ "from_clause_opt ::= FROM table_reference_list",
/* 405 */ "table_reference_list ::= table_reference",
/* 406 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference",
/* 407 */ "table_reference ::= table_primary",
/* 408 */ "table_reference ::= joined_table",
/* 409 */ "table_primary ::= table_name alias_opt",
/* 410 */ "table_primary ::= db_name NK_DOT table_name alias_opt",
/* 411 */ "table_primary ::= subquery alias_opt",
/* 412 */ "table_primary ::= parenthesized_joined_table",
/* 413 */ "alias_opt ::=",
/* 414 */ "alias_opt ::= table_alias",
/* 415 */ "alias_opt ::= AS table_alias",
/* 416 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP",
/* 417 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP",
/* 418 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition",
/* 419 */ "join_type ::=",
/* 420 */ "join_type ::= INNER",
/* 421 */ "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",
/* 422 */ "set_quantifier_opt ::=",
/* 423 */ "set_quantifier_opt ::= DISTINCT",
/* 424 */ "set_quantifier_opt ::= ALL",
/* 425 */ "select_list ::= select_item",
/* 426 */ "select_list ::= select_list NK_COMMA select_item",
/* 427 */ "select_item ::= NK_STAR",
/* 428 */ "select_item ::= common_expression",
/* 429 */ "select_item ::= common_expression column_alias",
/* 430 */ "select_item ::= common_expression AS column_alias",
/* 431 */ "select_item ::= table_name NK_DOT NK_STAR",
/* 432 */ "where_clause_opt ::=",
/* 433 */ "where_clause_opt ::= WHERE search_condition",
/* 434 */ "partition_by_clause_opt ::=",
/* 435 */ "partition_by_clause_opt ::= PARTITION BY expression_list",
/* 436 */ "twindow_clause_opt ::=",
/* 437 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP",
/* 438 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP",
/* 439 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt",
/* 440 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt",
/* 441 */ "sliding_opt ::=",
/* 442 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP",
/* 443 */ "fill_opt ::=",
/* 444 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP",
/* 445 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP",
/* 446 */ "fill_mode ::= NONE",
/* 447 */ "fill_mode ::= PREV",
/* 448 */ "fill_mode ::= NULL",
/* 449 */ "fill_mode ::= LINEAR",
/* 450 */ "fill_mode ::= NEXT",
/* 451 */ "group_by_clause_opt ::=",
/* 452 */ "group_by_clause_opt ::= GROUP BY group_by_list",
/* 453 */ "group_by_list ::= expression",
/* 454 */ "group_by_list ::= group_by_list NK_COMMA expression",
/* 455 */ "having_clause_opt ::=",
/* 456 */ "having_clause_opt ::= HAVING search_condition",
/* 457 */ "range_opt ::=",
/* 458 */ "range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP",
/* 459 */ "every_opt ::=",
/* 460 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP",
/* 461 */ "query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt",
/* 462 */ "query_expression_body ::= query_primary",
/* 463 */ "query_expression_body ::= query_expression_body UNION ALL query_expression_body",
/* 464 */ "query_expression_body ::= query_expression_body UNION query_expression_body",
/* 465 */ "query_primary ::= query_specification",
/* 466 */ "query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP",
/* 467 */ "order_by_clause_opt ::=",
/* 468 */ "order_by_clause_opt ::= ORDER BY sort_specification_list",
/* 469 */ "slimit_clause_opt ::=",
/* 470 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER",
/* 471 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER",
/* 472 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER",
/* 473 */ "limit_clause_opt ::=",
/* 474 */ "limit_clause_opt ::= LIMIT NK_INTEGER",
/* 475 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER",
/* 476 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER",
/* 477 */ "subquery ::= NK_LP query_expression NK_RP",
/* 478 */ "search_condition ::= common_expression",
/* 479 */ "sort_specification_list ::= sort_specification",
/* 480 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification",
/* 481 */ "sort_specification ::= expression ordering_specification_opt null_ordering_opt",
/* 482 */ "ordering_specification_opt ::=",
/* 483 */ "ordering_specification_opt ::= ASC",
/* 484 */ "ordering_specification_opt ::= DESC",
/* 485 */ "null_ordering_opt ::=",
/* 486 */ "null_ordering_opt ::= NULLS FIRST",
/* 487 */ "null_ordering_opt ::= NULLS LAST",
/* 309 */ "signed_literal ::= NK_QUESTION",
/* 310 */ "literal_list ::= signed_literal",
/* 311 */ "literal_list ::= literal_list NK_COMMA signed_literal",
/* 312 */ "db_name ::= NK_ID",
/* 313 */ "table_name ::= NK_ID",
/* 314 */ "column_name ::= NK_ID",
/* 315 */ "function_name ::= NK_ID",
/* 316 */ "table_alias ::= NK_ID",
/* 317 */ "column_alias ::= NK_ID",
/* 318 */ "user_name ::= NK_ID",
/* 319 */ "index_name ::= NK_ID",
/* 320 */ "topic_name ::= NK_ID",
/* 321 */ "stream_name ::= NK_ID",
/* 322 */ "cgroup_name ::= NK_ID",
/* 323 */ "expression ::= literal",
/* 324 */ "expression ::= pseudo_column",
/* 325 */ "expression ::= column_reference",
/* 326 */ "expression ::= function_expression",
/* 327 */ "expression ::= subquery",
/* 328 */ "expression ::= NK_LP expression NK_RP",
/* 329 */ "expression ::= NK_PLUS expression",
/* 330 */ "expression ::= NK_MINUS expression",
/* 331 */ "expression ::= expression NK_PLUS expression",
/* 332 */ "expression ::= expression NK_MINUS expression",
/* 333 */ "expression ::= expression NK_STAR expression",
/* 334 */ "expression ::= expression NK_SLASH expression",
/* 335 */ "expression ::= expression NK_REM expression",
/* 336 */ "expression ::= column_reference NK_ARROW NK_STRING",
/* 337 */ "expression ::= expression NK_BITAND expression",
/* 338 */ "expression ::= expression NK_BITOR expression",
/* 339 */ "expression_list ::= expression",
/* 340 */ "expression_list ::= expression_list NK_COMMA expression",
/* 341 */ "column_reference ::= column_name",
/* 342 */ "column_reference ::= table_name NK_DOT column_name",
/* 343 */ "pseudo_column ::= ROWTS",
/* 344 */ "pseudo_column ::= TBNAME",
/* 345 */ "pseudo_column ::= table_name NK_DOT TBNAME",
/* 346 */ "pseudo_column ::= QSTARTTS",
/* 347 */ "pseudo_column ::= QENDTS",
/* 348 */ "pseudo_column ::= WSTARTTS",
/* 349 */ "pseudo_column ::= WENDTS",
/* 350 */ "pseudo_column ::= WDURATION",
/* 351 */ "function_expression ::= function_name NK_LP expression_list NK_RP",
/* 352 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP",
/* 353 */ "function_expression ::= CAST NK_LP expression AS type_name NK_RP",
/* 354 */ "function_expression ::= literal_func",
/* 355 */ "literal_func ::= noarg_func NK_LP NK_RP",
/* 356 */ "literal_func ::= NOW",
/* 357 */ "noarg_func ::= NOW",
/* 358 */ "noarg_func ::= TODAY",
/* 359 */ "noarg_func ::= TIMEZONE",
/* 360 */ "noarg_func ::= DATABASE",
/* 361 */ "noarg_func ::= CLIENT_VERSION",
/* 362 */ "noarg_func ::= SERVER_VERSION",
/* 363 */ "noarg_func ::= SERVER_STATUS",
/* 364 */ "noarg_func ::= CURRENT_USER",
/* 365 */ "noarg_func ::= USER",
/* 366 */ "star_func ::= COUNT",
/* 367 */ "star_func ::= FIRST",
/* 368 */ "star_func ::= LAST",
/* 369 */ "star_func ::= LAST_ROW",
/* 370 */ "star_func_para_list ::= NK_STAR",
/* 371 */ "star_func_para_list ::= other_para_list",
/* 372 */ "other_para_list ::= star_func_para",
/* 373 */ "other_para_list ::= other_para_list NK_COMMA star_func_para",
/* 374 */ "star_func_para ::= expression",
/* 375 */ "star_func_para ::= table_name NK_DOT NK_STAR",
/* 376 */ "predicate ::= expression compare_op expression",
/* 377 */ "predicate ::= expression BETWEEN expression AND expression",
/* 378 */ "predicate ::= expression NOT BETWEEN expression AND expression",
/* 379 */ "predicate ::= expression IS NULL",
/* 380 */ "predicate ::= expression IS NOT NULL",
/* 381 */ "predicate ::= expression in_op in_predicate_value",
/* 382 */ "compare_op ::= NK_LT",
/* 383 */ "compare_op ::= NK_GT",
/* 384 */ "compare_op ::= NK_LE",
/* 385 */ "compare_op ::= NK_GE",
/* 386 */ "compare_op ::= NK_NE",
/* 387 */ "compare_op ::= NK_EQ",
/* 388 */ "compare_op ::= LIKE",
/* 389 */ "compare_op ::= NOT LIKE",
/* 390 */ "compare_op ::= MATCH",
/* 391 */ "compare_op ::= NMATCH",
/* 392 */ "compare_op ::= CONTAINS",
/* 393 */ "in_op ::= IN",
/* 394 */ "in_op ::= NOT IN",
/* 395 */ "in_predicate_value ::= NK_LP literal_list NK_RP",
/* 396 */ "boolean_value_expression ::= boolean_primary",
/* 397 */ "boolean_value_expression ::= NOT boolean_primary",
/* 398 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression",
/* 399 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression",
/* 400 */ "boolean_primary ::= predicate",
/* 401 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP",
/* 402 */ "common_expression ::= expression",
/* 403 */ "common_expression ::= boolean_value_expression",
/* 404 */ "from_clause_opt ::=",
/* 405 */ "from_clause_opt ::= FROM table_reference_list",
/* 406 */ "table_reference_list ::= table_reference",
/* 407 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference",
/* 408 */ "table_reference ::= table_primary",
/* 409 */ "table_reference ::= joined_table",
/* 410 */ "table_primary ::= table_name alias_opt",
/* 411 */ "table_primary ::= db_name NK_DOT table_name alias_opt",
/* 412 */ "table_primary ::= subquery alias_opt",
/* 413 */ "table_primary ::= parenthesized_joined_table",
/* 414 */ "alias_opt ::=",
/* 415 */ "alias_opt ::= table_alias",
/* 416 */ "alias_opt ::= AS table_alias",
/* 417 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP",
/* 418 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP",
/* 419 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition",
/* 420 */ "join_type ::=",
/* 421 */ "join_type ::= INNER",
/* 422 */ "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",
/* 423 */ "set_quantifier_opt ::=",
/* 424 */ "set_quantifier_opt ::= DISTINCT",
/* 425 */ "set_quantifier_opt ::= ALL",
/* 426 */ "select_list ::= select_item",
/* 427 */ "select_list ::= select_list NK_COMMA select_item",
/* 428 */ "select_item ::= NK_STAR",
/* 429 */ "select_item ::= common_expression",
/* 430 */ "select_item ::= common_expression column_alias",
/* 431 */ "select_item ::= common_expression AS column_alias",
/* 432 */ "select_item ::= table_name NK_DOT NK_STAR",
/* 433 */ "where_clause_opt ::=",
/* 434 */ "where_clause_opt ::= WHERE search_condition",
/* 435 */ "partition_by_clause_opt ::=",
/* 436 */ "partition_by_clause_opt ::= PARTITION BY expression_list",
/* 437 */ "twindow_clause_opt ::=",
/* 438 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP",
/* 439 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP",
/* 440 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt",
/* 441 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt",
/* 442 */ "sliding_opt ::=",
/* 443 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP",
/* 444 */ "fill_opt ::=",
/* 445 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP",
/* 446 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP",
/* 447 */ "fill_mode ::= NONE",
/* 448 */ "fill_mode ::= PREV",
/* 449 */ "fill_mode ::= NULL",
/* 450 */ "fill_mode ::= LINEAR",
/* 451 */ "fill_mode ::= NEXT",
/* 452 */ "group_by_clause_opt ::=",
/* 453 */ "group_by_clause_opt ::= GROUP BY group_by_list",
/* 454 */ "group_by_list ::= expression",
/* 455 */ "group_by_list ::= group_by_list NK_COMMA expression",
/* 456 */ "having_clause_opt ::=",
/* 457 */ "having_clause_opt ::= HAVING search_condition",
/* 458 */ "range_opt ::=",
/* 459 */ "range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP",
/* 460 */ "every_opt ::=",
/* 461 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP",
/* 462 */ "query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt",
/* 463 */ "query_expression_body ::= query_primary",
/* 464 */ "query_expression_body ::= query_expression_body UNION ALL query_expression_body",
/* 465 */ "query_expression_body ::= query_expression_body UNION query_expression_body",
/* 466 */ "query_primary ::= query_specification",
/* 467 */ "query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP",
/* 468 */ "order_by_clause_opt ::=",
/* 469 */ "order_by_clause_opt ::= ORDER BY sort_specification_list",
/* 470 */ "slimit_clause_opt ::=",
/* 471 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER",
/* 472 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER",
/* 473 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER",
/* 474 */ "limit_clause_opt ::=",
/* 475 */ "limit_clause_opt ::= LIMIT NK_INTEGER",
/* 476 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER",
/* 477 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER",
/* 478 */ "subquery ::= NK_LP query_expression NK_RP",
/* 479 */ "search_condition ::= common_expression",
/* 480 */ "sort_specification_list ::= sort_specification",
/* 481 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification",
/* 482 */ "sort_specification ::= expression ordering_specification_opt null_ordering_opt",
/* 483 */ "ordering_specification_opt ::=",
/* 484 */ "ordering_specification_opt ::= ASC",
/* 485 */ "ordering_specification_opt ::= DESC",
/* 486 */ "null_ordering_opt ::=",
/* 487 */ "null_ordering_opt ::= NULLS FIRST",
/* 488 */ "null_ordering_opt ::= NULLS LAST",
};
#endif /* NDEBUG */
......@@ -3040,185 +3001,186 @@ static const struct {
{ 288, -1 }, /* (306) signed_literal ::= duration_literal */
{ 288, -1 }, /* (307) signed_literal ::= NULL */
{ 288, -1 }, /* (308) signed_literal ::= literal_func */
{ 327, -1 }, /* (309) literal_list ::= signed_literal */
{ 327, -3 }, /* (310) literal_list ::= literal_list NK_COMMA signed_literal */
{ 266, -1 }, /* (311) db_name ::= NK_ID */
{ 294, -1 }, /* (312) table_name ::= NK_ID */
{ 286, -1 }, /* (313) column_name ::= NK_ID */
{ 301, -1 }, /* (314) function_name ::= NK_ID */
{ 328, -1 }, /* (315) table_alias ::= NK_ID */
{ 329, -1 }, /* (316) column_alias ::= NK_ID */
{ 260, -1 }, /* (317) user_name ::= NK_ID */
{ 307, -1 }, /* (318) index_name ::= NK_ID */
{ 314, -1 }, /* (319) topic_name ::= NK_ID */
{ 321, -1 }, /* (320) stream_name ::= NK_ID */
{ 316, -1 }, /* (321) cgroup_name ::= NK_ID */
{ 330, -1 }, /* (322) expression ::= literal */
{ 330, -1 }, /* (323) expression ::= pseudo_column */
{ 330, -1 }, /* (324) expression ::= column_reference */
{ 330, -1 }, /* (325) expression ::= function_expression */
{ 330, -1 }, /* (326) expression ::= subquery */
{ 330, -3 }, /* (327) expression ::= NK_LP expression NK_RP */
{ 330, -2 }, /* (328) expression ::= NK_PLUS expression */
{ 330, -2 }, /* (329) expression ::= NK_MINUS expression */
{ 330, -3 }, /* (330) expression ::= expression NK_PLUS expression */
{ 330, -3 }, /* (331) expression ::= expression NK_MINUS expression */
{ 330, -3 }, /* (332) expression ::= expression NK_STAR expression */
{ 330, -3 }, /* (333) expression ::= expression NK_SLASH expression */
{ 330, -3 }, /* (334) expression ::= expression NK_REM expression */
{ 330, -3 }, /* (335) expression ::= column_reference NK_ARROW NK_STRING */
{ 330, -3 }, /* (336) expression ::= expression NK_BITAND expression */
{ 330, -3 }, /* (337) expression ::= expression NK_BITOR expression */
{ 291, -1 }, /* (338) expression_list ::= expression */
{ 291, -3 }, /* (339) expression_list ::= expression_list NK_COMMA expression */
{ 332, -1 }, /* (340) column_reference ::= column_name */
{ 332, -3 }, /* (341) column_reference ::= table_name NK_DOT column_name */
{ 331, -1 }, /* (342) pseudo_column ::= ROWTS */
{ 331, -1 }, /* (343) pseudo_column ::= TBNAME */
{ 331, -3 }, /* (344) pseudo_column ::= table_name NK_DOT TBNAME */
{ 331, -1 }, /* (345) pseudo_column ::= QSTARTTS */
{ 331, -1 }, /* (346) pseudo_column ::= QENDTS */
{ 331, -1 }, /* (347) pseudo_column ::= WSTARTTS */
{ 331, -1 }, /* (348) pseudo_column ::= WENDTS */
{ 331, -1 }, /* (349) pseudo_column ::= WDURATION */
{ 333, -4 }, /* (350) function_expression ::= function_name NK_LP expression_list NK_RP */
{ 333, -4 }, /* (351) function_expression ::= star_func NK_LP star_func_para_list NK_RP */
{ 333, -6 }, /* (352) function_expression ::= CAST NK_LP expression AS type_name NK_RP */
{ 333, -1 }, /* (353) function_expression ::= literal_func */
{ 326, -3 }, /* (354) literal_func ::= noarg_func NK_LP NK_RP */
{ 326, -1 }, /* (355) literal_func ::= NOW */
{ 337, -1 }, /* (356) noarg_func ::= NOW */
{ 337, -1 }, /* (357) noarg_func ::= TODAY */
{ 337, -1 }, /* (358) noarg_func ::= TIMEZONE */
{ 337, -1 }, /* (359) noarg_func ::= DATABASE */
{ 337, -1 }, /* (360) noarg_func ::= CLIENT_VERSION */
{ 337, -1 }, /* (361) noarg_func ::= SERVER_VERSION */
{ 337, -1 }, /* (362) noarg_func ::= SERVER_STATUS */
{ 337, -1 }, /* (363) noarg_func ::= CURRENT_USER */
{ 337, -1 }, /* (364) noarg_func ::= USER */
{ 335, -1 }, /* (365) star_func ::= COUNT */
{ 335, -1 }, /* (366) star_func ::= FIRST */
{ 335, -1 }, /* (367) star_func ::= LAST */
{ 335, -1 }, /* (368) star_func ::= LAST_ROW */
{ 336, -1 }, /* (369) star_func_para_list ::= NK_STAR */
{ 336, -1 }, /* (370) star_func_para_list ::= other_para_list */
{ 338, -1 }, /* (371) other_para_list ::= star_func_para */
{ 338, -3 }, /* (372) other_para_list ::= other_para_list NK_COMMA star_func_para */
{ 339, -1 }, /* (373) star_func_para ::= expression */
{ 339, -3 }, /* (374) star_func_para ::= table_name NK_DOT NK_STAR */
{ 340, -3 }, /* (375) predicate ::= expression compare_op expression */
{ 340, -5 }, /* (376) predicate ::= expression BETWEEN expression AND expression */
{ 340, -6 }, /* (377) predicate ::= expression NOT BETWEEN expression AND expression */
{ 340, -3 }, /* (378) predicate ::= expression IS NULL */
{ 340, -4 }, /* (379) predicate ::= expression IS NOT NULL */
{ 340, -3 }, /* (380) predicate ::= expression in_op in_predicate_value */
{ 341, -1 }, /* (381) compare_op ::= NK_LT */
{ 341, -1 }, /* (382) compare_op ::= NK_GT */
{ 341, -1 }, /* (383) compare_op ::= NK_LE */
{ 341, -1 }, /* (384) compare_op ::= NK_GE */
{ 341, -1 }, /* (385) compare_op ::= NK_NE */
{ 341, -1 }, /* (386) compare_op ::= NK_EQ */
{ 341, -1 }, /* (387) compare_op ::= LIKE */
{ 341, -2 }, /* (388) compare_op ::= NOT LIKE */
{ 341, -1 }, /* (389) compare_op ::= MATCH */
{ 341, -1 }, /* (390) compare_op ::= NMATCH */
{ 341, -1 }, /* (391) compare_op ::= CONTAINS */
{ 342, -1 }, /* (392) in_op ::= IN */
{ 342, -2 }, /* (393) in_op ::= NOT IN */
{ 343, -3 }, /* (394) in_predicate_value ::= NK_LP literal_list NK_RP */
{ 344, -1 }, /* (395) boolean_value_expression ::= boolean_primary */
{ 344, -2 }, /* (396) boolean_value_expression ::= NOT boolean_primary */
{ 344, -3 }, /* (397) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */
{ 344, -3 }, /* (398) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */
{ 345, -1 }, /* (399) boolean_primary ::= predicate */
{ 345, -3 }, /* (400) boolean_primary ::= NK_LP boolean_value_expression NK_RP */
{ 346, -1 }, /* (401) common_expression ::= expression */
{ 346, -1 }, /* (402) common_expression ::= boolean_value_expression */
{ 347, 0 }, /* (403) from_clause_opt ::= */
{ 347, -2 }, /* (404) from_clause_opt ::= FROM table_reference_list */
{ 348, -1 }, /* (405) table_reference_list ::= table_reference */
{ 348, -3 }, /* (406) table_reference_list ::= table_reference_list NK_COMMA table_reference */
{ 349, -1 }, /* (407) table_reference ::= table_primary */
{ 349, -1 }, /* (408) table_reference ::= joined_table */
{ 350, -2 }, /* (409) table_primary ::= table_name alias_opt */
{ 350, -4 }, /* (410) table_primary ::= db_name NK_DOT table_name alias_opt */
{ 350, -2 }, /* (411) table_primary ::= subquery alias_opt */
{ 350, -1 }, /* (412) table_primary ::= parenthesized_joined_table */
{ 352, 0 }, /* (413) alias_opt ::= */
{ 352, -1 }, /* (414) alias_opt ::= table_alias */
{ 352, -2 }, /* (415) alias_opt ::= AS table_alias */
{ 353, -3 }, /* (416) parenthesized_joined_table ::= NK_LP joined_table NK_RP */
{ 353, -3 }, /* (417) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */
{ 351, -6 }, /* (418) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */
{ 354, 0 }, /* (419) join_type ::= */
{ 354, -1 }, /* (420) join_type ::= INNER */
{ 356, -12 }, /* (421) 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 */
{ 357, 0 }, /* (422) set_quantifier_opt ::= */
{ 357, -1 }, /* (423) set_quantifier_opt ::= DISTINCT */
{ 357, -1 }, /* (424) set_quantifier_opt ::= ALL */
{ 358, -1 }, /* (425) select_list ::= select_item */
{ 358, -3 }, /* (426) select_list ::= select_list NK_COMMA select_item */
{ 366, -1 }, /* (427) select_item ::= NK_STAR */
{ 366, -1 }, /* (428) select_item ::= common_expression */
{ 366, -2 }, /* (429) select_item ::= common_expression column_alias */
{ 366, -3 }, /* (430) select_item ::= common_expression AS column_alias */
{ 366, -3 }, /* (431) select_item ::= table_name NK_DOT NK_STAR */
{ 324, 0 }, /* (432) where_clause_opt ::= */
{ 324, -2 }, /* (433) where_clause_opt ::= WHERE search_condition */
{ 359, 0 }, /* (434) partition_by_clause_opt ::= */
{ 359, -3 }, /* (435) partition_by_clause_opt ::= PARTITION BY expression_list */
{ 363, 0 }, /* (436) twindow_clause_opt ::= */
{ 363, -6 }, /* (437) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */
{ 363, -4 }, /* (438) twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */
{ 363, -6 }, /* (439) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */
{ 363, -8 }, /* (440) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */
{ 310, 0 }, /* (441) sliding_opt ::= */
{ 310, -4 }, /* (442) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */
{ 362, 0 }, /* (443) fill_opt ::= */
{ 362, -4 }, /* (444) fill_opt ::= FILL NK_LP fill_mode NK_RP */
{ 362, -6 }, /* (445) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */
{ 367, -1 }, /* (446) fill_mode ::= NONE */
{ 367, -1 }, /* (447) fill_mode ::= PREV */
{ 367, -1 }, /* (448) fill_mode ::= NULL */
{ 367, -1 }, /* (449) fill_mode ::= LINEAR */
{ 367, -1 }, /* (450) fill_mode ::= NEXT */
{ 364, 0 }, /* (451) group_by_clause_opt ::= */
{ 364, -3 }, /* (452) group_by_clause_opt ::= GROUP BY group_by_list */
{ 368, -1 }, /* (453) group_by_list ::= expression */
{ 368, -3 }, /* (454) group_by_list ::= group_by_list NK_COMMA expression */
{ 365, 0 }, /* (455) having_clause_opt ::= */
{ 365, -2 }, /* (456) having_clause_opt ::= HAVING search_condition */
{ 360, 0 }, /* (457) range_opt ::= */
{ 360, -6 }, /* (458) range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */
{ 361, 0 }, /* (459) every_opt ::= */
{ 361, -4 }, /* (460) every_opt ::= EVERY NK_LP duration_literal NK_RP */
{ 315, -4 }, /* (461) query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */
{ 369, -1 }, /* (462) query_expression_body ::= query_primary */
{ 369, -4 }, /* (463) query_expression_body ::= query_expression_body UNION ALL query_expression_body */
{ 369, -3 }, /* (464) query_expression_body ::= query_expression_body UNION query_expression_body */
{ 373, -1 }, /* (465) query_primary ::= query_specification */
{ 373, -6 }, /* (466) query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */
{ 370, 0 }, /* (467) order_by_clause_opt ::= */
{ 370, -3 }, /* (468) order_by_clause_opt ::= ORDER BY sort_specification_list */
{ 371, 0 }, /* (469) slimit_clause_opt ::= */
{ 371, -2 }, /* (470) slimit_clause_opt ::= SLIMIT NK_INTEGER */
{ 371, -4 }, /* (471) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */
{ 371, -4 }, /* (472) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */
{ 372, 0 }, /* (473) limit_clause_opt ::= */
{ 372, -2 }, /* (474) limit_clause_opt ::= LIMIT NK_INTEGER */
{ 372, -4 }, /* (475) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */
{ 372, -4 }, /* (476) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */
{ 334, -3 }, /* (477) subquery ::= NK_LP query_expression NK_RP */
{ 355, -1 }, /* (478) search_condition ::= common_expression */
{ 374, -1 }, /* (479) sort_specification_list ::= sort_specification */
{ 374, -3 }, /* (480) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */
{ 375, -3 }, /* (481) sort_specification ::= expression ordering_specification_opt null_ordering_opt */
{ 376, 0 }, /* (482) ordering_specification_opt ::= */
{ 376, -1 }, /* (483) ordering_specification_opt ::= ASC */
{ 376, -1 }, /* (484) ordering_specification_opt ::= DESC */
{ 377, 0 }, /* (485) null_ordering_opt ::= */
{ 377, -2 }, /* (486) null_ordering_opt ::= NULLS FIRST */
{ 377, -2 }, /* (487) null_ordering_opt ::= NULLS LAST */
{ 288, -1 }, /* (309) signed_literal ::= NK_QUESTION */
{ 327, -1 }, /* (310) literal_list ::= signed_literal */
{ 327, -3 }, /* (311) literal_list ::= literal_list NK_COMMA signed_literal */
{ 266, -1 }, /* (312) db_name ::= NK_ID */
{ 294, -1 }, /* (313) table_name ::= NK_ID */
{ 286, -1 }, /* (314) column_name ::= NK_ID */
{ 301, -1 }, /* (315) function_name ::= NK_ID */
{ 328, -1 }, /* (316) table_alias ::= NK_ID */
{ 329, -1 }, /* (317) column_alias ::= NK_ID */
{ 260, -1 }, /* (318) user_name ::= NK_ID */
{ 307, -1 }, /* (319) index_name ::= NK_ID */
{ 314, -1 }, /* (320) topic_name ::= NK_ID */
{ 321, -1 }, /* (321) stream_name ::= NK_ID */
{ 316, -1 }, /* (322) cgroup_name ::= NK_ID */
{ 330, -1 }, /* (323) expression ::= literal */
{ 330, -1 }, /* (324) expression ::= pseudo_column */
{ 330, -1 }, /* (325) expression ::= column_reference */
{ 330, -1 }, /* (326) expression ::= function_expression */
{ 330, -1 }, /* (327) expression ::= subquery */
{ 330, -3 }, /* (328) expression ::= NK_LP expression NK_RP */
{ 330, -2 }, /* (329) expression ::= NK_PLUS expression */
{ 330, -2 }, /* (330) expression ::= NK_MINUS expression */
{ 330, -3 }, /* (331) expression ::= expression NK_PLUS expression */
{ 330, -3 }, /* (332) expression ::= expression NK_MINUS expression */
{ 330, -3 }, /* (333) expression ::= expression NK_STAR expression */
{ 330, -3 }, /* (334) expression ::= expression NK_SLASH expression */
{ 330, -3 }, /* (335) expression ::= expression NK_REM expression */
{ 330, -3 }, /* (336) expression ::= column_reference NK_ARROW NK_STRING */
{ 330, -3 }, /* (337) expression ::= expression NK_BITAND expression */
{ 330, -3 }, /* (338) expression ::= expression NK_BITOR expression */
{ 291, -1 }, /* (339) expression_list ::= expression */
{ 291, -3 }, /* (340) expression_list ::= expression_list NK_COMMA expression */
{ 332, -1 }, /* (341) column_reference ::= column_name */
{ 332, -3 }, /* (342) column_reference ::= table_name NK_DOT column_name */
{ 331, -1 }, /* (343) pseudo_column ::= ROWTS */
{ 331, -1 }, /* (344) pseudo_column ::= TBNAME */
{ 331, -3 }, /* (345) pseudo_column ::= table_name NK_DOT TBNAME */
{ 331, -1 }, /* (346) pseudo_column ::= QSTARTTS */
{ 331, -1 }, /* (347) pseudo_column ::= QENDTS */
{ 331, -1 }, /* (348) pseudo_column ::= WSTARTTS */
{ 331, -1 }, /* (349) pseudo_column ::= WENDTS */
{ 331, -1 }, /* (350) pseudo_column ::= WDURATION */
{ 333, -4 }, /* (351) function_expression ::= function_name NK_LP expression_list NK_RP */
{ 333, -4 }, /* (352) function_expression ::= star_func NK_LP star_func_para_list NK_RP */
{ 333, -6 }, /* (353) function_expression ::= CAST NK_LP expression AS type_name NK_RP */
{ 333, -1 }, /* (354) function_expression ::= literal_func */
{ 326, -3 }, /* (355) literal_func ::= noarg_func NK_LP NK_RP */
{ 326, -1 }, /* (356) literal_func ::= NOW */
{ 337, -1 }, /* (357) noarg_func ::= NOW */
{ 337, -1 }, /* (358) noarg_func ::= TODAY */
{ 337, -1 }, /* (359) noarg_func ::= TIMEZONE */
{ 337, -1 }, /* (360) noarg_func ::= DATABASE */
{ 337, -1 }, /* (361) noarg_func ::= CLIENT_VERSION */
{ 337, -1 }, /* (362) noarg_func ::= SERVER_VERSION */
{ 337, -1 }, /* (363) noarg_func ::= SERVER_STATUS */
{ 337, -1 }, /* (364) noarg_func ::= CURRENT_USER */
{ 337, -1 }, /* (365) noarg_func ::= USER */
{ 335, -1 }, /* (366) star_func ::= COUNT */
{ 335, -1 }, /* (367) star_func ::= FIRST */
{ 335, -1 }, /* (368) star_func ::= LAST */
{ 335, -1 }, /* (369) star_func ::= LAST_ROW */
{ 336, -1 }, /* (370) star_func_para_list ::= NK_STAR */
{ 336, -1 }, /* (371) star_func_para_list ::= other_para_list */
{ 338, -1 }, /* (372) other_para_list ::= star_func_para */
{ 338, -3 }, /* (373) other_para_list ::= other_para_list NK_COMMA star_func_para */
{ 339, -1 }, /* (374) star_func_para ::= expression */
{ 339, -3 }, /* (375) star_func_para ::= table_name NK_DOT NK_STAR */
{ 340, -3 }, /* (376) predicate ::= expression compare_op expression */
{ 340, -5 }, /* (377) predicate ::= expression BETWEEN expression AND expression */
{ 340, -6 }, /* (378) predicate ::= expression NOT BETWEEN expression AND expression */
{ 340, -3 }, /* (379) predicate ::= expression IS NULL */
{ 340, -4 }, /* (380) predicate ::= expression IS NOT NULL */
{ 340, -3 }, /* (381) predicate ::= expression in_op in_predicate_value */
{ 341, -1 }, /* (382) compare_op ::= NK_LT */
{ 341, -1 }, /* (383) compare_op ::= NK_GT */
{ 341, -1 }, /* (384) compare_op ::= NK_LE */
{ 341, -1 }, /* (385) compare_op ::= NK_GE */
{ 341, -1 }, /* (386) compare_op ::= NK_NE */
{ 341, -1 }, /* (387) compare_op ::= NK_EQ */
{ 341, -1 }, /* (388) compare_op ::= LIKE */
{ 341, -2 }, /* (389) compare_op ::= NOT LIKE */
{ 341, -1 }, /* (390) compare_op ::= MATCH */
{ 341, -1 }, /* (391) compare_op ::= NMATCH */
{ 341, -1 }, /* (392) compare_op ::= CONTAINS */
{ 342, -1 }, /* (393) in_op ::= IN */
{ 342, -2 }, /* (394) in_op ::= NOT IN */
{ 343, -3 }, /* (395) in_predicate_value ::= NK_LP literal_list NK_RP */
{ 344, -1 }, /* (396) boolean_value_expression ::= boolean_primary */
{ 344, -2 }, /* (397) boolean_value_expression ::= NOT boolean_primary */
{ 344, -3 }, /* (398) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */
{ 344, -3 }, /* (399) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */
{ 345, -1 }, /* (400) boolean_primary ::= predicate */
{ 345, -3 }, /* (401) boolean_primary ::= NK_LP boolean_value_expression NK_RP */
{ 346, -1 }, /* (402) common_expression ::= expression */
{ 346, -1 }, /* (403) common_expression ::= boolean_value_expression */
{ 347, 0 }, /* (404) from_clause_opt ::= */
{ 347, -2 }, /* (405) from_clause_opt ::= FROM table_reference_list */
{ 348, -1 }, /* (406) table_reference_list ::= table_reference */
{ 348, -3 }, /* (407) table_reference_list ::= table_reference_list NK_COMMA table_reference */
{ 349, -1 }, /* (408) table_reference ::= table_primary */
{ 349, -1 }, /* (409) table_reference ::= joined_table */
{ 350, -2 }, /* (410) table_primary ::= table_name alias_opt */
{ 350, -4 }, /* (411) table_primary ::= db_name NK_DOT table_name alias_opt */
{ 350, -2 }, /* (412) table_primary ::= subquery alias_opt */
{ 350, -1 }, /* (413) table_primary ::= parenthesized_joined_table */
{ 352, 0 }, /* (414) alias_opt ::= */
{ 352, -1 }, /* (415) alias_opt ::= table_alias */
{ 352, -2 }, /* (416) alias_opt ::= AS table_alias */
{ 353, -3 }, /* (417) parenthesized_joined_table ::= NK_LP joined_table NK_RP */
{ 353, -3 }, /* (418) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */
{ 351, -6 }, /* (419) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */
{ 354, 0 }, /* (420) join_type ::= */
{ 354, -1 }, /* (421) join_type ::= INNER */
{ 356, -12 }, /* (422) 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 */
{ 357, 0 }, /* (423) set_quantifier_opt ::= */
{ 357, -1 }, /* (424) set_quantifier_opt ::= DISTINCT */
{ 357, -1 }, /* (425) set_quantifier_opt ::= ALL */
{ 358, -1 }, /* (426) select_list ::= select_item */
{ 358, -3 }, /* (427) select_list ::= select_list NK_COMMA select_item */
{ 366, -1 }, /* (428) select_item ::= NK_STAR */
{ 366, -1 }, /* (429) select_item ::= common_expression */
{ 366, -2 }, /* (430) select_item ::= common_expression column_alias */
{ 366, -3 }, /* (431) select_item ::= common_expression AS column_alias */
{ 366, -3 }, /* (432) select_item ::= table_name NK_DOT NK_STAR */
{ 324, 0 }, /* (433) where_clause_opt ::= */
{ 324, -2 }, /* (434) where_clause_opt ::= WHERE search_condition */
{ 359, 0 }, /* (435) partition_by_clause_opt ::= */
{ 359, -3 }, /* (436) partition_by_clause_opt ::= PARTITION BY expression_list */
{ 363, 0 }, /* (437) twindow_clause_opt ::= */
{ 363, -6 }, /* (438) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */
{ 363, -4 }, /* (439) twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */
{ 363, -6 }, /* (440) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */
{ 363, -8 }, /* (441) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */
{ 310, 0 }, /* (442) sliding_opt ::= */
{ 310, -4 }, /* (443) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */
{ 362, 0 }, /* (444) fill_opt ::= */
{ 362, -4 }, /* (445) fill_opt ::= FILL NK_LP fill_mode NK_RP */
{ 362, -6 }, /* (446) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */
{ 367, -1 }, /* (447) fill_mode ::= NONE */
{ 367, -1 }, /* (448) fill_mode ::= PREV */
{ 367, -1 }, /* (449) fill_mode ::= NULL */
{ 367, -1 }, /* (450) fill_mode ::= LINEAR */
{ 367, -1 }, /* (451) fill_mode ::= NEXT */
{ 364, 0 }, /* (452) group_by_clause_opt ::= */
{ 364, -3 }, /* (453) group_by_clause_opt ::= GROUP BY group_by_list */
{ 368, -1 }, /* (454) group_by_list ::= expression */
{ 368, -3 }, /* (455) group_by_list ::= group_by_list NK_COMMA expression */
{ 365, 0 }, /* (456) having_clause_opt ::= */
{ 365, -2 }, /* (457) having_clause_opt ::= HAVING search_condition */
{ 360, 0 }, /* (458) range_opt ::= */
{ 360, -6 }, /* (459) range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */
{ 361, 0 }, /* (460) every_opt ::= */
{ 361, -4 }, /* (461) every_opt ::= EVERY NK_LP duration_literal NK_RP */
{ 315, -4 }, /* (462) query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */
{ 369, -1 }, /* (463) query_expression_body ::= query_primary */
{ 369, -4 }, /* (464) query_expression_body ::= query_expression_body UNION ALL query_expression_body */
{ 369, -3 }, /* (465) query_expression_body ::= query_expression_body UNION query_expression_body */
{ 373, -1 }, /* (466) query_primary ::= query_specification */
{ 373, -6 }, /* (467) query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */
{ 370, 0 }, /* (468) order_by_clause_opt ::= */
{ 370, -3 }, /* (469) order_by_clause_opt ::= ORDER BY sort_specification_list */
{ 371, 0 }, /* (470) slimit_clause_opt ::= */
{ 371, -2 }, /* (471) slimit_clause_opt ::= SLIMIT NK_INTEGER */
{ 371, -4 }, /* (472) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */
{ 371, -4 }, /* (473) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */
{ 372, 0 }, /* (474) limit_clause_opt ::= */
{ 372, -2 }, /* (475) limit_clause_opt ::= LIMIT NK_INTEGER */
{ 372, -4 }, /* (476) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */
{ 372, -4 }, /* (477) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */
{ 334, -3 }, /* (478) subquery ::= NK_LP query_expression NK_RP */
{ 355, -1 }, /* (479) search_condition ::= common_expression */
{ 374, -1 }, /* (480) sort_specification_list ::= sort_specification */
{ 374, -3 }, /* (481) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */
{ 375, -3 }, /* (482) sort_specification ::= expression ordering_specification_opt null_ordering_opt */
{ 376, 0 }, /* (483) ordering_specification_opt ::= */
{ 376, -1 }, /* (484) ordering_specification_opt ::= ASC */
{ 376, -1 }, /* (485) ordering_specification_opt ::= DESC */
{ 377, 0 }, /* (486) null_ordering_opt ::= */
{ 377, -2 }, /* (487) null_ordering_opt ::= NULLS FIRST */
{ 377, -2 }, /* (488) null_ordering_opt ::= NULLS LAST */
};
static void yy_accept(yyParser*); /* Forward Declaration */
......@@ -3434,30 +3396,30 @@ static YYACTIONTYPE yy_reduce(
case 49: /* dnode_endpoint ::= NK_STRING */
case 50: /* dnode_endpoint ::= NK_ID */ yytestcase(yyruleno==50);
case 51: /* dnode_endpoint ::= NK_IPTOKEN */ yytestcase(yyruleno==51);
case 311: /* db_name ::= NK_ID */ yytestcase(yyruleno==311);
case 312: /* table_name ::= NK_ID */ yytestcase(yyruleno==312);
case 313: /* column_name ::= NK_ID */ yytestcase(yyruleno==313);
case 314: /* function_name ::= NK_ID */ yytestcase(yyruleno==314);
case 315: /* table_alias ::= NK_ID */ yytestcase(yyruleno==315);
case 316: /* column_alias ::= NK_ID */ yytestcase(yyruleno==316);
case 317: /* user_name ::= NK_ID */ yytestcase(yyruleno==317);
case 318: /* index_name ::= NK_ID */ yytestcase(yyruleno==318);
case 319: /* topic_name ::= NK_ID */ yytestcase(yyruleno==319);
case 320: /* stream_name ::= NK_ID */ yytestcase(yyruleno==320);
case 321: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==321);
case 356: /* noarg_func ::= NOW */ yytestcase(yyruleno==356);
case 357: /* noarg_func ::= TODAY */ yytestcase(yyruleno==357);
case 358: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==358);
case 359: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==359);
case 360: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==360);
case 361: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==361);
case 362: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==362);
case 363: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==363);
case 364: /* noarg_func ::= USER */ yytestcase(yyruleno==364);
case 365: /* star_func ::= COUNT */ yytestcase(yyruleno==365);
case 366: /* star_func ::= FIRST */ yytestcase(yyruleno==366);
case 367: /* star_func ::= LAST */ yytestcase(yyruleno==367);
case 368: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==368);
case 312: /* db_name ::= NK_ID */ yytestcase(yyruleno==312);
case 313: /* table_name ::= NK_ID */ yytestcase(yyruleno==313);
case 314: /* column_name ::= NK_ID */ yytestcase(yyruleno==314);
case 315: /* function_name ::= NK_ID */ yytestcase(yyruleno==315);
case 316: /* table_alias ::= NK_ID */ yytestcase(yyruleno==316);
case 317: /* column_alias ::= NK_ID */ yytestcase(yyruleno==317);
case 318: /* user_name ::= NK_ID */ yytestcase(yyruleno==318);
case 319: /* index_name ::= NK_ID */ yytestcase(yyruleno==319);
case 320: /* topic_name ::= NK_ID */ yytestcase(yyruleno==320);
case 321: /* stream_name ::= NK_ID */ yytestcase(yyruleno==321);
case 322: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==322);
case 357: /* noarg_func ::= NOW */ yytestcase(yyruleno==357);
case 358: /* noarg_func ::= TODAY */ yytestcase(yyruleno==358);
case 359: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==359);
case 360: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==360);
case 361: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==361);
case 362: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==362);
case 363: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==363);
case 364: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==364);
case 365: /* noarg_func ::= USER */ yytestcase(yyruleno==365);
case 366: /* star_func ::= COUNT */ yytestcase(yyruleno==366);
case 367: /* star_func ::= FIRST */ yytestcase(yyruleno==367);
case 368: /* star_func ::= LAST */ yytestcase(yyruleno==368);
case 369: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==369);
{ yylhsminor.yy533 = yymsp[0].minor.yy0; }
yymsp[0].minor.yy533 = yylhsminor.yy533;
break;
......@@ -3516,7 +3478,7 @@ static YYACTIONTYPE yy_reduce(
case 71: /* exists_opt ::= */ yytestcase(yyruleno==71);
case 252: /* analyze_opt ::= */ yytestcase(yyruleno==252);
case 260: /* agg_func_opt ::= */ yytestcase(yyruleno==260);
case 422: /* set_quantifier_opt ::= */ yytestcase(yyruleno==422);
case 423: /* set_quantifier_opt ::= */ yytestcase(yyruleno==423);
{ yymsp[1].minor.yy173 = false; }
break;
case 70: /* exists_opt ::= IF EXISTS */
......@@ -3663,10 +3625,10 @@ static YYACTIONTYPE yy_reduce(
case 183: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==183);
case 188: /* col_name_list ::= col_name */ yytestcase(yyruleno==188);
case 235: /* func_list ::= func */ yytestcase(yyruleno==235);
case 309: /* literal_list ::= signed_literal */ yytestcase(yyruleno==309);
case 371: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==371);
case 425: /* select_list ::= select_item */ yytestcase(yyruleno==425);
case 479: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==479);
case 310: /* literal_list ::= signed_literal */ yytestcase(yyruleno==310);
case 372: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==372);
case 426: /* select_list ::= select_item */ yytestcase(yyruleno==426);
case 480: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==480);
{ yylhsminor.yy712 = createNodeList(pCxt, yymsp[0].minor.yy560); }
yymsp[0].minor.yy712 = yylhsminor.yy712;
break;
......@@ -3675,10 +3637,10 @@ static YYACTIONTYPE yy_reduce(
case 184: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==184);
case 189: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==189);
case 236: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==236);
case 310: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==310);
case 372: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==372);
case 426: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==426);
case 480: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==480);
case 311: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==311);
case 373: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==373);
case 427: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==427);
case 481: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==481);
{ yylhsminor.yy712 = addNodeToList(pCxt, yymsp[-2].minor.yy712, yymsp[0].minor.yy560); }
yymsp[-2].minor.yy712 = yylhsminor.yy712;
break;
......@@ -3761,9 +3723,9 @@ static YYACTIONTYPE yy_reduce(
break;
case 136: /* specific_cols_opt ::= */
case 167: /* tags_def_opt ::= */ yytestcase(yyruleno==167);
case 434: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==434);
case 451: /* group_by_clause_opt ::= */ yytestcase(yyruleno==451);
case 467: /* order_by_clause_opt ::= */ yytestcase(yyruleno==467);
case 435: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==435);
case 452: /* group_by_clause_opt ::= */ yytestcase(yyruleno==452);
case 468: /* order_by_clause_opt ::= */ yytestcase(yyruleno==468);
{ yymsp[1].minor.yy712 = NULL; }
break;
case 137: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */
......@@ -3853,7 +3815,7 @@ static YYACTIONTYPE yy_reduce(
{ yymsp[-5].minor.yy196 = createDataType(TSDB_DATA_TYPE_DECIMAL); }
break;
case 168: /* tags_def_opt ::= tags_def */
case 370: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==370);
case 371: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==371);
{ yylhsminor.yy712 = yymsp[0].minor.yy712; }
yymsp[0].minor.yy712 = yylhsminor.yy712;
break;
......@@ -3902,12 +3864,12 @@ static YYACTIONTYPE yy_reduce(
{ yymsp[-1].minor.yy389.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy389.val = yymsp[0].minor.yy0; }
break;
case 181: /* duration_list ::= duration_literal */
case 338: /* expression_list ::= expression */ yytestcase(yyruleno==338);
case 339: /* expression_list ::= expression */ yytestcase(yyruleno==339);
{ yylhsminor.yy712 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy560)); }
yymsp[0].minor.yy712 = yylhsminor.yy712;
break;
case 182: /* duration_list ::= duration_list NK_COMMA duration_literal */
case 339: /* expression_list ::= expression_list NK_COMMA expression */ yytestcase(yyruleno==339);
case 340: /* expression_list ::= expression_list NK_COMMA expression */ yytestcase(yyruleno==340);
{ yylhsminor.yy712 = addNodeToList(pCxt, yymsp[-2].minor.yy712, releaseRawExprNode(pCxt, yymsp[0].minor.yy560)); }
yymsp[-2].minor.yy712 = yylhsminor.yy712;
break;
......@@ -4031,16 +3993,16 @@ static YYACTIONTYPE yy_reduce(
break;
case 226: /* like_pattern_opt ::= */
case 266: /* into_opt ::= */ yytestcase(yyruleno==266);
case 403: /* from_clause_opt ::= */ yytestcase(yyruleno==403);
case 432: /* where_clause_opt ::= */ yytestcase(yyruleno==432);
case 436: /* twindow_clause_opt ::= */ yytestcase(yyruleno==436);
case 441: /* sliding_opt ::= */ yytestcase(yyruleno==441);
case 443: /* fill_opt ::= */ yytestcase(yyruleno==443);
case 455: /* having_clause_opt ::= */ yytestcase(yyruleno==455);
case 457: /* range_opt ::= */ yytestcase(yyruleno==457);
case 459: /* every_opt ::= */ yytestcase(yyruleno==459);
case 469: /* slimit_clause_opt ::= */ yytestcase(yyruleno==469);
case 473: /* limit_clause_opt ::= */ yytestcase(yyruleno==473);
case 404: /* from_clause_opt ::= */ yytestcase(yyruleno==404);
case 433: /* where_clause_opt ::= */ yytestcase(yyruleno==433);
case 437: /* twindow_clause_opt ::= */ yytestcase(yyruleno==437);
case 442: /* sliding_opt ::= */ yytestcase(yyruleno==442);
case 444: /* fill_opt ::= */ yytestcase(yyruleno==444);
case 456: /* having_clause_opt ::= */ yytestcase(yyruleno==456);
case 458: /* range_opt ::= */ yytestcase(yyruleno==458);
case 460: /* every_opt ::= */ yytestcase(yyruleno==460);
case 470: /* slimit_clause_opt ::= */ yytestcase(yyruleno==470);
case 474: /* limit_clause_opt ::= */ yytestcase(yyruleno==474);
{ yymsp[1].minor.yy560 = NULL; }
break;
case 227: /* like_pattern_opt ::= LIKE NK_STRING */
......@@ -4115,7 +4077,7 @@ static YYACTIONTYPE yy_reduce(
break;
case 253: /* analyze_opt ::= ANALYZE */
case 261: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==261);
case 423: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==423);
case 424: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==424);
{ yymsp[0].minor.yy173 = true; }
break;
case 254: /* explain_options ::= */
......@@ -4151,9 +4113,9 @@ static YYACTIONTYPE yy_reduce(
{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy173, &yymsp[0].minor.yy533); }
break;
case 267: /* into_opt ::= INTO full_table_name */
case 404: /* from_clause_opt ::= FROM table_reference_list */ yytestcase(yyruleno==404);
case 433: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==433);
case 456: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==456);
case 405: /* from_clause_opt ::= FROM table_reference_list */ yytestcase(yyruleno==405);
case 434: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==434);
case 457: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==457);
{ yymsp[-1].minor.yy560 = yymsp[0].minor.yy560; }
break;
case 269: /* stream_options ::= stream_options TRIGGER AT_ONCE */
......@@ -4227,22 +4189,22 @@ static YYACTIONTYPE yy_reduce(
break;
case 292: /* literal ::= duration_literal */
case 302: /* signed_literal ::= signed */ yytestcase(yyruleno==302);
case 322: /* expression ::= literal */ yytestcase(yyruleno==322);
case 323: /* expression ::= pseudo_column */ yytestcase(yyruleno==323);
case 324: /* expression ::= column_reference */ yytestcase(yyruleno==324);
case 325: /* expression ::= function_expression */ yytestcase(yyruleno==325);
case 326: /* expression ::= subquery */ yytestcase(yyruleno==326);
case 353: /* function_expression ::= literal_func */ yytestcase(yyruleno==353);
case 395: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==395);
case 399: /* boolean_primary ::= predicate */ yytestcase(yyruleno==399);
case 401: /* common_expression ::= expression */ yytestcase(yyruleno==401);
case 402: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==402);
case 405: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==405);
case 407: /* table_reference ::= table_primary */ yytestcase(yyruleno==407);
case 408: /* table_reference ::= joined_table */ yytestcase(yyruleno==408);
case 412: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==412);
case 462: /* query_expression_body ::= query_primary */ yytestcase(yyruleno==462);
case 465: /* query_primary ::= query_specification */ yytestcase(yyruleno==465);
case 323: /* expression ::= literal */ yytestcase(yyruleno==323);
case 324: /* expression ::= pseudo_column */ yytestcase(yyruleno==324);
case 325: /* expression ::= column_reference */ yytestcase(yyruleno==325);
case 326: /* expression ::= function_expression */ yytestcase(yyruleno==326);
case 327: /* expression ::= subquery */ yytestcase(yyruleno==327);
case 354: /* function_expression ::= literal_func */ yytestcase(yyruleno==354);
case 396: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==396);
case 400: /* boolean_primary ::= predicate */ yytestcase(yyruleno==400);
case 402: /* common_expression ::= expression */ yytestcase(yyruleno==402);
case 403: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==403);
case 406: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==406);
case 408: /* table_reference ::= table_primary */ yytestcase(yyruleno==408);
case 409: /* table_reference ::= joined_table */ yytestcase(yyruleno==409);
case 413: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==413);
case 463: /* query_expression_body ::= query_primary */ yytestcase(yyruleno==463);
case 466: /* query_primary ::= query_specification */ yytestcase(yyruleno==466);
{ yylhsminor.yy560 = yymsp[0].minor.yy560; }
yymsp[0].minor.yy560 = yylhsminor.yy560;
break;
......@@ -4301,9 +4263,9 @@ static YYACTIONTYPE yy_reduce(
break;
case 306: /* signed_literal ::= duration_literal */
case 308: /* signed_literal ::= literal_func */ yytestcase(yyruleno==308);
case 373: /* star_func_para ::= expression */ yytestcase(yyruleno==373);
case 428: /* select_item ::= common_expression */ yytestcase(yyruleno==428);
case 478: /* search_condition ::= common_expression */ yytestcase(yyruleno==478);
case 374: /* star_func_para ::= expression */ yytestcase(yyruleno==374);
case 429: /* select_item ::= common_expression */ yytestcase(yyruleno==429);
case 479: /* search_condition ::= common_expression */ yytestcase(yyruleno==479);
{ yylhsminor.yy560 = releaseRawExprNode(pCxt, yymsp[0].minor.yy560); }
yymsp[0].minor.yy560 = yylhsminor.yy560;
break;
......@@ -4311,26 +4273,30 @@ static YYACTIONTYPE yy_reduce(
{ yylhsminor.yy560 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy560 = yylhsminor.yy560;
break;
case 327: /* expression ::= NK_LP expression NK_RP */
case 400: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==400);
case 309: /* signed_literal ::= NK_QUESTION */
{ yylhsminor.yy560 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy560 = yylhsminor.yy560;
break;
case 328: /* expression ::= NK_LP expression NK_RP */
case 401: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==401);
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy560)); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 328: /* expression ::= NK_PLUS expression */
case 329: /* expression ::= NK_PLUS expression */
{
SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy560));
}
yymsp[-1].minor.yy560 = yylhsminor.yy560;
break;
case 329: /* expression ::= NK_MINUS expression */
case 330: /* expression ::= NK_MINUS expression */
{
SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy560), NULL));
}
yymsp[-1].minor.yy560 = yylhsminor.yy560;
break;
case 330: /* expression ::= expression NK_PLUS expression */
case 331: /* expression ::= expression NK_PLUS expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4338,7 +4304,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 331: /* expression ::= expression NK_MINUS expression */
case 332: /* expression ::= expression NK_MINUS expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4346,7 +4312,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 332: /* expression ::= expression NK_STAR expression */
case 333: /* expression ::= expression NK_STAR expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4354,7 +4320,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 333: /* expression ::= expression NK_SLASH expression */
case 334: /* expression ::= expression NK_SLASH expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4362,7 +4328,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 334: /* expression ::= expression NK_REM expression */
case 335: /* expression ::= expression NK_REM expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4370,14 +4336,14 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 335: /* expression ::= column_reference NK_ARROW NK_STRING */
case 336: /* expression ::= column_reference NK_ARROW NK_STRING */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
yylhsminor.yy560 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy560), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)));
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 336: /* expression ::= expression NK_BITAND expression */
case 337: /* expression ::= expression NK_BITAND expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4385,7 +4351,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 337: /* expression ::= expression NK_BITOR expression */
case 338: /* expression ::= expression NK_BITOR expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4393,53 +4359,53 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 340: /* column_reference ::= column_name */
case 341: /* column_reference ::= column_name */
{ yylhsminor.yy560 = createRawExprNode(pCxt, &yymsp[0].minor.yy533, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy533)); }
yymsp[0].minor.yy560 = yylhsminor.yy560;
break;
case 341: /* column_reference ::= table_name NK_DOT column_name */
case 342: /* column_reference ::= table_name NK_DOT column_name */
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy533, &yymsp[0].minor.yy533, createColumnNode(pCxt, &yymsp[-2].minor.yy533, &yymsp[0].minor.yy533)); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 342: /* pseudo_column ::= ROWTS */
case 343: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==343);
case 345: /* pseudo_column ::= QSTARTTS */ yytestcase(yyruleno==345);
case 346: /* pseudo_column ::= QENDTS */ yytestcase(yyruleno==346);
case 347: /* pseudo_column ::= WSTARTTS */ yytestcase(yyruleno==347);
case 348: /* pseudo_column ::= WENDTS */ yytestcase(yyruleno==348);
case 349: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==349);
case 355: /* literal_func ::= NOW */ yytestcase(yyruleno==355);
case 343: /* pseudo_column ::= ROWTS */
case 344: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==344);
case 346: /* pseudo_column ::= QSTARTTS */ yytestcase(yyruleno==346);
case 347: /* pseudo_column ::= QENDTS */ yytestcase(yyruleno==347);
case 348: /* pseudo_column ::= WSTARTTS */ yytestcase(yyruleno==348);
case 349: /* pseudo_column ::= WENDTS */ yytestcase(yyruleno==349);
case 350: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==350);
case 356: /* literal_func ::= NOW */ yytestcase(yyruleno==356);
{ yylhsminor.yy560 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); }
yymsp[0].minor.yy560 = yylhsminor.yy560;
break;
case 344: /* pseudo_column ::= table_name NK_DOT TBNAME */
case 345: /* pseudo_column ::= table_name NK_DOT TBNAME */
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy533, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy533)))); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 350: /* function_expression ::= function_name NK_LP expression_list NK_RP */
case 351: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==351);
case 351: /* function_expression ::= function_name NK_LP expression_list NK_RP */
case 352: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==352);
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy533, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy533, yymsp[-1].minor.yy712)); }
yymsp[-3].minor.yy560 = yylhsminor.yy560;
break;
case 352: /* function_expression ::= CAST NK_LP expression AS type_name NK_RP */
case 353: /* function_expression ::= CAST NK_LP expression AS type_name NK_RP */
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy560), yymsp[-1].minor.yy196)); }
yymsp[-5].minor.yy560 = yylhsminor.yy560;
break;
case 354: /* literal_func ::= noarg_func NK_LP NK_RP */
case 355: /* literal_func ::= noarg_func NK_LP NK_RP */
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy533, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy533, NULL)); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 369: /* star_func_para_list ::= NK_STAR */
case 370: /* star_func_para_list ::= NK_STAR */
{ yylhsminor.yy712 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); }
yymsp[0].minor.yy712 = yylhsminor.yy712;
break;
case 374: /* star_func_para ::= table_name NK_DOT NK_STAR */
case 431: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==431);
case 375: /* star_func_para ::= table_name NK_DOT NK_STAR */
case 432: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==432);
{ yylhsminor.yy560 = createColumnNode(pCxt, &yymsp[-2].minor.yy533, &yymsp[0].minor.yy0); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 375: /* predicate ::= expression compare_op expression */
case 380: /* predicate ::= expression in_op in_predicate_value */ yytestcase(yyruleno==380);
case 376: /* predicate ::= expression compare_op expression */
case 381: /* predicate ::= expression in_op in_predicate_value */ yytestcase(yyruleno==381);
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4447,7 +4413,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 376: /* predicate ::= expression BETWEEN expression AND expression */
case 377: /* predicate ::= expression BETWEEN expression AND expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4455,7 +4421,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-4].minor.yy560 = yylhsminor.yy560;
break;
case 377: /* predicate ::= expression NOT BETWEEN expression AND expression */
case 378: /* predicate ::= expression NOT BETWEEN expression AND expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4463,71 +4429,71 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-5].minor.yy560 = yylhsminor.yy560;
break;
case 378: /* predicate ::= expression IS NULL */
case 379: /* predicate ::= expression IS NULL */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
yylhsminor.yy560 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy560), NULL));
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 379: /* predicate ::= expression IS NOT NULL */
case 380: /* predicate ::= expression IS NOT NULL */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy560);
yylhsminor.yy560 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy560), NULL));
}
yymsp[-3].minor.yy560 = yylhsminor.yy560;
break;
case 381: /* compare_op ::= NK_LT */
case 382: /* compare_op ::= NK_LT */
{ yymsp[0].minor.yy128 = OP_TYPE_LOWER_THAN; }
break;
case 382: /* compare_op ::= NK_GT */
case 383: /* compare_op ::= NK_GT */
{ yymsp[0].minor.yy128 = OP_TYPE_GREATER_THAN; }
break;
case 383: /* compare_op ::= NK_LE */
case 384: /* compare_op ::= NK_LE */
{ yymsp[0].minor.yy128 = OP_TYPE_LOWER_EQUAL; }
break;
case 384: /* compare_op ::= NK_GE */
case 385: /* compare_op ::= NK_GE */
{ yymsp[0].minor.yy128 = OP_TYPE_GREATER_EQUAL; }
break;
case 385: /* compare_op ::= NK_NE */
case 386: /* compare_op ::= NK_NE */
{ yymsp[0].minor.yy128 = OP_TYPE_NOT_EQUAL; }
break;
case 386: /* compare_op ::= NK_EQ */
case 387: /* compare_op ::= NK_EQ */
{ yymsp[0].minor.yy128 = OP_TYPE_EQUAL; }
break;
case 387: /* compare_op ::= LIKE */
case 388: /* compare_op ::= LIKE */
{ yymsp[0].minor.yy128 = OP_TYPE_LIKE; }
break;
case 388: /* compare_op ::= NOT LIKE */
case 389: /* compare_op ::= NOT LIKE */
{ yymsp[-1].minor.yy128 = OP_TYPE_NOT_LIKE; }
break;
case 389: /* compare_op ::= MATCH */
case 390: /* compare_op ::= MATCH */
{ yymsp[0].minor.yy128 = OP_TYPE_MATCH; }
break;
case 390: /* compare_op ::= NMATCH */
case 391: /* compare_op ::= NMATCH */
{ yymsp[0].minor.yy128 = OP_TYPE_NMATCH; }
break;
case 391: /* compare_op ::= CONTAINS */
case 392: /* compare_op ::= CONTAINS */
{ yymsp[0].minor.yy128 = OP_TYPE_JSON_CONTAINS; }
break;
case 392: /* in_op ::= IN */
case 393: /* in_op ::= IN */
{ yymsp[0].minor.yy128 = OP_TYPE_IN; }
break;
case 393: /* in_op ::= NOT IN */
case 394: /* in_op ::= NOT IN */
{ yymsp[-1].minor.yy128 = OP_TYPE_NOT_IN; }
break;
case 394: /* in_predicate_value ::= NK_LP literal_list NK_RP */
case 395: /* in_predicate_value ::= NK_LP literal_list NK_RP */
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy712)); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 396: /* boolean_value_expression ::= NOT boolean_primary */
case 397: /* boolean_value_expression ::= NOT boolean_primary */
{
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy560), NULL));
}
yymsp[-1].minor.yy560 = yylhsminor.yy560;
break;
case 397: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */
case 398: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4535,7 +4501,7 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 398: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */
case 399: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */
{
SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy560);
SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy560);
......@@ -4543,47 +4509,47 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 406: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */
case 407: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */
{ yylhsminor.yy560 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy560, yymsp[0].minor.yy560, NULL); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 409: /* table_primary ::= table_name alias_opt */
case 410: /* table_primary ::= table_name alias_opt */
{ yylhsminor.yy560 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy533, &yymsp[0].minor.yy533); }
yymsp[-1].minor.yy560 = yylhsminor.yy560;
break;
case 410: /* table_primary ::= db_name NK_DOT table_name alias_opt */
case 411: /* table_primary ::= db_name NK_DOT table_name alias_opt */
{ yylhsminor.yy560 = createRealTableNode(pCxt, &yymsp[-3].minor.yy533, &yymsp[-1].minor.yy533, &yymsp[0].minor.yy533); }
yymsp[-3].minor.yy560 = yylhsminor.yy560;
break;
case 411: /* table_primary ::= subquery alias_opt */
case 412: /* table_primary ::= subquery alias_opt */
{ yylhsminor.yy560 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy560), &yymsp[0].minor.yy533); }
yymsp[-1].minor.yy560 = yylhsminor.yy560;
break;
case 413: /* alias_opt ::= */
case 414: /* alias_opt ::= */
{ yymsp[1].minor.yy533 = nil_token; }
break;
case 414: /* alias_opt ::= table_alias */
case 415: /* alias_opt ::= table_alias */
{ yylhsminor.yy533 = yymsp[0].minor.yy533; }
yymsp[0].minor.yy533 = yylhsminor.yy533;
break;
case 415: /* alias_opt ::= AS table_alias */
case 416: /* alias_opt ::= AS table_alias */
{ yymsp[-1].minor.yy533 = yymsp[0].minor.yy533; }
break;
case 416: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */
case 417: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==417);
case 417: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */
case 418: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==418);
{ yymsp[-2].minor.yy560 = yymsp[-1].minor.yy560; }
break;
case 418: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */
case 419: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */
{ yylhsminor.yy560 = createJoinTableNode(pCxt, yymsp[-4].minor.yy36, yymsp[-5].minor.yy560, yymsp[-2].minor.yy560, yymsp[0].minor.yy560); }
yymsp[-5].minor.yy560 = yylhsminor.yy560;
break;
case 419: /* join_type ::= */
case 420: /* join_type ::= */
{ yymsp[1].minor.yy36 = JOIN_TYPE_INNER; }
break;
case 420: /* join_type ::= INNER */
case 421: /* join_type ::= INNER */
{ yymsp[0].minor.yy36 = JOIN_TYPE_INNER; }
break;
case 421: /* query_specification ::= SELECT set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */
case 422: /* 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.yy560 = createSelectStmt(pCxt, yymsp[-10].minor.yy173, yymsp[-9].minor.yy712, yymsp[-8].minor.yy560);
yymsp[-11].minor.yy560 = addWhereClause(pCxt, yymsp[-11].minor.yy560, yymsp[-7].minor.yy560);
......@@ -4596,75 +4562,75 @@ static YYACTIONTYPE yy_reduce(
yymsp[-11].minor.yy560 = addFillClause(pCxt, yymsp[-11].minor.yy560, yymsp[-3].minor.yy560);
}
break;
case 424: /* set_quantifier_opt ::= ALL */
case 425: /* set_quantifier_opt ::= ALL */
{ yymsp[0].minor.yy173 = false; }
break;
case 427: /* select_item ::= NK_STAR */
case 428: /* select_item ::= NK_STAR */
{ yylhsminor.yy560 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy560 = yylhsminor.yy560;
break;
case 429: /* select_item ::= common_expression column_alias */
case 430: /* select_item ::= common_expression column_alias */
{ yylhsminor.yy560 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy560), &yymsp[0].minor.yy533); }
yymsp[-1].minor.yy560 = yylhsminor.yy560;
break;
case 430: /* select_item ::= common_expression AS column_alias */
case 431: /* select_item ::= common_expression AS column_alias */
{ yylhsminor.yy560 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy560), &yymsp[0].minor.yy533); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 435: /* partition_by_clause_opt ::= PARTITION BY expression_list */
case 452: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==452);
case 468: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==468);
case 436: /* partition_by_clause_opt ::= PARTITION BY expression_list */
case 453: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==453);
case 469: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==469);
{ yymsp[-2].minor.yy712 = yymsp[0].minor.yy712; }
break;
case 437: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */
case 438: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */
{ yymsp[-5].minor.yy560 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy560), releaseRawExprNode(pCxt, yymsp[-1].minor.yy560)); }
break;
case 438: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */
case 439: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expression NK_RP */
{ yymsp[-3].minor.yy560 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy560)); }
break;
case 439: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */
case 440: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */
{ yymsp[-5].minor.yy560 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy560), NULL, yymsp[-1].minor.yy560, yymsp[0].minor.yy560); }
break;
case 440: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */
case 441: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */
{ yymsp[-7].minor.yy560 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy560), releaseRawExprNode(pCxt, yymsp[-3].minor.yy560), yymsp[-1].minor.yy560, yymsp[0].minor.yy560); }
break;
case 442: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */
case 460: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==460);
case 443: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */
case 461: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==461);
{ yymsp[-3].minor.yy560 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy560); }
break;
case 444: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */
case 445: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */
{ yymsp[-3].minor.yy560 = createFillNode(pCxt, yymsp[-1].minor.yy18, NULL); }
break;
case 445: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */
case 446: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */
{ yymsp[-5].minor.yy560 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy712)); }
break;
case 446: /* fill_mode ::= NONE */
case 447: /* fill_mode ::= NONE */
{ yymsp[0].minor.yy18 = FILL_MODE_NONE; }
break;
case 447: /* fill_mode ::= PREV */
case 448: /* fill_mode ::= PREV */
{ yymsp[0].minor.yy18 = FILL_MODE_PREV; }
break;
case 448: /* fill_mode ::= NULL */
case 449: /* fill_mode ::= NULL */
{ yymsp[0].minor.yy18 = FILL_MODE_NULL; }
break;
case 449: /* fill_mode ::= LINEAR */
case 450: /* fill_mode ::= LINEAR */
{ yymsp[0].minor.yy18 = FILL_MODE_LINEAR; }
break;
case 450: /* fill_mode ::= NEXT */
case 451: /* fill_mode ::= NEXT */
{ yymsp[0].minor.yy18 = FILL_MODE_NEXT; }
break;
case 453: /* group_by_list ::= expression */
case 454: /* group_by_list ::= expression */
{ yylhsminor.yy712 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy560))); }
yymsp[0].minor.yy712 = yylhsminor.yy712;
break;
case 454: /* group_by_list ::= group_by_list NK_COMMA expression */
case 455: /* group_by_list ::= group_by_list NK_COMMA expression */
{ yylhsminor.yy712 = addNodeToList(pCxt, yymsp[-2].minor.yy712, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy560))); }
yymsp[-2].minor.yy712 = yylhsminor.yy712;
break;
case 458: /* range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */
case 459: /* range_opt ::= RANGE NK_LP expression NK_COMMA expression NK_RP */
{ yymsp[-5].minor.yy560 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy560), releaseRawExprNode(pCxt, yymsp[-1].minor.yy560)); }
break;
case 461: /* query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */
case 462: /* query_expression ::= query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt */
{
yylhsminor.yy560 = addOrderByClause(pCxt, yymsp[-3].minor.yy560, yymsp[-2].minor.yy712);
yylhsminor.yy560 = addSlimitClause(pCxt, yylhsminor.yy560, yymsp[-1].minor.yy560);
......@@ -4672,57 +4638,57 @@ static YYACTIONTYPE yy_reduce(
}
yymsp[-3].minor.yy560 = yylhsminor.yy560;
break;
case 463: /* query_expression_body ::= query_expression_body UNION ALL query_expression_body */
case 464: /* query_expression_body ::= query_expression_body UNION ALL query_expression_body */
{ yylhsminor.yy560 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy560, yymsp[0].minor.yy560); }
yymsp[-3].minor.yy560 = yylhsminor.yy560;
break;
case 464: /* query_expression_body ::= query_expression_body UNION query_expression_body */
case 465: /* query_expression_body ::= query_expression_body UNION query_expression_body */
{ yylhsminor.yy560 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy560, yymsp[0].minor.yy560); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 466: /* query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */
case 467: /* query_primary ::= NK_LP query_expression_body order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP */
{
yymsp[-5].minor.yy560 = addOrderByClause(pCxt, yymsp[-4].minor.yy560, yymsp[-3].minor.yy712);
yymsp[-5].minor.yy560 = addSlimitClause(pCxt, yymsp[-5].minor.yy560, yymsp[-2].minor.yy560);
yymsp[-5].minor.yy560 = addLimitClause(pCxt, yymsp[-5].minor.yy560, yymsp[-1].minor.yy560);
}
break;
case 470: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */
case 474: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==474);
case 471: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */
case 475: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==475);
{ yymsp[-1].minor.yy560 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); }
break;
case 471: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */
case 475: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==475);
case 472: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */
case 476: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==476);
{ yymsp[-3].minor.yy560 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); }
break;
case 472: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */
case 476: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==476);
case 473: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */
case 477: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==477);
{ yymsp[-3].minor.yy560 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); }
break;
case 477: /* subquery ::= NK_LP query_expression NK_RP */
case 478: /* subquery ::= NK_LP query_expression NK_RP */
{ yylhsminor.yy560 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy560); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 481: /* sort_specification ::= expression ordering_specification_opt null_ordering_opt */
case 482: /* sort_specification ::= expression ordering_specification_opt null_ordering_opt */
{ yylhsminor.yy560 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy560), yymsp[-1].minor.yy218, yymsp[0].minor.yy109); }
yymsp[-2].minor.yy560 = yylhsminor.yy560;
break;
case 482: /* ordering_specification_opt ::= */
case 483: /* ordering_specification_opt ::= */
{ yymsp[1].minor.yy218 = ORDER_ASC; }
break;
case 483: /* ordering_specification_opt ::= ASC */
case 484: /* ordering_specification_opt ::= ASC */
{ yymsp[0].minor.yy218 = ORDER_ASC; }
break;
case 484: /* ordering_specification_opt ::= DESC */
case 485: /* ordering_specification_opt ::= DESC */
{ yymsp[0].minor.yy218 = ORDER_DESC; }
break;
case 485: /* null_ordering_opt ::= */
case 486: /* null_ordering_opt ::= */
{ yymsp[1].minor.yy109 = NULL_ORDER_DEFAULT; }
break;
case 486: /* null_ordering_opt ::= NULLS FIRST */
case 487: /* null_ordering_opt ::= NULLS FIRST */
{ yymsp[-1].minor.yy109 = NULL_ORDER_FIRST; }
break;
case 487: /* null_ordering_opt ::= NULLS LAST */
case 488: /* null_ordering_opt ::= NULLS LAST */
{ yymsp[-1].minor.yy109 = NULL_ORDER_LAST; }
break;
default:
......
......@@ -316,34 +316,34 @@ typedef struct SQWorkerMgmt {
#define QW_LOCK(type, _lock) \
do { \
if (QW_READ == (type)) { \
assert(atomic_load_64((_lock)) >= 0); \
QW_LOCK_DEBUG("QW RLOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
QW_LOCK_DEBUG("QW RLOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosRLockLatch(_lock); \
QW_LOCK_DEBUG("QW RLOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) > 0); \
QW_LOCK_DEBUG("QW RLOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) > 0); \
} else { \
assert(atomic_load_64((_lock)) >= 0); \
QW_LOCK_DEBUG("QW WLOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
QW_LOCK_DEBUG("QW WLOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosWLockLatch(_lock); \
QW_LOCK_DEBUG("QW WLOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
QW_LOCK_DEBUG("QW WLOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
} \
} while (0)
#define QW_UNLOCK(type, _lock) \
do { \
if (QW_READ == (type)) { \
assert(atomic_load_64((_lock)) > 0); \
QW_LOCK_DEBUG("QW RULOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) > 0); \
QW_LOCK_DEBUG("QW RULOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosRUnLockLatch(_lock); \
QW_LOCK_DEBUG("QW RULOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) >= 0); \
QW_LOCK_DEBUG("QW RULOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
} else { \
assert(atomic_load_64((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
QW_LOCK_DEBUG("QW WULOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) == TD_RWLATCH_WRITE_FLAG_COPY); \
QW_LOCK_DEBUG("QW WULOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosWUnLockLatch(_lock); \
QW_LOCK_DEBUG("QW WULOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) >= 0); \
QW_LOCK_DEBUG("QW WULOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
} \
} while (0)
......
......@@ -367,33 +367,33 @@ extern SSchedulerMgmt schMgmt;
#define SCH_LOCK(type, _lock) do { \
if (SCH_READ == (type)) { \
assert(atomic_load_64(_lock) >= 0); \
SCH_LOCK_DEBUG("SCH RLOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32(_lock) >= 0); \
SCH_LOCK_DEBUG("SCH RLOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosRLockLatch(_lock); \
SCH_LOCK_DEBUG("SCH RLOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64(_lock) > 0); \
SCH_LOCK_DEBUG("SCH RLOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32(_lock) > 0); \
} else { \
assert(atomic_load_64(_lock) >= 0); \
SCH_LOCK_DEBUG("SCH WLOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32(_lock) >= 0); \
SCH_LOCK_DEBUG("SCH WLOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosWLockLatch(_lock); \
SCH_LOCK_DEBUG("SCH WLOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64(_lock) & TD_RWLATCH_WRITE_FLAG_COPY); \
SCH_LOCK_DEBUG("SCH WLOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32(_lock) == TD_RWLATCH_WRITE_FLAG_COPY); \
} \
} while (0)
#define SCH_UNLOCK(type, _lock) do { \
if (SCH_READ == (type)) { \
assert(atomic_load_64((_lock)) > 0); \
SCH_LOCK_DEBUG("SCH RULOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) > 0); \
SCH_LOCK_DEBUG("SCH RULOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosRUnLockLatch(_lock); \
SCH_LOCK_DEBUG("SCH RULOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) >= 0); \
SCH_LOCK_DEBUG("SCH RULOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
} else { \
assert(atomic_load_64((_lock)) & TD_RWLATCH_WRITE_FLAG_COPY); \
SCH_LOCK_DEBUG("SCH WULOCK%p:%" PRIx64 ", %s:%d B", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) & TD_RWLATCH_WRITE_FLAG_COPY); \
SCH_LOCK_DEBUG("SCH WULOCK%p:%d, %s:%d B", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
taosWUnLockLatch(_lock); \
SCH_LOCK_DEBUG("SCH WULOCK%p:%" PRIx64 ", %s:%d E", (_lock), atomic_load_64(_lock), __FILE__, __LINE__); \
assert(atomic_load_64((_lock)) >= 0); \
SCH_LOCK_DEBUG("SCH WULOCK%p:%d, %s:%d E", (_lock), atomic_load_32(_lock), __FILE__, __LINE__); \
assert(atomic_load_32((_lock)) >= 0); \
} \
} while (0)
......
......@@ -58,7 +58,6 @@ int32_t schInitTask(SSchJob *pJob, SSchTask *pTask, SSubplan *pPlan, SSchLevel *
if (NULL == pTask->execNodes || NULL == pTask->profile.execTime) {
SCH_ERR_JRET(TSDB_CODE_QRY_OUT_OF_MEMORY);
}
taosInitReentrantRWLatch(&pTask->lock);
SCH_SET_TASK_STATUS(pTask, JOB_TASK_STATUS_INIT);
......@@ -260,7 +259,7 @@ int32_t schProcessOnTaskSuccess(SSchJob *pJob, SSchTask *pTask) {
SSchTask *parent = *(SSchTask **)taosArrayGet(pTask->parents, i);
int32_t readyNum = atomic_add_fetch_32(&parent->childReady, 1);
SCH_LOCK_TASK(parent);
SCH_LOCK(SCH_WRITE, &parent->planLock);
SDownstreamSourceNode source = {
.type = QUERY_NODE_DOWNSTREAM_SOURCE,
.taskId = pTask->taskId,
......@@ -270,7 +269,7 @@ int32_t schProcessOnTaskSuccess(SSchJob *pJob, SSchTask *pTask) {
.fetchMsgType = SCH_FETCH_TYPE(pTask),
};
qSetSubplanExecutionNode(parent->plan, pTask->plan->id.groupId, &source);
SCH_UNLOCK_TASK(parent);
SCH_UNLOCK(SCH_WRITE, &parent->planLock);
if (SCH_TASK_READY_FOR_LAUNCH(readyNum, parent)) {
SCH_TASK_DLOG("all %d children task done, start to launch parent task 0x%" PRIx64, readyNum, parent->taskId);
......
......@@ -30,7 +30,7 @@ extern "C" {
#define TIMER_MAX_MS 0x7FFFFFFF
#define ENV_TICK_TIMER_MS 1000
#define PING_TIMER_MS 1000
#define PING_TIMER_MS 5000
#define ELECT_TIMER_MS_MIN 1300
#define ELECT_TIMER_MS_MAX (ELECT_TIMER_MS_MIN * 2)
#define ELECT_TIMER_MS_RANGE (ELECT_TIMER_MS_MAX - ELECT_TIMER_MS_MIN)
......
......@@ -273,16 +273,8 @@ int32_t syncLeaderTransfer(int64_t rid) {
}
ASSERT(rid == pSyncNode->rid);
if (pSyncNode->peersNum == 0) {
taosReleaseRef(tsNodeRefId, pSyncNode->rid);
terrno = TSDB_CODE_SYN_INTERNAL_ERROR;
return -1;
}
SNodeInfo newLeader = (pSyncNode->peersNodeInfo)[0];
int32_t ret = syncNodeLeaderTransfer(pSyncNode);
taosReleaseRef(tsNodeRefId, pSyncNode->rid);
int32_t ret = syncLeaderTransferTo(rid, newLeader);
return ret;
}
......@@ -293,25 +285,8 @@ int32_t syncLeaderTransferTo(int64_t rid, SNodeInfo newLeader) {
return -1;
}
ASSERT(rid == pSyncNode->rid);
int32_t ret = 0;
if (pSyncNode->replicaNum == 1) {
sError("only one replica, cannot drop leader");
taosReleaseRef(tsNodeRefId, pSyncNode->rid);
terrno = TSDB_CODE_SYN_ONE_REPLICA;
return -1;
}
SyncLeaderTransfer* pMsg = syncLeaderTransferBuild(pSyncNode->vgId);
pMsg->newLeaderId.addr = syncUtilAddr2U64(newLeader.nodeFqdn, newLeader.nodePort);
pMsg->newLeaderId.vgId = pSyncNode->vgId;
pMsg->newNodeInfo = newLeader;
ASSERT(pMsg != NULL);
SRpcMsg rpcMsg = {0};
syncLeaderTransfer2RpcMsg(pMsg, &rpcMsg);
syncLeaderTransferDestroy(pMsg);
ret = syncNodePropose(pSyncNode, &rpcMsg, false);
int32_t ret = syncNodeLeaderTransferTo(pSyncNode, newLeader);
taosReleaseRef(tsNodeRefId, pSyncNode->rid);
return ret;
}
......@@ -337,6 +312,12 @@ int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader) {
return -1;
}
do {
char logBuf[128];
snprintf(logBuf, sizeof(logBuf), "begin leader transfer to %s:%u", newLeader.nodeFqdn, newLeader.nodePort);
syncNodeEventLog(pSyncNode, logBuf);
} while (0);
SyncLeaderTransfer* pMsg = syncLeaderTransferBuild(pSyncNode->vgId);
pMsg->newLeaderId.addr = syncUtilAddr2U64(newLeader.nodeFqdn, newLeader.nodePort);
pMsg->newLeaderId.vgId = pSyncNode->vgId;
......@@ -1118,19 +1099,13 @@ void syncNodeStart(SSyncNode* pSyncNode) {
// Raft 3.6.2 Committing entries from previous terms
syncNodeAppendNoop(pSyncNode);
syncMaybeAdvanceCommitIndex(pSyncNode);
return;
} else {
syncNodeBecomeFollower(pSyncNode, "first start");
}
syncNodeBecomeFollower(pSyncNode, "first start");
// int32_t ret = 0;
// ret = syncNodeStartPingTimer(pSyncNode);
// ASSERT(ret == 0);
if (gRaftDetailLog) {
syncNodeLog2("==state change become leader immediately==", pSyncNode);
}
int32_t ret = 0;
ret = syncNodeStartPingTimer(pSyncNode);
ASSERT(ret == 0);
}
void syncNodeStartStandBy(SSyncNode* pSyncNode) {
......@@ -1147,8 +1122,6 @@ void syncNodeStartStandBy(SSyncNode* pSyncNode) {
void syncNodeClose(SSyncNode* pSyncNode) {
syncNodeEventLog(pSyncNode, "sync close");
// leader transfer
int32_t ret;
ASSERT(pSyncNode != NULL);
......@@ -1183,14 +1156,6 @@ void syncNodeClose(SSyncNode* pSyncNode) {
pSyncNode->pNewNodeReceiver = NULL;
}
/*
if (pSyncNode->pSnapshot != NULL) {
taosMemoryFree(pSyncNode->pSnapshot);
}
*/
// tsem_destroy(&pSyncNode->restoreSem);
// free memory in syncFreeNode
// taosMemoryFree(pSyncNode);
}
......@@ -1255,7 +1220,7 @@ int32_t syncNodeStartPingTimer(SSyncNode* pSyncNode) {
&pSyncNode->pPingTimer);
atomic_store_64(&pSyncNode->pingTimerLogicClock, pSyncNode->pingTimerLogicClockUser);
} else {
sError("sync env is stop, syncNodeStartPingTimer");
sError("vgId:%d, start ping timer error, sync env is stop", pSyncNode->vgId);
}
return ret;
}
......@@ -1276,7 +1241,7 @@ int32_t syncNodeStartElectTimer(SSyncNode* pSyncNode, int32_t ms) {
&pSyncNode->pElectTimer);
atomic_store_64(&pSyncNode->electTimerLogicClock, pSyncNode->electTimerLogicClockUser);
} else {
sError("sync env is stop, syncNodeStartElectTimer");
sError("vgId:%d, start elect timer error, sync env is stop", pSyncNode->vgId);
}
return ret;
}
......@@ -1316,7 +1281,7 @@ int32_t syncNodeStartHeartbeatTimer(SSyncNode* pSyncNode) {
&pSyncNode->pHeartbeatTimer);
atomic_store_64(&pSyncNode->heartbeatTimerLogicClock, pSyncNode->heartbeatTimerLogicClockUser);
} else {
sError("sync env is stop, syncNodeStartHeartbeatTimer");
sError("vgId:%d, start heartbeat timer error, sync env is stop", pSyncNode->vgId);
}
return ret;
}
......@@ -2643,7 +2608,7 @@ const char* syncStr(ESyncState state) {
static int32_t syncDoLeaderTransfer(SSyncNode* ths, SRpcMsg* pRpcMsg, SSyncRaftEntry* pEntry) {
SyncLeaderTransfer* pSyncLeaderTransfer = syncLeaderTransferFromRpcMsg2(pRpcMsg);
syncNodeEventLog(ths, "begin leader transfer");
syncNodeEventLog(ths, "do leader transfer");
bool sameId = syncUtilSameId(&(pSyncLeaderTransfer->newLeaderId), &(ths->myRaftId));
bool sameNodeInfo = strcmp(pSyncLeaderTransfer->newNodeInfo.nodeFqdn, ths->myNodeInfo.nodeFqdn) == 0 &&
......
......@@ -17,6 +17,11 @@
#include "syncElection.h"
#include "syncReplication.h"
int32_t syncNodeTimerRoutine(SSyncNode* ths) {
syncNodeEventLog(ths, "timer routines ... ");
return 0;
}
int32_t syncNodeOnTimeoutCb(SSyncNode* ths, SyncTimeout* pMsg) {
int32_t ret = 0;
syncTimeoutLog2("==syncNodeOnTimeoutCb==", pMsg);
......@@ -24,8 +29,11 @@ int32_t syncNodeOnTimeoutCb(SSyncNode* ths, SyncTimeout* pMsg) {
if (pMsg->timeoutType == SYNC_TIMEOUT_PING) {
if (atomic_load_64(&ths->pingTimerLogicClockUser) <= pMsg->logicClock) {
++(ths->pingTimerCounter);
// syncNodePingAll(ths);
syncNodePingPeers(ths);
// syncNodePingPeers(ths);
syncNodeTimerRoutine(ths);
}
} else if (pMsg->timeoutType == SYNC_TIMEOUT_ELECTION) {
......@@ -40,7 +48,7 @@ int32_t syncNodeOnTimeoutCb(SSyncNode* ths, SyncTimeout* pMsg) {
syncNodeReplicate(ths);
}
} else {
sTrace("unknown timeoutType:%d", pMsg->timeoutType);
sError("vgId:%d, unknown timeout-type:%d", ths->vgId, pMsg->timeoutType);
}
return ret;
......
......@@ -17,10 +17,8 @@
#include "tlockfree.h"
#define TD_RWLATCH_WRITE_FLAG 0x40000000
#define TD_RWLATCH_REENTRANT_FLAG 0x4000000000000000
void taosInitRWLatch(SRWLatch *pLatch) { *pLatch = 0; }
void taosInitReentrantRWLatch(SRWLatch *pLatch) { *pLatch = TD_RWLATCH_REENTRANT_FLAG; }
void taosWLockLatch(SRWLatch *pLatch) {
SRWLatch oLatch, nLatch;
......@@ -28,14 +26,8 @@ void taosWLockLatch(SRWLatch *pLatch) {
// Set write flag
while (1) {
oLatch = atomic_load_64(pLatch);
oLatch = atomic_load_32(pLatch);
if (oLatch & TD_RWLATCH_WRITE_FLAG) {
if (oLatch & TD_RWLATCH_REENTRANT_FLAG) {
nLatch = (((oLatch >> 32) + 1) << 32) | (oLatch & 0xFFFFFFFF);
if (atomic_val_compare_exchange_64(pLatch, oLatch, nLatch) == oLatch) break;
continue;
}
nLoops++;
if (nLoops > 1000) {
sched_yield();
......@@ -45,14 +37,14 @@ void taosWLockLatch(SRWLatch *pLatch) {
}
nLatch = oLatch | TD_RWLATCH_WRITE_FLAG;
if (atomic_val_compare_exchange_64(pLatch, oLatch, nLatch) == oLatch) break;
if (atomic_val_compare_exchange_32(pLatch, oLatch, nLatch) == oLatch) break;
}
// wait for all reads end
nLoops = 0;
while (1) {
oLatch = atomic_load_64(pLatch);
if (0 == (oLatch & 0xFFFFFFF)) break;
oLatch = atomic_load_32(pLatch);
if (oLatch == TD_RWLATCH_WRITE_FLAG) break;
nLoops++;
if (nLoops > 1000) {
sched_yield();
......@@ -64,47 +56,27 @@ void taosWLockLatch(SRWLatch *pLatch) {
// no reentrant
int32_t taosWTryLockLatch(SRWLatch *pLatch) {
SRWLatch oLatch, nLatch;
oLatch = atomic_load_64(pLatch);
if (oLatch << 2) {
oLatch = atomic_load_32(pLatch);
if (oLatch) {
return -1;
}
nLatch = oLatch | TD_RWLATCH_WRITE_FLAG;
if (atomic_val_compare_exchange_64(pLatch, oLatch, nLatch) == oLatch) {
if (atomic_val_compare_exchange_32(pLatch, oLatch, nLatch) == oLatch) {
return 0;
}
return -1;
}
void taosWUnLockLatch(SRWLatch *pLatch) {
SRWLatch oLatch, nLatch, wLatch;
while (1) {
oLatch = atomic_load_64(pLatch);
if (0 == (oLatch & TD_RWLATCH_REENTRANT_FLAG)) {
atomic_store_64(pLatch, 0);
break;
}
wLatch = ((oLatch << 2) >> 34);
if (wLatch) {
nLatch = ((--wLatch) << 32) | TD_RWLATCH_REENTRANT_FLAG | TD_RWLATCH_WRITE_FLAG;
} else {
nLatch = TD_RWLATCH_REENTRANT_FLAG;
}
if (atomic_val_compare_exchange_64(pLatch, oLatch, nLatch) == oLatch) break;
}
}
void taosWUnLockLatch(SRWLatch *pLatch) { atomic_store_32(pLatch, 0); }
void taosRLockLatch(SRWLatch *pLatch) {
SRWLatch oLatch, nLatch;
int32_t nLoops = 0;
while (1) {
oLatch = atomic_load_64(pLatch);
oLatch = atomic_load_32(pLatch);
if (oLatch & TD_RWLATCH_WRITE_FLAG) {
nLoops++;
if (nLoops > 1000) {
......@@ -115,8 +87,8 @@ void taosRLockLatch(SRWLatch *pLatch) {
}
nLatch = oLatch + 1;
if (atomic_val_compare_exchange_64(pLatch, oLatch, nLatch) == oLatch) break;
if (atomic_val_compare_exchange_32(pLatch, oLatch, nLatch) == oLatch) break;
}
}
void taosRUnLockLatch(SRWLatch *pLatch) { atomic_fetch_sub_64(pLatch, 1); }
void taosRUnLockLatch(SRWLatch *pLatch) { atomic_fetch_sub_32(pLatch, 1); }
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode2 -i 2
system sh/deploy.sh -n dnode3 -i 3
system sh/deploy.sh -n dnode4 -i 4
system sh/cfg.sh -n dnode1 -c supportVnodes -v 0
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode2 -s start
system sh/exec.sh -n dnode3 -s start
system sh/exec.sh -n dnode4 -s start
$loop_cnt = 0
check_dnode_ready:
$loop_cnt = $loop_cnt + 1
sleep 200
if $loop_cnt == 10 then
print ====> dnode not ready!
return -1
endi
sql show dnodes
print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6]
print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6]
if $data[0][0] != 1 then
return -1
endi
if $data[0][4] != ready then
goto check_dnode_ready
endi
sql connect
sql create dnode $hostname port 7200
sql create dnode $hostname port 7300
sql create dnode $hostname port 7400
$loop_cnt = 0
check_dnode_ready_1:
$loop_cnt = $loop_cnt + 1
sleep 200
if $loop_cnt == 10 then
print ====> dnodes not ready!
return -1
endi
sql show dnodes
print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6]
print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6]
if $data[0][4] != ready then
goto check_dnode_ready_1
endi
if $data[1][4] != ready then
goto check_dnode_ready_1
endi
if $data[2][4] != ready then
goto check_dnode_ready_1
endi
if $data[3][4] != ready then
goto check_dnode_ready_1
endi
$replica = 3
$vgroups = 1
print ============= create database
sql create database db replica $replica vgroups $vgroups
$loop_cnt = 0
check_db_ready:
$loop_cnt = $loop_cnt + 1
sleep 200
if $loop_cnt == 100 then
print ====> db not ready!
return -1
endi
sql show databases
print ===> rows: $rows
print $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] $data[2][7] $data[2][8] $data[2][9] $data[2][6] $data[2][11] $data[2][12] $data[2][13] $data[2][14] $data[2][15] $data[2][16] $data[2][17] $data[2][18] $data[2][19]
if $rows != 3 then
return -1
endi
if $data[2][19] != ready then
goto check_db_ready
endi
sql use db
$loop_cnt = 0
check_vg_ready:
$loop_cnt = $loop_cnt + 1
sleep 200
if $loop_cnt == 300 then
print ====> vgroups not ready!
return -1
endi
sql show vgroups
print ===> rows: $rows
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[0][10] $data[0][11]
if $rows != $vgroups then
return -1
endi
if $data[0][4] == leader then
if $data[0][6] == follower then
if $data[0][8] == follower then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
endi
endi
elif $data[0][6] == leader then
if $data[0][4] == follower then
if $data[0][8] == follower then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
endi
endi
elif $data[0][8] == leader then
if $data[0][4] == follower then
if $data[0][6] == follower then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
endi
endi
else
goto check_vg_ready
endi
vg_ready:
print ====> create stable/child table
sql create table stb (ts timestamp, c1 int, c2 float, c3 double) tags (t1 int)
sql show stables
if $rows != 1 then
return -1
endi
sql create table ct1 using stb tags(1000)
print ===> write 100 records
$N = 100
$count = 0
while $count < $N
$ms = 1591200000000 + $count
sql insert into ct1 values( $ms , $count , 2.1, 3.1)
$count = $count + 1
endw
#sql flush database db;
sleep 3000
print ===> stop dnode1 dnode2 dnode3 dnode4
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT
system sh/exec.sh -n dnode3 -s stop -x SIGINT
system sh/exec.sh -n dnode4 -s stop -x SIGINT
########################################################
print ===> start dnode1 dnode2 dnode3 dnode4
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode2 -s start
system sh/exec.sh -n dnode3 -s start
system sh/exec.sh -n dnode4 -s start
sleep 3000
print =============== query data
sql connect
sql use db
sql select * from ct1
print rows: $rows
print $data00 $data01 $data02
if $rows != 100 then
return -1
endi
#system sh/exec.sh -n dnode1 -s stop -x SIGINT
#system sh/exec.sh -n dnode2 -s stop -x SIGINT
#system sh/exec.sh -n dnode3 -s stop -x SIGINT
#system sh/exec.sh -n dnode4 -s stop -x SIGINT
#########################################################
# author : wenzhouwww
from util.log import *
from util.sql import *
from util.cases import *
class TDTestCase:
def init(self, conn, logSql):
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor())
self.row_nums = 10
self.tb_nums = 10
self.ts = 1537146000000
def prepare_datas(self, stb_name , tb_nums , row_nums ):
tdSql.execute(" use db ")
tdSql.execute(f" create stable {stb_name} (ts timestamp , c1 int , c2 bigint , c3 float , c4 double , c5 smallint , c6 tinyint , c7 bool , c8 binary(36) , c9 nchar(36) , uc1 int unsigned,\
uc2 bigint unsigned ,uc3 smallint unsigned , uc4 tinyint unsigned ) tags(t1 timestamp , t2 int , t3 bigint , t4 float , t5 double , t6 smallint , t7 tinyint , t8 bool , t9 binary(36)\
, t10 nchar(36) , t11 int unsigned , t12 bigint unsigned ,t13 smallint unsigned , t14 tinyint unsigned ) ")
for i in range(tb_nums):
tbname = f"sub_{stb_name}_{i}"
ts = self.ts + i*10000
tdSql.execute(f"create table {tbname} using {stb_name} tags ({ts} , {i} , {i}*10 ,{i}*1.0,{i}*1.0 , 1 , 2, 'true', 'binary_{i}' ,'nchar_{i}',{i},{i},10,20 )")
for row in range(row_nums):
ts = self.ts + row*1000
tdSql.execute(f"insert into {tbname} values({ts} , {row} , {row} , {row} , {row} , 1 , 2 , 'true' , 'binary_{row}' , 'nchar_{row}' , {row} , {row} , 1 ,2 )")
for null in range(5):
ts = self.ts + row_nums*1000 + null*1000
tdSql.execute(f"insert into {tbname} values({ts} , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL )")
def basic_query(self):
tdSql.query("select count(*) from stb")
tdSql.checkData(0,0,(self.row_nums + 5 )*self.tb_nums)
tdSql.query("select count(c1) from stb")
tdSql.checkData(0,0,(self.row_nums )*self.tb_nums)
tdSql.query(" select tbname , count(*) from stb partition by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.query(" select count(c1) from stb group by t1 order by t1 ")
tdSql.checkRows(self.tb_nums)
tdSql.error(" select count(c1) from stb group by c1 order by t1 ")
tdSql.error(" select count(t1) from stb group by c1 order by t1 ")
tdSql.query(" select count(c1) from stb group by tbname order by tbname ")
tdSql.checkRows(self.tb_nums)
# bug need fix
# tdSql.query(" select count(t1) from stb group by t2 order by t2 ")
# tdSql.checkRows(self.tb_nums)
tdSql.query(" select count(c1) from stb group by c1 order by c1 ")
tdSql.checkRows(self.row_nums+1)
tdSql.query(" select c1 , count(c1) from stb group by c1 order by c1 ")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select count(c1) from stb group by abs(c1) order by abs(c1)")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select abs(c1+c3), count(c1+c3) from stb group by abs(c1+c3) order by abs(c1+c3)")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select count(c1+c3)+max(c2) ,abs(c1) from stb group by abs(c1) order by abs(c1)")
tdSql.checkRows(self.row_nums+1)
tdSql.error("select count(c1+c3)+max(c2) ,abs(c1) ,abs(t1) from stb group by abs(c1) order by abs(t1)+c2")
tdSql.error("select count(c1+c3)+max(c2) ,abs(c1) from stb group by abs(c1) order by abs(c1)+c2")
tdSql.query("select abs(c1+c3)+abs(c2) , count(c1+c3)+count(c2) from stb group by abs(c1+c3)+abs(c2) order by abs(c1+c3)+abs(c2)")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select count(c1) , count(t2) from stb where abs(c1+t2)=1 partition by tbname")
tdSql.checkRows(2)
tdSql.query("select count(c1) from stb where abs(c1+t2)=1 partition by tbname")
tdSql.checkRows(2)
tdSql.query("select tbname , count(c1) from stb partition by tbname order by tbname")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,1,self.row_nums)
tdSql.error("select tbname , count(c1) from stb partition by t1 order by t1")
tdSql.error("select tbname , count(t1) from stb partition by t1 order by t1")
tdSql.error("select tbname , count(t1) from stb partition by t2 order by t2")
# # bug need fix
# tdSql.query("select t2 , count(t1) from stb partition by t2 order by t2")
# tdSql.checkRows(self.tb_nums)
tdSql.query("select tbname , count(c1) from stb partition by tbname order by tbname")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,1,self.row_nums)
tdSql.error("select tbname , count(c1) from stb partition by t2 order by t2")
tdSql.query("select c2, count(c1) from stb partition by c2 order by c2 desc")
tdSql.checkRows(self.tb_nums+1)
tdSql.checkData(0,1,self.tb_nums)
tdSql.error("select tbname , count(c1) from stb partition by c1 order by c2")
tdSql.query("select tbname , abs(t2) from stb partition by c2 order by t2")
tdSql.checkRows(self.tb_nums*(self.row_nums+5))
tdSql.query("select count(c1) , count(t2) from stb partition by c2 ")
tdSql.checkRows(self.row_nums+1)
tdSql.checkData(0,1,self.row_nums)
tdSql.query("select count(c1) , count(t2) ,c2 from stb partition by c2 order by c2")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select count(c1) , count(t1) ,max(c2) ,tbname from stb partition by tbname order by tbname")
tdSql.checkRows(self.tb_nums)
tdSql.checkCols(4)
tdSql.query("select count(c1) , count(t2) ,t1 from stb partition by t1 order by t1")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,self.row_nums)
# bug need fix
# tdSql.query("select count(c1) , count(t1) ,abs(c1) from stb partition by abs(c1) order by abs(c1)")
# tdSql.checkRows(self.row_nums+1)
tdSql.query("select count(ceil(c2)) , count(floor(t2)) ,count(floor(c2)) from stb partition by abs(c2) order by abs(c2)")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select count(ceil(c1-2)) , count(floor(t2+1)) ,max(c2-c1) from stb partition by abs(floor(c1)) order by abs(floor(c1))")
tdSql.checkRows(self.row_nums+1)
# interval
tdSql.query("select count(c1) from stb interval(2s) sliding(1s)")
# bug need fix
tdSql.query('select max(c1) from stb where ts>="2022-07-06 16:00:00.000 " and ts < "2022-07-06 17:00:00.000 " interval(50s) sliding(30s) fill(NULL)')
tdSql.query(" select tbname , count(c1) from stb partition by tbname interval(10s) slimit 5 soffset 1 ")
tdSql.query("select tbname , count(c1) from stb partition by tbname interval(10s)")
tdSql.query("select tbname , count(c1) from sub_stb_1 partition by tbname interval(10s)")
tdSql.checkData(0,0,'sub_stb_1')
tdSql.checkData(0,1,self.row_nums)
# tdSql.query(" select tbname , count(c1) from stb partition by tbname order by tbname slimit 5 soffset 0 ")
# tdSql.checkRows(5)
# tdSql.query(" select tbname , count(c1) from stb partition by tbname order by tbname slimit 5 soffset 1 ")
# tdSql.checkRows(5)
tdSql.query(" select tbname , count(c1) from sub_stb_1 partition by tbname interval(10s) sliding(5s) ")
tdSql.query(f'select max(c1) from stb where ts>={self.ts} and ts < {self.ts}+10000 partition by tbname interval(50s) sliding(30s)')
tdSql.query(f'select max(c1) from stb where ts>={self.ts} and ts < {self.ts}+10000 interval(50s) sliding(30s)')
tdSql.query(f'select tbname , count(c1) from stb where ts>={self.ts} and ts < {self.ts}+10000 partition by tbname interval(50s) sliding(30s)')
def run(self):
tdSql.prepare()
self.prepare_datas("stb",self.tb_nums,self.row_nums)
self.basic_query()
# # coverage case for taosd crash about bug fix
tdSql.query(" select sum(c1) from stb where t2+10 >1 ")
tdSql.query(" select count(c1),count(t1) from stb where -t2<1 ")
tdSql.query(" select tbname ,max(ceil(c1)) from stb group by tbname ")
tdSql.query(" select avg(abs(c1)) , tbname from stb group by tbname ")
tdSql.query(" select t1,c1 from stb where abs(t2+c1)=1 ")
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())
\ No newline at end of file
# author : wenzhouwww
from util.log import *
from util.sql import *
from util.cases import *
class TDTestCase:
def init(self, conn, logSql):
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor())
self.row_nums = 10
self.tb_nums = 10
self.ts = 1537146000000
def prepare_datas(self, stb_name , tb_nums , row_nums ):
tdSql.execute(" use db ")
tdSql.execute(f" create stable {stb_name} (ts timestamp , c1 int , c2 bigint , c3 float , c4 double , c5 smallint , c6 tinyint , c7 bool , c8 binary(36) , c9 nchar(36) , uc1 int unsigned,\
uc2 bigint unsigned ,uc3 smallint unsigned , uc4 tinyint unsigned ) tags(t1 timestamp , t2 int , t3 bigint , t4 float , t5 double , t6 smallint , t7 tinyint , t8 bool , t9 binary(36)\
, t10 nchar(36) , t11 int unsigned , t12 bigint unsigned ,t13 smallint unsigned , t14 tinyint unsigned ) ")
for i in range(tb_nums):
tbname = f"sub_{stb_name}_{i}"
ts = self.ts + i*10000
tdSql.execute(f"create table {tbname} using {stb_name} tags ({ts} , {i} , {i}*10 ,{i}*1.0,{i}*1.0 , 1 , 2, 'true', 'binary_{i}' ,'nchar_{i}',{i},{i},10,20 )")
for row in range(row_nums):
ts = self.ts + row*1000
tdSql.execute(f"insert into {tbname} values({ts} , {row} , {row} , {row} , {row} , 1 , 2 , 'true' , 'binary_{row}' , 'nchar_{row}' , {row} , {row} , 1 ,2 )")
for null in range(5):
ts = self.ts + row_nums*1000 + null*1000
tdSql.execute(f"insert into {tbname} values({ts} , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL )")
def basic_query(self):
tdSql.query("select count(*) from stb")
tdSql.checkData(0,0,(self.row_nums + 5 )*self.tb_nums)
tdSql.query("select max(c1) from stb")
tdSql.checkData(0,0,(self.row_nums -1))
tdSql.query(" select tbname , max(c1) from stb partition by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.query(" select max(c1) from stb group by t1 order by t1 ")
tdSql.checkRows(self.tb_nums)
tdSql.query(" select max(c1) from stb group by c1 order by t1 ")
tdSql.query(" select max(t2) from stb group by c1 order by t1 ")
tdSql.query(" select max(c1) from stb group by tbname order by tbname ")
tdSql.checkRows(self.tb_nums)
# bug need fix
# tdSql.query(" select max(t1) from stb group by t2 order by t2 ")
# tdSql.checkRows(self.tb_nums)
tdSql.query(" select max(c1) from stb group by c1 order by c1 ")
tdSql.checkRows(self.row_nums+1)
tdSql.query(" select c1 , max(c1) from stb group by c1 order by c1 ")
tdSql.checkRows(self.row_nums+1)
# support selective functions
tdSql.query(" select c1 ,c2 ,c3 , max(c1) ,c4 ,c5 ,t11 from stb group by c1 order by c1 desc ")
tdSql.checkRows(self.row_nums+1)
tdSql.query(" select c1, tbname , max(c1) ,c4 ,c5 ,t11 from stb group by c1 order by c1 desc ")
tdSql.checkRows(self.row_nums+1)
# bug need fix
# tdSql.query(" select tbname , max(c1) from sub_stb_1 where c1 is null group by c1 order by c1 desc ")
# tdSql.checkRows(1)
# tdSql.checkData(0,0,"sub_stb_1")
tdSql.query("select max(c1) ,c2 ,t2,tbname from stb group by abs(c1) order by abs(c1)")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select abs(c1+c3), count(c1+c3) ,max(c1+t2) from stb group by abs(c1+c3) order by abs(c1+c3)")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select max(c1+c3)+min(c2) ,abs(c1) from stb group by abs(c1) order by abs(c1)")
tdSql.checkRows(self.row_nums+1)
tdSql.error("select count(c1+c3)+max(c2) ,abs(c1) ,abs(t1) from stb group by abs(c1) order by abs(t1)+c2")
tdSql.error("select count(c1+c3)+max(c2) ,abs(c1) from stb group by abs(c1) order by abs(c1)+c2")
tdSql.query("select abs(c1+c3)+abs(c2) , count(c1+c3)+max(c2) from stb group by abs(c1+c3)+abs(c2) order by abs(c1+c3)+abs(c2)")
tdSql.checkRows(self.row_nums+1)
tdSql.query(" select max(c1) , max(t2) from stb where abs(c1+t2)=1 partition by tbname ")
tdSql.checkRows(2)
tdSql.query(" select max(c1) from stb where abs(c1+t2)=1 partition by tbname ")
tdSql.checkRows(2)
tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,1,self.row_nums-1)
tdSql.query("select tbname , max(c2) from stb partition by t1 order by t1")
tdSql.query("select tbname , max(t2) from stb partition by t1 order by t1")
tdSql.query("select tbname , max(t2) from stb partition by t2 order by t2")
# # bug need fix
# tdSql.query("select t2 , max(t2) from stb partition by t2 order by t2")
# tdSql.checkRows(self.tb_nums)
tdSql.query("select tbname , max(c1) from stb partition by tbname order by tbname")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,1,self.row_nums-1)
tdSql.query("select tbname , max(c1) from stb partition by t2 order by t2")
tdSql.query("select c2, max(c1) from stb partition by c2 order by c2 desc")
tdSql.checkRows(self.tb_nums+1)
tdSql.checkData(0,1,self.row_nums-1)
tdSql.query("select tbname , max(c1) from stb partition by c1 order by c2")
tdSql.query("select tbname , abs(t2) from stb partition by c2 order by t2")
tdSql.checkRows(self.tb_nums*(self.row_nums+5))
tdSql.query("select max(c1) , count(t2) from stb partition by c2 ")
tdSql.checkRows(self.row_nums+1)
tdSql.checkData(0,1,self.row_nums)
tdSql.query("select count(c1) , max(t2) ,c2 from stb partition by c2 order by c2")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select count(c1) , count(t1) ,max(c2) ,tbname from stb partition by tbname order by tbname")
tdSql.checkRows(self.tb_nums)
tdSql.checkCols(4)
tdSql.query("select count(c1) , max(t2) ,t1 from stb partition by t1 order by t1")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,self.row_nums)
# bug need fix
# tdSql.query("select count(c1) , max(t1) ,abs(c1) from stb partition by abs(c1) order by abs(c1)")
# tdSql.checkRows(self.row_nums+1)
tdSql.query("select max(ceil(c2)) , max(floor(t2)) ,max(floor(c2)) from stb partition by abs(c2) order by abs(c2)")
tdSql.checkRows(self.row_nums+1)
tdSql.query("select max(ceil(c1-2)) , max(floor(t2+1)) ,max(c2-c1) from stb partition by abs(floor(c1)) order by abs(floor(c1))")
tdSql.checkRows(self.row_nums+1)
# interval
tdSql.query("select max(c1) from stb interval(2s) sliding(1s)")
# bug need fix
tdSql.query('select max(c1) from stb where ts>="2022-07-06 16:00:00.000 " and ts < "2022-07-06 17:00:00.000 " interval(50s) sliding(30s) fill(NULL)')
tdSql.query(" select tbname , count(c1) from stb partition by tbname interval(10s) slimit 5 soffset 1 ")
tdSql.query("select tbname , max(c1) from stb partition by tbname interval(10s)")
tdSql.checkRows(self.row_nums*2)
tdSql.query("select tbname , count(c1) from sub_stb_1 partition by tbname interval(10s)")
tdSql.checkData(0,0,'sub_stb_1')
tdSql.checkData(0,1,self.row_nums)
# bug need fix
# tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname slimit 5 soffset 0 ")
# tdSql.checkRows(5)
# tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname slimit 5 soffset 1 ")
# tdSql.checkRows(5)
tdSql.query(" select tbname , max(c1) from sub_stb_1 partition by tbname interval(10s) sliding(5s) ")
tdSql.query(f'select max(c1) from stb where ts>={self.ts} and ts < {self.ts}+1000 interval(50s) sliding(30s)')
tdSql.query(f'select tbname , max(c1) from stb where ts>={self.ts} and ts < {self.ts}+1000 interval(50s) sliding(30s)')
def run(self):
tdSql.prepare()
self.prepare_datas("stb",self.tb_nums,self.row_nums)
self.basic_query()
# # coverage case for taosd crash about bug fix
tdSql.query(" select sum(c1) from stb where t2+10 >1 ")
tdSql.query(" select count(c1),count(t1) from stb where -t2<1 ")
tdSql.query(" select tbname ,max(ceil(c1)) from stb group by tbname ")
tdSql.query(" select avg(abs(c1)) , tbname from stb group by tbname ")
tdSql.query(" select t1,c1 from stb where abs(t2+c1)=1 ")
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())
\ No newline at end of file
......@@ -16,9 +16,9 @@ from tmqCommon import *
class TDTestCase:
def __init__(self):
self.vgroups = 2
self.ctbNum = 100
self.rowsPerTbl = 10000
self.vgroups = 4
self.ctbNum = 1000
self.rowsPerTbl = 1000
def init(self, conn, logSql):
tdLog.debug(f"start to excute {__file__}")
......@@ -29,7 +29,7 @@ class TDTestCase:
paraDict = {'dbName': 'dbt',
'dropFlag': 1,
'event': '',
'vgroups': 3,
'vgroups': 4,
'stbName': 'stb',
'colPrefix': 'c',
'tagPrefix': 't',
......@@ -37,14 +37,14 @@ class TDTestCase:
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
'ctbPrefix': 'ctb',
'ctbStartIdx': 0,
'ctbNum': 500,
'ctbNum': 1000,
'rowsPerTbl': 1000,
'batchNum': 500,
'batchNum': 400,
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
'pollDelay': 3,
'showMsg': 1,
'showRow': 1,
'snapshot': 0}
'snapshot': 1}
paraDict['vgroups'] = self.vgroups
paraDict['ctbNum'] = self.ctbNum
......@@ -54,20 +54,21 @@ class TDTestCase:
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
tdLog.info("create stb")
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
tdLog.info("create ctb")
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("insert data")
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
# tdLog.info("create ctb")
# tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
# ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
# tdLog.info("insert data")
# tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
# ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
# startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctbx",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
tdLog.info("restart taosd to ensure that the data falls into the disk")
# tdDnodes.stop(1)
# tdDnodes.start(1)
tdSql.query("flush database %s"%(paraDict['dbName']))
# tdLog.info("restart taosd to ensure that the data falls into the disk")
# tdSql.query("flush database %s"%(paraDict['dbName']))
return
# 自动建表完成数据插入,启动消费
def tmqCase1(self):
tdLog.printNoPrefix("======== test case 1: ")
paraDict = {'dbName': 'dbt',
......@@ -90,28 +91,23 @@ class TDTestCase:
'showRow': 1,
'snapshot': 1}
# paraDict['vgroups'] = self.vgroups
# paraDict['ctbNum'] = self.ctbNum
# paraDict['rowsPerTbl'] = self.rowsPerTbl
paraDict['vgroups'] = self.vgroups
paraDict['ctbNum'] = self.ctbNum
paraDict['rowsPerTbl'] = self.rowsPerTbl
tmqCom.initConsumerTable()
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
tdLog.info("create stb")
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
tdLog.info("create ctb")
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("insert data")
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
# tmqCom.initConsumerTable()
# tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
# tdLog.info("create stb")
# tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
# tdLog.info("insert data by auto create ctb")
# tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctb",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
tdLog.info("create topics from stb1")
topicFromStb1 = 'topic_stb1'
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
sqlString = "create topic %s as %s" %(topicFromStb1, queryString)
tdLog.info("create topic sql: %s"%sqlString)
tdSql.execute(sqlString)
tdSql.execute(sqlString)
consumerId = 0
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"]
......@@ -120,19 +116,12 @@ class TDTestCase:
ifManualCommit = 0
keyList = 'group.id:cgrp1,\
enable.auto.commit:true,\
auto.commit.interval.ms:500,\
auto.commit.interval.ms:1000,\
auto.offset.reset:earliest'
tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
tdLog.info("start consume processor")
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
# time.sleep(3)
tmqCom.getStartCommitNotifyFromTmqsim()
tdLog.info("================= restart dnode ===========================")
tdDnodes.stop(1)
tdDnodes.start(1)
time.sleep(5)
tdLog.info("insert process end, and start to check consume result")
expectRows = 1
......@@ -172,23 +161,23 @@ class TDTestCase:
'pollDelay': 5,
'showMsg': 1,
'showRow': 1,
'snapshot': 1}
'snapshot': 0}
# paraDict['vgroups'] = self.vgroups
# paraDict['ctbNum'] = self.ctbNum
# paraDict['rowsPerTbl'] = self.rowsPerTbl
paraDict['vgroups'] = self.vgroups
paraDict['ctbNum'] = self.ctbNum
paraDict['rowsPerTbl'] = self.rowsPerTbl
tmqCom.initConsumerTable()
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
tdLog.info("create stb")
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
tdLog.info("create ctb")
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("insert data")
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
# tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
# tdLog.info("create stb")
# tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
# tdLog.info("create ctb")
# tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
# ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
# tdLog.info("insert data")
# tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
# ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
# startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("create topics from stb1")
topicFromStb1 = 'topic_stb1'
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
......@@ -211,14 +200,8 @@ class TDTestCase:
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
tdLog.info("create some new child table and insert data ")
tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctb",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctby",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
tmqCom.getStartCommitNotifyFromTmqsim()
tdLog.info("================= restart dnode ===========================")
tdDnodes.stop(1)
tdDnodes.start(1)
time.sleep(5)
tdLog.info("insert process end, and start to check consume result")
expectRows = 1
resultList = tmqCom.selectConsumeResult(expectRows)
......@@ -237,91 +220,13 @@ class TDTestCase:
tdLog.printNoPrefix("======== test case 2 end ...... ")
# 自动建表完成数据插入,启动消费
def tmqCase3(self):
tdLog.printNoPrefix("======== test case 3: ")
paraDict = {'dbName': 'dbt',
'dropFlag': 1,
'event': '',
'vgroups': 4,
'stbName': 'stb',
'colPrefix': 'c',
'tagPrefix': 't',
'colSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1},{'type': 'TIMESTAMP', 'count':1}],
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
'ctbPrefix': 'ctb',
'ctbStartIdx': 0,
'ctbNum': 1000,
'rowsPerTbl': 1000,
'batchNum': 400,
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
'pollDelay': 5,
'showMsg': 1,
'showRow': 1,
'snapshot': 1}
paraDict['vgroups'] = self.vgroups
paraDict['ctbNum'] = self.ctbNum
paraDict['rowsPerTbl'] = self.rowsPerTbl
tmqCom.initConsumerTable()
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
tdLog.info("create stb")
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
tdLog.info("insert data by auto create ctb")
tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctb",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
tdLog.info("create topics from stb1")
topicFromStb1 = 'topic_stb1'
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
sqlString = "create topic %s as %s" %(topicFromStb1, queryString)
tdLog.info("create topic sql: %s"%sqlString)
tdSql.execute(sqlString)
consumerId = 0
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"]
topicList = topicFromStb1
ifcheckdata = 0
ifManualCommit = 0
keyList = 'group.id:cgrp1,\
enable.auto.commit:true,\
auto.commit.interval.ms:1000,\
auto.offset.reset:earliest'
tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
tdLog.info("start consume processor")
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
# tdLog.info("================= restart dnode ===========================")
# tdDnodes.stop(1)
# tdDnodes.start(1)
# time.sleep(2)
tdLog.info("insert process end, and start to check consume result")
expectRows = 1
resultList = tmqCom.selectConsumeResult(expectRows)
totalConsumeRows = 0
for i in range(expectRows):
totalConsumeRows += resultList[i]
tdSql.query(queryString)
totalRowsInserted = tdSql.getRows()
if totalConsumeRows != totalRowsInserted:
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsInserted))
tdLog.exit("tmq consume rows error!")
tdSql.query("drop topic %s"%topicFromStb1)
tdLog.printNoPrefix("======== test case 3 end ...... ")
def run(self):
tdSql.prepare()
# self.tmqCase1()
# self.tmqCase2()
self.tmqCase3()
self.prepareTestEnv()
self.tmqCase1()
# self.tmqCase2() TD-17267
def stop(self):
tdSql.close()
......
import taos
import sys
import time
import socket
import os
import threading
from enum import Enum
from util.log import *
from util.sql import *
from util.cases import *
from util.dnodes import *
sys.path.append("./7-tmq")
from tmqCommon import *
class TDTestCase:
def __init__(self):
self.vgroups = 2
self.ctbNum = 100
self.rowsPerTbl = 10000
def init(self, conn, logSql):
tdLog.debug(f"start to excute {__file__}")
tdSql.init(conn.cursor(), False)
def prepareTestEnv(self):
tdLog.printNoPrefix("======== prepare test env include database, stable, ctables, and insert data: ")
paraDict = {'dbName': 'dbt',
'dropFlag': 1,
'event': '',
'vgroups': 3,
'stbName': 'stb',
'colPrefix': 'c',
'tagPrefix': 't',
'colSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1},{'type': 'TIMESTAMP', 'count':1}],
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
'ctbPrefix': 'ctb',
'ctbStartIdx': 0,
'ctbNum': 500,
'rowsPerTbl': 1000,
'batchNum': 500,
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
'pollDelay': 3,
'showMsg': 1,
'showRow': 1,
'snapshot': 0}
paraDict['vgroups'] = self.vgroups
paraDict['ctbNum'] = self.ctbNum
paraDict['rowsPerTbl'] = self.rowsPerTbl
tmqCom.initConsumerTable()
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
tdLog.info("create stb")
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
tdLog.info("create ctb")
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("insert data")
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("restart taosd to ensure that the data falls into the disk")
# tdDnodes.stop(1)
# tdDnodes.start(1)
tdSql.query("flush database %s"%(paraDict['dbName']))
return
def tmqCase1(self):
tdLog.printNoPrefix("======== test case 1: ")
paraDict = {'dbName': 'dbt',
'dropFlag': 1,
'event': '',
'vgroups': 4,
'stbName': 'stb',
'colPrefix': 'c',
'tagPrefix': 't',
'colSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1},{'type': 'TIMESTAMP', 'count':1}],
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
'ctbPrefix': 'ctb',
'ctbStartIdx': 0,
'ctbNum': 1000,
'rowsPerTbl': 1000,
'batchNum': 400,
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
'pollDelay': 5,
'showMsg': 1,
'showRow': 1,
'snapshot': 1}
# paraDict['vgroups'] = self.vgroups
# paraDict['ctbNum'] = self.ctbNum
# paraDict['rowsPerTbl'] = self.rowsPerTbl
tmqCom.initConsumerTable()
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
tdLog.info("create stb")
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
tdLog.info("create ctb")
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("insert data")
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("create topics from stb1")
topicFromStb1 = 'topic_stb1'
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
sqlString = "create topic %s as %s" %(topicFromStb1, queryString)
tdLog.info("create topic sql: %s"%sqlString)
tdSql.execute(sqlString)
consumerId = 0
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"]
topicList = topicFromStb1
ifcheckdata = 0
ifManualCommit = 0
keyList = 'group.id:cgrp1,\
enable.auto.commit:true,\
auto.commit.interval.ms:500,\
auto.offset.reset:earliest'
tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
tdLog.info("start consume processor")
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
# time.sleep(3)
tmqCom.getStartCommitNotifyFromTmqsim()
tdLog.info("================= restart dnode ===========================")
tdDnodes.stop(1)
tdDnodes.start(1)
time.sleep(5)
tdLog.info("insert process end, and start to check consume result")
expectRows = 1
resultList = tmqCom.selectConsumeResult(expectRows)
totalConsumeRows = 0
for i in range(expectRows):
totalConsumeRows += resultList[i]
tdSql.query(queryString)
totalRowsInserted = tdSql.getRows()
if totalConsumeRows != totalRowsInserted:
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsInserted))
tdLog.exit("tmq consume rows error!")
tdSql.query("drop topic %s"%topicFromStb1)
tdLog.printNoPrefix("======== test case 1 end ...... ")
def tmqCase2(self):
tdLog.printNoPrefix("======== test case 2: ")
paraDict = {'dbName': 'dbt',
'dropFlag': 1,
'event': '',
'vgroups': 4,
'stbName': 'stb',
'colPrefix': 'c',
'tagPrefix': 't',
'colSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1},{'type': 'TIMESTAMP', 'count':1}],
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
'ctbPrefix': 'ctb',
'ctbStartIdx': 0,
'ctbNum': 1000,
'rowsPerTbl': 1000,
'batchNum': 1000,
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
'pollDelay': 5,
'showMsg': 1,
'showRow': 1,
'snapshot': 1}
# paraDict['vgroups'] = self.vgroups
# paraDict['ctbNum'] = self.ctbNum
# paraDict['rowsPerTbl'] = self.rowsPerTbl
tmqCom.initConsumerTable()
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
tdLog.info("create stb")
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
tdLog.info("create ctb")
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("insert data")
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
tdLog.info("create topics from stb1")
topicFromStb1 = 'topic_stb1'
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
sqlString = "create topic %s as %s" %(topicFromStb1, queryString)
tdLog.info("create topic sql: %s"%sqlString)
tdSql.execute(sqlString)
consumerId = 0
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"] * 2
topicList = topicFromStb1
ifcheckdata = 0
ifManualCommit = 0
keyList = 'group.id:cgrp1,\
enable.auto.commit:true,\
auto.commit.interval.ms:1000,\
auto.offset.reset:earliest'
tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
tdLog.info("start consume processor")
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
tdLog.info("create some new child table and insert data ")
tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctb",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
tmqCom.getStartCommitNotifyFromTmqsim()
tdLog.info("================= restart dnode ===========================")
tdDnodes.stop(1)
tdDnodes.start(1)
time.sleep(5)
tdLog.info("insert process end, and start to check consume result")
expectRows = 1
resultList = tmqCom.selectConsumeResult(expectRows)
totalConsumeRows = 0
for i in range(expectRows):
totalConsumeRows += resultList[i]
tdSql.query(queryString)
totalRowsInserted = tdSql.getRows()
if totalConsumeRows != totalRowsInserted:
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsInserted))
tdLog.exit("tmq consume rows error!")
tdSql.query("drop topic %s"%topicFromStb1)
tdLog.printNoPrefix("======== test case 2 end ...... ")
def run(self):
tdSql.prepare()
self.tmqCase1()
self.tmqCase2()
def stop(self):
tdSql.close()
tdLog.success(f"{__file__} successfully executed")
event = threading.Event()
tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase())
......@@ -118,9 +118,11 @@ python3 ./test.py -f 2-query/distribute_agg_stddev.py
python3 ./test.py -f 2-query/twa.py
python3 ./test.py -f 2-query/irate.py
python3 ./test.py -f 2-query/and_or_for_byte.py
python3 ./test.py -f 2-query/count_partition.py
python3 ./test.py -f 2-query/function_null.py
#python3 ./test.py -f 2-query/queryQnode.py
python3 ./test.py -f 2-query/queryQnode.py
python3 ./test.py -f 2-query/max_partition.py
python3 ./test.py -f 6-cluster/5dnode1mnode.py
#BUG python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5 -M 3
......@@ -174,8 +176,8 @@ python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py
python3 ./test.py -f 7-tmq/tmqAutoCreateTbl.py
#python3 ./test.py -f 7-tmq/tmqDnodeRestart.py
#------------querPolicy 2-----------
......@@ -263,6 +265,8 @@ python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 2
python3 ./test.py -f 2-query/twa.py -Q 2
python3 ./test.py -f 2-query/irate.py -Q 2
python3 ./test.py -f 2-query/function_null.py -Q 2
python3 ./test.py -f 2-query/count_partition.py -Q 2
python3 ./test.py -f 2-query/max_partition.py -Q 2
#------------querPolicy 3-----------
......@@ -348,3 +352,5 @@ python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 3
python3 ./test.py -f 2-query/twa.py -Q 3
python3 ./test.py -f 2-query/irate.py -Q 3
python3 ./test.py -f 2-query/function_null.py -Q 3
python3 ./test.py -f 2-query/count_partition.py -Q 3
python3 ./test.py -f 2-query/max_partition.py -Q 3
\ No newline at end of file
Subproject commit 7a94ffab45f08e16f09b3f430fe75d717054adb6
Subproject commit 6dccac192a2ae7dd78718ab926201aab5419327a
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册