fix: new group block to reset func input iter hasPrev

This commit is contained in:
slzhou 2024-03-29 17:01:56 +08:00
parent fe1a7e4b9c
commit b504627830
3 changed files with 11 additions and 8 deletions

View File

@ -212,11 +212,8 @@ typedef struct SFuncInputRowIter {
char* pPrevPk;
SSDataBlock* pPrevRowBlock; // pre one row block
//TODO:
// int32_t prevStartOffset; // for diff, derivative.
// SPoint1 prevStartPoint; // for twa.
// int32_t startOffset; // for diff, derivative.
// SPoint1 startPoint; // for twa.
uint64_t groupId;
bool hasGroupId;
bool finalRow;
} SFuncInputRowIter;

View File

@ -1306,6 +1306,7 @@ static void appendToRowIndexDataBlock(SSortHandle* pHandle, SSDataBlock* pSource
static void initRowIdSort(SSortHandle* pHandle) {
SBlockOrderInfo* pkOrder = (pHandle->bSortPk) ? taosArrayGet(pHandle->aExtRowsOrders, 1) : NULL;
SColumnInfoData* extPkCol = (pHandle->bSortPk) ? taosArrayGet(pHandle->pDataBlock->pDataBlock, pkOrder->slotId) : NULL;
SColumnInfoData pkCol = {0};
SSDataBlock* pSortInput = createDataBlock();
SColumnInfoData tsCol = createColumnInfoData(TSDB_DATA_TYPE_TIMESTAMP, 8, 1);
@ -1317,7 +1318,7 @@ static void initRowIdSort(SSortHandle* pHandle) {
SColumnInfoData lengthCol = createColumnInfoData(TSDB_DATA_TYPE_INT, 4, 4);
blockDataAppendColInfo(pSortInput, &lengthCol);
if (pHandle->bSortPk) {
SColumnInfoData pkCol = createColumnInfoData(extPkCol->info.type, extPkCol->info.bytes, 5);
pkCol = createColumnInfoData(extPkCol->info.type, extPkCol->info.bytes, 5);
blockDataAppendColInfo(pSortInput, &pkCol);
}
blockDataDestroy(pHandle->pDataBlock);
@ -1343,7 +1344,7 @@ static void initRowIdSort(SSortHandle* pHandle) {
biPk.order = pkOrder->order;
biPk.slotId = 4;
biPk.nullFirst = (biPk.order == TSDB_ORDER_ASC);
biPk.compFn = getKeyComparFunc(extPkCol->info.type, biPk.order);
biPk.compFn = getKeyComparFunc(pkCol.info.type, biPk.order);
taosArrayPush(aOrder, &biPk);
}
taosArrayDestroy(pHandle->pSortInfo);

View File

@ -434,7 +434,12 @@ int32_t funcInputUpdate(SqlFunctionCtx* pCtx) {
pIter->pPkCol = pIter->pInput->pPrimaryKey;
pIter->rowIndex = pIter->pInput->startRowIndex;
pIter->inputEndIndex = pIter->rowIndex + pIter->pInput->numOfRows - 1;
pIter->pSrcBlock = pCtx->pSrcBlock;
pIter->pSrcBlock = pCtx->pSrcBlock;
if (!pIter->hasGroupId || pIter->groupId != pIter->pSrcBlock->info.id.groupId) {
pIter->hasGroupId = true;
pIter->groupId = pIter->pSrcBlock->info.id.groupId;
pIter->hasPrev = false;
}
} else {
pIter->finalRow = true;
}