[td-3779]
This commit is contained in:
parent
31e82030d9
commit
b0bf30aac3
|
@ -744,7 +744,7 @@ static int32_t firstDistFuncRequired(SQLFunctionCtx *pCtx, STimeWindow* w, int32
|
||||||
if (pInfo->hasResult != DATA_SET_FLAG) {
|
if (pInfo->hasResult != DATA_SET_FLAG) {
|
||||||
return BLK_DATA_ALL_NEEDED;
|
return BLK_DATA_ALL_NEEDED;
|
||||||
} else { // data in current block is not earlier than current result
|
} else { // data in current block is not earlier than current result
|
||||||
return (pInfo->ts <= w->skey) ? BLK_DATA_DISCARD : BLK_DATA_ALL_NEEDED;
|
return (pInfo->ts <= w->skey) ? BLK_DATA_NO_NEEDED : BLK_DATA_ALL_NEEDED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,7 +764,7 @@ static int32_t lastDistFuncRequired(SQLFunctionCtx *pCtx, STimeWindow* w, int32_
|
||||||
if (pInfo->hasResult != DATA_SET_FLAG) {
|
if (pInfo->hasResult != DATA_SET_FLAG) {
|
||||||
return BLK_DATA_ALL_NEEDED;
|
return BLK_DATA_ALL_NEEDED;
|
||||||
} else {
|
} else {
|
||||||
return (pInfo->ts > w->ekey) ? BLK_DATA_DISCARD : BLK_DATA_ALL_NEEDED;
|
return (pInfo->ts > w->ekey) ? BLK_DATA_NO_NEEDED : BLK_DATA_ALL_NEEDED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2137,6 +2137,40 @@ static bool onlyFirstQuery(SQuery *pQuery) { return onlyOneQueryType(pQuery, TSD
|
||||||
|
|
||||||
static bool onlyLastQuery(SQuery *pQuery) { return onlyOneQueryType(pQuery, TSDB_FUNC_LAST, TSDB_FUNC_LAST_DST); }
|
static bool onlyLastQuery(SQuery *pQuery) { return onlyOneQueryType(pQuery, TSDB_FUNC_LAST, TSDB_FUNC_LAST_DST); }
|
||||||
|
|
||||||
|
static int32_t updateBlockLoadStatus(SQuery *pQuery, int32_t status) {
|
||||||
|
bool hasFirstLastFunc = false;
|
||||||
|
bool hasOtherFunc = false;
|
||||||
|
|
||||||
|
if (status == BLK_DATA_ALL_NEEDED || status == BLK_DATA_DISCARD) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < pQuery->numOfOutput; ++i) {
|
||||||
|
int32_t functionId = pQuery->pExpr1[i].base.functionId;
|
||||||
|
|
||||||
|
if (functionId == TSDB_FUNC_TS || functionId == TSDB_FUNC_TS_DUMMY || functionId == TSDB_FUNC_TAG ||
|
||||||
|
functionId == TSDB_FUNC_TAG_DUMMY) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (functionId == TSDB_FUNC_FIRST_DST || functionId == TSDB_FUNC_LAST_DST) {
|
||||||
|
hasFirstLastFunc = true;
|
||||||
|
} else {
|
||||||
|
hasOtherFunc = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasFirstLastFunc && status == BLK_DATA_NO_NEEDED) {
|
||||||
|
if(!hasOtherFunc) {
|
||||||
|
return BLK_DATA_DISCARD;
|
||||||
|
} else{
|
||||||
|
return BLK_DATA_ALL_NEEDED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
static void doExchangeTimeWindow(SQInfo* pQInfo, STimeWindow* win) {
|
static void doExchangeTimeWindow(SQInfo* pQInfo, STimeWindow* win) {
|
||||||
SQuery* pQuery = &pQInfo->query;
|
SQuery* pQuery = &pQInfo->query;
|
||||||
size_t t = taosArrayGetSize(pQuery->tableGroupInfo.pGroupList);
|
size_t t = taosArrayGetSize(pQuery->tableGroupInfo.pGroupList);
|
||||||
|
@ -2578,11 +2612,12 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv* pRuntimeEnv, STableScanInfo* pTa
|
||||||
pBlock->pDataBlock = NULL;
|
pBlock->pDataBlock = NULL;
|
||||||
pBlock->pBlockStatis = NULL;
|
pBlock->pBlockStatis = NULL;
|
||||||
|
|
||||||
|
SQInfo* pQInfo = pRuntimeEnv->qinfo;
|
||||||
SQuery* pQuery = pRuntimeEnv->pQuery;
|
SQuery* pQuery = pRuntimeEnv->pQuery;
|
||||||
|
|
||||||
int64_t groupId = pQuery->current->groupIndex;
|
int64_t groupId = pQuery->current->groupIndex;
|
||||||
bool ascQuery = QUERY_IS_ASC_QUERY(pQuery);
|
bool ascQuery = QUERY_IS_ASC_QUERY(pQuery);
|
||||||
|
|
||||||
SQInfo* pQInfo = pRuntimeEnv->qinfo;
|
|
||||||
SQueryCostInfo* pCost = &pQInfo->summary;
|
SQueryCostInfo* pCost = &pQInfo->summary;
|
||||||
|
|
||||||
if (pRuntimeEnv->pTsBuf != NULL) {
|
if (pRuntimeEnv->pTsBuf != NULL) {
|
||||||
|
@ -2639,6 +2674,8 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv* pRuntimeEnv, STableScanInfo* pTa
|
||||||
}
|
}
|
||||||
|
|
||||||
SDataBlockInfo* pBlockInfo = &pBlock->info;
|
SDataBlockInfo* pBlockInfo = &pBlock->info;
|
||||||
|
*status = updateBlockLoadStatus(pRuntimeEnv->pQuery, *status);
|
||||||
|
|
||||||
if ((*status) == BLK_DATA_NO_NEEDED || (*status) == BLK_DATA_DISCARD) {
|
if ((*status) == BLK_DATA_NO_NEEDED || (*status) == BLK_DATA_DISCARD) {
|
||||||
qDebug("QInfo:%"PRIu64" data block discard, brange:%" PRId64 "-%" PRId64 ", rows:%d", pQInfo->qId, pBlockInfo->window.skey,
|
qDebug("QInfo:%"PRIu64" data block discard, brange:%" PRId64 "-%" PRId64 ", rows:%d", pQInfo->qId, pBlockInfo->window.skey,
|
||||||
pBlockInfo->window.ekey, pBlockInfo->rows);
|
pBlockInfo->window.ekey, pBlockInfo->rows);
|
||||||
|
|
Loading…
Reference in New Issue