diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index d7f0476d30..834971b087 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -1462,8 +1462,18 @@ static bool tryCopyDistinctRowFromSttBlock(TSDBROW* fRow, SSttBlockReader* pSttB bool hasVal = nextRowFromSttBlocks(pSttBlockReader, pScanInfo, &pReader->info.verRange); doUnpinSttBlock(pSttBlockReader); if (hasVal) { - int64_t next1 = getCurrentKeyInSttBlock(pSttBlockReader); - if (next1 != ts) { + STsdbRowKey key, nextKey; + tsdbRowGetKey(fRow, &key); + + TSDBROW* pNextRow = tMergeTreeGetRow(&pSttBlockReader->mergeTree); + tsdbRowGetKey(pNextRow, &nextKey); + + if (!pReader->pkChecked) { + pReader->pkComparFn = getComparFunc(key.key.pks[0].type, 0); + pReader->pkChecked = true; + } + + if (nextKey.key.ts != ts || (pkComp(pReader, fRow, pNextRow) != 0)) { code = doAppendRowFromFileBlock(pReader->resBlockInfo.pResBlock, pReader, fRow->pBlockData, fRow->iRow); if (code) { return code; diff --git a/source/dnode/vnode/src/tsdb/tsdbReadUtil.h b/source/dnode/vnode/src/tsdb/tsdbReadUtil.h index 7966a87500..9fd52d4823 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReadUtil.h +++ b/source/dnode/vnode/src/tsdb/tsdbReadUtil.h @@ -87,7 +87,7 @@ typedef struct SSttKeyInfo { // 4. not overlap with data file blocks typedef struct STableBlockScanInfo { uint64_t uid; - TSKEY lastProcKey; + TSKEY lastProcKey; // todo: refactor: add primary key SSttKeyInfo sttKeyInfo; SArray* pBlockList; // block data index list, SArray SArray* pBlockIdxList; // SArray