提交 5a1681d9 编写于 作者: G Ganlin Zhao

fix data block not properly saved

上级 7b01cad0
...@@ -39,7 +39,7 @@ typedef struct STimeSliceOperatorInfo { ...@@ -39,7 +39,7 @@ typedef struct STimeSliceOperatorInfo {
int64_t prevTs; int64_t prevTs;
bool prevTsSet; bool prevTsSet;
uint64_t groupId; uint64_t groupId;
SSDataBlock* pCurrentGroupRes; SSDataBlock* pPrevGroupRes;
SSDataBlock* pNextGroupRes; SSDataBlock* pNextGroupRes;
} STimeSliceOperatorInfo; } STimeSliceOperatorInfo;
...@@ -640,6 +640,11 @@ static void genInterpAfterDataBlock(STimeSliceOperatorInfo* pSliceInfo, SOperato ...@@ -640,6 +640,11 @@ static void genInterpAfterDataBlock(STimeSliceOperatorInfo* pSliceInfo, SOperato
} }
} }
static void copyPrevGroupDataBlock(SSDataBlock* pDstBlock, SSDataBlock* pSrcBlock) {
blockDataCleanup(pDstBlock);
assignOneDataBlock(pDstBlock, pSrcBlock);
}
static void resetTimesliceInfo(STimeSliceOperatorInfo* pSliceInfo) { static void resetTimesliceInfo(STimeSliceOperatorInfo* pSliceInfo) {
pSliceInfo->current = pSliceInfo->win.skey; pSliceInfo->current = pSliceInfo->win.skey;
pSliceInfo->prevTsSet = false; pSliceInfo->prevTsSet = false;
...@@ -667,7 +672,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) { ...@@ -667,7 +672,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
if (pSliceInfo->pNextGroupRes != NULL) { if (pSliceInfo->pNextGroupRes != NULL) {
setInputDataBlock(pSup, pSliceInfo->pNextGroupRes, order, MAIN_SCAN, true); setInputDataBlock(pSup, pSliceInfo->pNextGroupRes, order, MAIN_SCAN, true);
doTimesliceImpl(pOperator, pSliceInfo, pSliceInfo->pNextGroupRes, pTaskInfo); doTimesliceImpl(pOperator, pSliceInfo, pSliceInfo->pNextGroupRes, pTaskInfo);
pSliceInfo->pCurrentGroupRes = pSliceInfo->pNextGroupRes; copyPrevGroupDataBlock(pSliceInfo->pPrevGroupRes, pSliceInfo->pNextGroupRes);
pSliceInfo->pNextGroupRes = NULL; pSliceInfo->pNextGroupRes = NULL;
} }
...@@ -701,13 +706,13 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) { ...@@ -701,13 +706,13 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
// the pDataBlock are always the same one, no need to call this again // the pDataBlock are always the same one, no need to call this again
setInputDataBlock(pSup, pBlock, order, MAIN_SCAN, true); setInputDataBlock(pSup, pBlock, order, MAIN_SCAN, true);
doTimesliceImpl(pOperator, pSliceInfo, pBlock, pTaskInfo); doTimesliceImpl(pOperator, pSliceInfo, pBlock, pTaskInfo);
pSliceInfo->pCurrentGroupRes = pBlock; copyPrevGroupDataBlock(pSliceInfo->pPrevGroupRes, pBlock);
} }
// check if need to interpolate after last datablock // check if need to interpolate after last datablock
// except for fill(next), fill(linear) // except for fill(next), fill(linear)
genInterpAfterDataBlock(pSliceInfo, pOperator, pSliceInfo->pCurrentGroupRes, genInterpAfterDataBlock(pSliceInfo, pOperator, pSliceInfo->pPrevGroupRes,
pSliceInfo->pCurrentGroupRes->info.rows - 1); pSliceInfo->pPrevGroupRes->info.rows - 1);
doFilter(pResBlock, pOperator->exprSupp.pFilterInfo, NULL); doFilter(pResBlock, pOperator->exprSupp.pFilterInfo, NULL);
if (pOperator->status == OP_EXEC_DONE) { if (pOperator->status == OP_EXEC_DONE) {
...@@ -771,8 +776,8 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode ...@@ -771,8 +776,8 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
pInfo->prevTsSet = false; pInfo->prevTsSet = false;
pInfo->prevTs = 0; pInfo->prevTs = 0;
pInfo->groupId = 0; pInfo->groupId = 0;
pInfo->pPrevGroupRes = createDataBlock();
pInfo->pNextGroupRes = NULL; pInfo->pNextGroupRes = NULL;
pInfo->pCurrentGroupRes = NULL;
if (downstream->operatorType == QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN) { if (downstream->operatorType == QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN) {
STableScanInfo* pScanInfo = (STableScanInfo*)downstream->info; STableScanInfo* pScanInfo = (STableScanInfo*)downstream->info;
...@@ -801,6 +806,7 @@ void destroyTimeSliceOperatorInfo(void* param) { ...@@ -801,6 +806,7 @@ void destroyTimeSliceOperatorInfo(void* param) {
STimeSliceOperatorInfo* pInfo = (STimeSliceOperatorInfo*)param; STimeSliceOperatorInfo* pInfo = (STimeSliceOperatorInfo*)param;
pInfo->pRes = blockDataDestroy(pInfo->pRes); pInfo->pRes = blockDataDestroy(pInfo->pRes);
pInfo->pPrevGroupRes = blockDataDestroy(pInfo->pPrevGroupRes);
for (int32_t i = 0; i < taosArrayGetSize(pInfo->pPrevRow); ++i) { for (int32_t i = 0; i < taosArrayGetSize(pInfo->pPrevRow); ++i) {
SGroupKeys* pKey = taosArrayGet(pInfo->pPrevRow, i); SGroupKeys* pKey = taosArrayGet(pInfo->pPrevRow, i);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册