From bb18e3c4850fb146fa936d11d3d485f01b378673 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Thu, 7 Apr 2022 17:50:06 +0800 Subject: [PATCH] fix error in sort logic --- source/common/src/tdatablock.c | 7 +++++-- source/libs/executor/inc/tsort.h | 5 +++++ source/libs/executor/src/executorimpl.c | 7 ++----- source/libs/executor/src/tsort.c | 5 ----- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 33dc3a2469..44d261bd31 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -192,6 +192,9 @@ int32_t colDataMergeCol(SColumnInfoData* pColumnInfoData, uint32_t numOfRow1, co return numOfRow1; } + if (pSource->hasNull) { + pColumnInfoData->hasNull = pSource->hasNull; + } if (IS_VAR_DATA_TYPE(pColumnInfoData->info.type)) { // Handle the bitmap char* p = taosMemoryRealloc(pColumnInfoData->varmeta.offset, sizeof(int32_t) * (numOfRow1 + numOfRow2)); @@ -313,9 +316,9 @@ int32_t blockDataUpdateTsWindow(SSDataBlock* pDataBlock) { } int32_t blockDataMerge(SSDataBlock* pDest, const SSDataBlock* pSrc) { - assert(pSrc != NULL && pDest != NULL && pDest->info.numOfCols == pSrc->info.numOfCols); + assert(pSrc != NULL && pDest != NULL); - int32_t numOfCols = pSrc->info.numOfCols; + int32_t numOfCols = pDest->info.numOfCols; for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* pCol2 = taosArrayGet(pDest->pDataBlock, i); SColumnInfoData* pCol1 = taosArrayGet(pSrc->pDataBlock, i); diff --git a/source/libs/executor/inc/tsort.h b/source/libs/executor/inc/tsort.h index 3c7194de6f..03bbe8098c 100644 --- a/source/libs/executor/inc/tsort.h +++ b/source/libs/executor/inc/tsort.h @@ -52,6 +52,11 @@ typedef struct SMsortComparParam { SArray *orderInfo; // SArray } SMsortComparParam; +struct STupleHandle { + SSDataBlock* pBlock; + int32_t rowIndex; +}; + typedef struct SSortHandle SSortHandle; typedef struct STupleHandle STupleHandle; diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 4cc1658e64..48b734f3aa 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -302,10 +302,6 @@ SSDataBlock* createOutputBuf_rv1(SDataBlockDescNode* pNode) { } taosArrayPush(pBlock->pDataBlock, &idata); - - if (IS_VAR_DATA_TYPE(idata.info.type)) { - pBlock->info.hasVarCol = true; - } } return pBlock; @@ -4748,7 +4744,8 @@ static void appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHan for (int32_t i = 0; i < pBlock->info.numOfCols; ++i) { SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, i); - bool isNull = tsortIsNullVal(pTupleHandle, i); + SColumnInfoData* pColInfoSrc = taosArrayGet(pTupleHandle->pBlock->pDataBlock, i); + bool isNull = colDataIsNull(pColInfoSrc, 0, pTupleHandle->rowIndex, NULL); if (isNull) { colDataAppend(pColInfo, pBlock->info.rows, NULL, true); } else { diff --git a/source/libs/executor/src/tsort.c b/source/libs/executor/src/tsort.c index a052cbe846..b226106e01 100644 --- a/source/libs/executor/src/tsort.c +++ b/source/libs/executor/src/tsort.c @@ -24,11 +24,6 @@ #include "tutil.h" #include "tcompare.h" -struct STupleHandle { - SSDataBlock* pBlock; - int32_t rowIndex; -}; - struct SSortHandle { int32_t type;