diff --git a/src/inc/tsdb.h b/src/inc/tsdb.h index 468c5ab27157a2e4712aea50e8b1fcca1c268bb1..7c8819777dcf65779e5d0796c0f64f2757d6ed12 100644 --- a/src/inc/tsdb.h +++ b/src/inc/tsdb.h @@ -268,6 +268,8 @@ TsdbQueryHandleT tsdbQueryLastRow(STsdbRepo *tsdb, STsdbQueryCond *pCond, STable TsdbQueryHandleT tsdbQueryCacheLast(STsdbRepo *tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupList, uint64_t qId, SMemRef* pMemRef); +bool isTsdbCacheLastRow(TsdbQueryHandleT* pQueryHandle); + /** * get the queried table object list diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index c2a4c7febe6076266f125a1c9c0960fc8b86668d..1d41bc42b0522cacdcb5e3e6988c5a3dc05f47f8 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -4243,7 +4243,7 @@ static SSDataBlock* doTableScan(void* param, bool *newgroup) { } if (++pTableScanInfo->current >= pTableScanInfo->times) { - if (pTableScanInfo->reverseTimes <= 0) { + if (pTableScanInfo->reverseTimes <= 0 || isTsdbCacheLastRow(pTableScanInfo->pQueryHandle)) { return NULL; } else { break; diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index 491a4b2db0bf4fd55685a9a3c25418478491e1a6..626602576f1b93f6dc1a1e192a0a65807f0840dc 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -547,7 +547,9 @@ TsdbQueryHandleT tsdbQueryCacheLast(STsdbRepo *tsdb, STsdbQueryCond *pCond, STab return NULL; } - pQueryHandle->type = TSDB_QUERY_TYPE_LAST; + if (pQueryHandle->cachelastrow) { + pQueryHandle->type = TSDB_QUERY_TYPE_LAST; + } return pQueryHandle; } @@ -2873,6 +2875,10 @@ int32_t tsdbGetCachedLastRow(STable* pTable, SDataRow* pRes, TSKEY* lastKey) { return TSDB_CODE_SUCCESS; } +bool isTsdbCacheLastRow(TsdbQueryHandleT* pQueryHandle) { + return ((STsdbQueryHandle *)pQueryHandle)->cachelastrow > 0; +} + int32_t checkForCachedLastRow(STsdbQueryHandle* pQueryHandle, STableGroupInfo *groupList) { assert(pQueryHandle != NULL && groupList != NULL); @@ -2921,7 +2927,6 @@ int32_t checkForCachedLast(STsdbQueryHandle* pQueryHandle, STableGroupInfo *grou if (((STable*)pInfo->pTable)->lastCols && ((STable*)pInfo->pTable)->lastColNum > 0){ pQueryHandle->cachelastrow = 2; } - // update the tsdb query time range if (pQueryHandle->cachelastrow) {