refactor codes of super table query in handling the sliding query.
This commit is contained in:
parent
d65299430a
commit
08854f86ae
|
@ -2162,7 +2162,7 @@ static STopBotInfo *getTopBotOutputInfo(SQLFunctionCtx *pCtx) {
|
||||||
// only the first_stage_merge is directly written data into final output buffer
|
// only the first_stage_merge is directly written data into final output buffer
|
||||||
if (pResInfo->superTableQ && pCtx->currentStage != SECONDARY_STAGE_MERGE) {
|
if (pResInfo->superTableQ && pCtx->currentStage != SECONDARY_STAGE_MERGE) {
|
||||||
return (STopBotInfo*) pCtx->aOutputBuf;
|
return (STopBotInfo*) pCtx->aOutputBuf;
|
||||||
} else { // for normal table query and super table at the secondary_stage, result is written to intermediate buffer
|
} else { // during normal table query and super table at the secondary_stage, result is written to intermediate buffer
|
||||||
return pResInfo->interResultBuf;
|
return pResInfo->interResultBuf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,8 +175,7 @@ void copyFromGroupBuf(SQInfo* pQInfo, SWindowResult* result);
|
||||||
SBlockInfo getBlockBasicInfo(SQueryRuntimeEnv* pRuntimeEnv, void* pBlock, int32_t blockType);
|
SBlockInfo getBlockBasicInfo(SQueryRuntimeEnv* pRuntimeEnv, void* pBlock, int32_t blockType);
|
||||||
SCacheBlock* getCacheDataBlock(SMeterObj* pMeterObj, SQueryRuntimeEnv* pRuntimeEnv, int32_t slot);
|
SCacheBlock* getCacheDataBlock(SMeterObj* pMeterObj, SQueryRuntimeEnv* pRuntimeEnv, int32_t slot);
|
||||||
|
|
||||||
void queryOnBlock(SMeterQuerySupportObj* pSupporter, int64_t* primaryKeys, int32_t blockStatus,
|
void queryOnBlock(SMeterQuerySupportObj* pSupporter, int32_t blockStatus, SBlockInfo* pBlockBasicInfo, SMeterDataInfo* pDataHeadInfoEx, SField* pFields,
|
||||||
SBlockInfo* pBlockBasicInfo, SMeterDataInfo* pDataHeadInfoEx, SField* pFields,
|
|
||||||
__block_search_fn_t searchFn);
|
__block_search_fn_t searchFn);
|
||||||
|
|
||||||
int32_t vnodeFilterQualifiedMeters(SQInfo *pQInfo, int32_t vid, tSidSet *pSidSet, SMeterDataInfo *pMeterDataInfo,
|
int32_t vnodeFilterQualifiedMeters(SQInfo *pQInfo, int32_t vid, tSidSet *pSidSet, SMeterDataInfo *pMeterDataInfo,
|
||||||
|
@ -278,14 +277,17 @@ void displayInterResult(SData** pdata, SQuery* pQuery, int32_t numOfRows);
|
||||||
|
|
||||||
void vnodePrintQueryStatistics(SMeterQuerySupportObj* pSupporter);
|
void vnodePrintQueryStatistics(SMeterQuerySupportObj* pSupporter);
|
||||||
|
|
||||||
void clearGroupResultBuf(SQueryRuntimeEnv *pRuntimeEnv, SWindowResult *pOneOutputRes);
|
void clearTimeWindowResBuf(SQueryRuntimeEnv *pRuntimeEnv, SWindowResult *pOneOutputRes);
|
||||||
void copyGroupResultBuf(SQueryRuntimeEnv *pRuntimeEnv, SWindowResult* dst, const SWindowResult* src);
|
void copyTimeWindowResBuf(SQueryRuntimeEnv *pRuntimeEnv, SWindowResult* dst, const SWindowResult* src);
|
||||||
|
|
||||||
void resetSlidingWindowInfo(SQueryRuntimeEnv *pRuntimeEnv, SWindowResInfo* pWindowResInfo);
|
int32_t initWindowResInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRuntimeEnv, int32_t size, int32_t threshold, int16_t type);
|
||||||
void clearClosedSlidingWindows(SQueryRuntimeEnv* pRuntimeEnv);
|
|
||||||
int32_t numOfClosedSlidingWindow(SWindowResInfo* pWindowResInfo);
|
void cleanupTimeWindowInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRuntimeEnv);
|
||||||
void closeSlidingWindow(SWindowResInfo* pWindowResInfo, int32_t slot);
|
void resetTimeWindowInfo(SQueryRuntimeEnv *pRuntimeEnv, SWindowResInfo* pWindowResInfo);
|
||||||
void closeAllSlidingWindow(SWindowResInfo* pWindowResInfo);
|
void clearClosedTimeWindow(SQueryRuntimeEnv* pRuntimeEnv);
|
||||||
|
int32_t numOfClosedTimeWindow(SWindowResInfo* pWindowResInfo);
|
||||||
|
void closeTimeWindow(SWindowResInfo* pWindowResInfo, int32_t slot);
|
||||||
|
void closeAllTimeWindow(SWindowResInfo* pWindowResInfo);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,7 +197,6 @@ typedef struct SMeterQueryInfo {
|
||||||
int16_t lastResRows;
|
int16_t lastResRows;
|
||||||
int64_t tag;
|
int64_t tag;
|
||||||
STSCursor cur;
|
STSCursor cur;
|
||||||
SWindowResult* pWindowRes;
|
|
||||||
int32_t sid; // for retrieve the page id list
|
int32_t sid; // for retrieve the page id list
|
||||||
|
|
||||||
SWindowResInfo windowResInfo;
|
SWindowResInfo windowResInfo;
|
||||||
|
@ -279,7 +278,7 @@ typedef struct _qinfo {
|
||||||
int (*fp)(SMeterObj*, SQuery*);
|
int (*fp)(SMeterObj*, SQuery*);
|
||||||
} SQInfo;
|
} SQInfo;
|
||||||
|
|
||||||
int32_t vnodeQuerySingleMeterPrepare(SQInfo* pQInfo, SMeterObj* pMeterObj, SMeterQuerySupportObj* pSMultiMeterObj,
|
int32_t vnodeQuerySingleTablePrepare(SQInfo* pQInfo, SMeterObj* pMeterObj, SMeterQuerySupportObj* pSMultiMeterObj,
|
||||||
void* param);
|
void* param);
|
||||||
|
|
||||||
void vnodeQueryFreeQInfoEx(SQInfo* pQInfo);
|
void vnodeQueryFreeQInfoEx(SQInfo* pQInfo);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -241,7 +241,7 @@ static void queryOnMultiDataCache(SQInfo *pQInfo, SMeterDataInfo *pMeterInfo) {
|
||||||
pRuntimeEnv->blockStatus);
|
pRuntimeEnv->blockStatus);
|
||||||
|
|
||||||
totalBlocks++;
|
totalBlocks++;
|
||||||
queryOnBlock(pSupporter, primaryKeys, pRuntimeEnv->blockStatus, &binfo, &pMeterInfo[k], NULL, searchFn);
|
queryOnBlock(pSupporter, pRuntimeEnv->blockStatus, &binfo, &pMeterInfo[k], NULL, searchFn);
|
||||||
|
|
||||||
if (ALL_CACHE_BLOCKS_CHECKED(pQuery)) {
|
if (ALL_CACHE_BLOCKS_CHECKED(pQuery)) {
|
||||||
break;
|
break;
|
||||||
|
@ -447,24 +447,8 @@ static void queryOnMultiDataFiles(SQInfo *pQInfo, SMeterDataInfo *pMeterDataInfo
|
||||||
(pBlock->keyFirst >= pQuery->ekey && pBlock->keyLast <= pQuery->lastKey && !QUERY_IS_ASC_QUERY(pQuery)));
|
(pBlock->keyFirst >= pQuery->ekey && pBlock->keyLast <= pQuery->lastKey && !QUERY_IS_ASC_QUERY(pQuery)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (pQuery->intervalTime > 0 && pQuery->slidingTime > 0) {
|
if (pQuery->intervalTime > 0 && pQuery->slidingTime > 0) {
|
||||||
assert(pMeterQueryInfo->lastKey <= nextKey && QUERY_IS_ASC_QUERY(pQuery));
|
setIntervalQueryRange(pMeterQueryInfo, pSupporter, nextKey);
|
||||||
|
|
||||||
pMeterQueryInfo->lastKey = nextKey;
|
|
||||||
pQuery->lastKey = nextKey;
|
|
||||||
if (pMeterQueryInfo->windowResInfo.prevSKey == 0) {
|
|
||||||
// normalize the window prev time window
|
|
||||||
|
|
||||||
TSKEY skey1, ekey1;
|
|
||||||
TSKEY windowSKey = 0, windowEKey = 0;
|
|
||||||
TSKEY skey2 = MIN(pSupporter->rawSKey, pSupporter->rawEKey);
|
|
||||||
TSKEY ekey2 = MAX(pSupporter->rawSKey, pSupporter->rawEKey);
|
|
||||||
|
|
||||||
doGetAlignedIntervalQueryRangeImpl(pQuery, nextKey, skey2, ekey2, &skey1, &ekey1, &windowSKey, &windowEKey);
|
|
||||||
|
|
||||||
pMeterQueryInfo->windowResInfo.prevSKey = windowSKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = setIntervalQueryExecutionContext(pSupporter, pOneMeterDataInfo->meterOrderIdx, pMeterQueryInfo);
|
ret = setIntervalQueryExecutionContext(pSupporter, pOneMeterDataInfo->meterOrderIdx, pMeterQueryInfo);
|
||||||
if (ret != TSDB_CODE_SUCCESS) {
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -474,8 +458,7 @@ static void queryOnMultiDataFiles(SQInfo *pQInfo, SMeterDataInfo *pMeterDataInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
queryOnBlock(pSupporter, primaryKeys, pRuntimeEnv->blockStatus, &binfo, pOneMeterDataInfo, pInfoEx->pBlock.fields,
|
queryOnBlock(pSupporter, pRuntimeEnv->blockStatus, &binfo, pOneMeterDataInfo, pInfoEx->pBlock.fields, searchFn);
|
||||||
searchFn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tfree(pReqMeterDataInfo);
|
tfree(pReqMeterDataInfo);
|
||||||
|
@ -711,7 +694,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
resetCtxOutputBuf(pRuntimeEnv);
|
resetCtxOutputBuf(pRuntimeEnv);
|
||||||
resetSlidingWindowInfo(pRuntimeEnv, &pRuntimeEnv->windowResInfo);
|
resetTimeWindowInfo(pRuntimeEnv, &pRuntimeEnv->windowResInfo);
|
||||||
|
|
||||||
while (pSupporter->meterIdx < pSupporter->numOfMeters) {
|
while (pSupporter->meterIdx < pSupporter->numOfMeters) {
|
||||||
int32_t k = pSupporter->meterIdx;
|
int32_t k = pSupporter->meterIdx;
|
||||||
|
@ -1115,7 +1098,7 @@ static void vnodeSingleMeterIntervalMainLooper(SMeterQuerySupportObj *pSupporter
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
initCtxOutputBuf(pRuntimeEnv);
|
initCtxOutputBuf(pRuntimeEnv);
|
||||||
clearClosedSlidingWindows(pRuntimeEnv);
|
clearClosedTimeWindow(pRuntimeEnv);
|
||||||
|
|
||||||
vnodeScanAllData(pRuntimeEnv);
|
vnodeScanAllData(pRuntimeEnv);
|
||||||
if (isQueryKilled(pQuery)) {
|
if (isQueryKilled(pQuery)) {
|
||||||
|
@ -1124,8 +1107,6 @@ static void vnodeSingleMeterIntervalMainLooper(SMeterQuerySupportObj *pSupporter
|
||||||
|
|
||||||
assert(!Q_STATUS_EQUAL(pQuery->over, QUERY_NOT_COMPLETED));
|
assert(!Q_STATUS_EQUAL(pQuery->over, QUERY_NOT_COMPLETED));
|
||||||
|
|
||||||
// clear tag, used to decide if the whole interval query is completed or not
|
|
||||||
pQuery->over &= (~QUERY_COMPLETED);
|
|
||||||
doFinalizeResult(pRuntimeEnv);
|
doFinalizeResult(pRuntimeEnv);
|
||||||
|
|
||||||
int64_t maxOutput = getNumOfResult(pRuntimeEnv);
|
int64_t maxOutput = getNumOfResult(pRuntimeEnv);
|
||||||
|
@ -1143,7 +1124,7 @@ static void vnodeSingleMeterIntervalMainLooper(SMeterQuerySupportObj *pSupporter
|
||||||
// forwardCtxOutputBuf(pRuntimeEnv, maxOutput);
|
// forwardCtxOutputBuf(pRuntimeEnv, maxOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Q_STATUS_EQUAL(pQuery->over, QUERY_NO_DATA_TO_CHECK)) {
|
if (Q_STATUS_EQUAL(pQuery->over, QUERY_NO_DATA_TO_CHECK|QUERY_COMPLETED)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -670,7 +670,7 @@ void *vnodeQueryOnSingleTable(SMeterObj **pMetersObj, SSqlGroupbyExpr *pGroupbyE
|
||||||
tsBufNextPos(pTSBuf);
|
tsBufNextPos(pTSBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((*code) = vnodeQuerySingleMeterPrepare(pQInfo, pQInfo->pObj, pSupporter, pTSBuf)) != TSDB_CODE_SUCCESS) {
|
if (((*code) = vnodeQuerySingleTablePrepare(pQInfo, pQInfo->pObj, pSupporter, pTSBuf)) != TSDB_CODE_SUCCESS) {
|
||||||
goto _error;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue