From c061cd2fe28911133c3e31b090c0f735fe098aff Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Wed, 27 Jul 2022 21:42:35 +0800 Subject: [PATCH] fix: multi row same ts join --- source/libs/executor/src/joinoperator.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/libs/executor/src/joinoperator.c b/source/libs/executor/src/joinoperator.c index ec96a21f47..db39f2e6fa 100644 --- a/source/libs/executor/src/joinoperator.c +++ b/source/libs/executor/src/joinoperator.c @@ -151,11 +151,11 @@ typedef struct SRowLocation { int32_t pos; } SRowLocation; -static int32_t mergeJoinGetBlockRowsEqualTs(SSDataBlock* pBlock, int16_t slotId, int32_t startPos, int64_t timestamp, - SArray* pPosArray) { +static int32_t mergeJoinGetBlockRowsEqualTs(SSDataBlock* pBlock, int16_t tsSlotId, int32_t startPos, int64_t timestamp, + int32_t* pEndPos, SArray* pRowLocations, SArray* createdBlocks) { int32_t numRows = pBlock->info.rows; ASSERT(startPos < numRows); - SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId); + SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, tsSlotId); int32_t i = startPos; for (; i < numRows; ++i) { @@ -165,16 +165,18 @@ static int32_t mergeJoinGetBlockRowsEqualTs(SSDataBlock* pBlock, int16_t slotId, } } int32_t endPos = i; + *pEndPos = endPos; SSDataBlock* block = pBlock; - if (endPos - startPos > 1) { + if (endPos == numRows) { block = blockDataExtractBlock(pBlock, startPos, endPos - startPos); + taosArrayPush(createdBlocks, &block); } SRowLocation location = {0}; for (int32_t j = startPos; j < endPos; ++j) { location.pDataBlock = block; location.pos = j; - taosArrayPush(pPosArray, &location); + taosArrayPush(pRowLocations, &location); } return 0; }