<fix>[query]: fix scalar function calculate bug in scalar module. td-14576
This commit is contained in:
parent
cd71bf4816
commit
94e19cc32a
|
@ -65,14 +65,14 @@ typedef struct SDataBlockInfo {
|
||||||
STimeWindow window;
|
STimeWindow window;
|
||||||
int32_t rows;
|
int32_t rows;
|
||||||
int32_t rowSize;
|
int32_t rowSize;
|
||||||
int16_t numOfCols;
|
|
||||||
int16_t hasVarCol;
|
|
||||||
int16_t capacity;
|
|
||||||
union {
|
union {
|
||||||
int64_t uid;
|
int64_t uid; // from which table of uid, comes from this data block
|
||||||
int64_t blockId;
|
int64_t blockId;
|
||||||
};
|
};
|
||||||
uint64_t groupId; // no need to serialize
|
uint64_t groupId; // no need to serialize
|
||||||
|
int16_t numOfCols;
|
||||||
|
int16_t hasVarCol;
|
||||||
|
int16_t capacity;
|
||||||
} SDataBlockInfo;
|
} SDataBlockInfo;
|
||||||
|
|
||||||
typedef struct SSDataBlock {
|
typedef struct SSDataBlock {
|
||||||
|
|
|
@ -3184,7 +3184,10 @@ void tsdbRetrieveDataBlockInfo(tsdbReaderT* pTsdbReadHandle, SDataBlockInfo* pDa
|
||||||
uid = pCheckInfo->tableId;
|
uid = pCheckInfo->tableId;
|
||||||
}
|
}
|
||||||
|
|
||||||
pDataBlockInfo->uid = uid;
|
tsdbDebug("data block generated, uid:%"PRIu64" numOfRows:%d, tsrange:%"PRId64" - %"PRId64" %s", uid, cur->rows, cur->win.skey,
|
||||||
|
cur->win.ekey, pHandle->idStr);
|
||||||
|
|
||||||
|
// pDataBlockInfo->uid = uid; // block Id may be over write by assigning uid fro this data block. Do NOT assign the table uid
|
||||||
pDataBlockInfo->rows = cur->rows;
|
pDataBlockInfo->rows = cur->rows;
|
||||||
pDataBlockInfo->window = cur->win;
|
pDataBlockInfo->window = cur->win;
|
||||||
pDataBlockInfo->numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pHandle));
|
pDataBlockInfo->numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pHandle));
|
||||||
|
|
|
@ -1270,7 +1270,7 @@ static void projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSData
|
||||||
SColumnInfoData* pColInfoData = taosArrayGet(pResult->pDataBlock, k);
|
SColumnInfoData* pColInfoData = taosArrayGet(pResult->pDataBlock, k);
|
||||||
colDataAssign(pColInfoData, pCtx[k].input.pData[0], pCtx[k].input.numOfRows);
|
colDataAssign(pColInfoData, pCtx[k].input.pData[0], pCtx[k].input.numOfRows);
|
||||||
|
|
||||||
pResult->info.rows = pCtx[0].input.numOfRows;
|
pResult->info.rows = pSrcBlock->info.rows;
|
||||||
} else if (pExpr[k].pExpr->nodeType == QUERY_NODE_VALUE) {
|
} else if (pExpr[k].pExpr->nodeType == QUERY_NODE_VALUE) {
|
||||||
SColumnInfoData* pColInfoData = taosArrayGet(pResult->pDataBlock, k);
|
SColumnInfoData* pColInfoData = taosArrayGet(pResult->pDataBlock, k);
|
||||||
for (int32_t i = 0; i < pSrcBlock->info.rows; ++i) {
|
for (int32_t i = 0; i < pSrcBlock->info.rows; ++i) {
|
||||||
|
|
|
@ -341,6 +341,7 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SExprInfo* pEx
|
||||||
pOperator->pExpr = pExprInfo;
|
pOperator->pExpr = pExprInfo;
|
||||||
pOperator->numOfOutput = numOfCols;
|
pOperator->numOfOutput = numOfCols;
|
||||||
pOperator->info = pInfo;
|
pOperator->info = pInfo;
|
||||||
|
pOperator->pTaskInfo = pTaskInfo;
|
||||||
pOperator->_openFn = operatorDummyOpenFn;
|
pOperator->_openFn = operatorDummyOpenFn;
|
||||||
pOperator->getNextFn = hashGroupbyAggregate;
|
pOperator->getNextFn = hashGroupbyAggregate;
|
||||||
pOperator->closeFn = destroyGroupOperatorInfo;
|
pOperator->closeFn = destroyGroupOperatorInfo;
|
||||||
|
|
|
@ -192,13 +192,23 @@ int32_t sclInitParam(SNode* node, SScalarParam *param, SScalarCtx *ctx, int32_t
|
||||||
}
|
}
|
||||||
|
|
||||||
SColumnNode *ref = (SColumnNode *)node;
|
SColumnNode *ref = (SColumnNode *)node;
|
||||||
if (ref->dataBlockId >= taosArrayGetSize(ctx->pBlockList)) {
|
|
||||||
|
int32_t index = -1;
|
||||||
|
for(int32_t i = 0; i < taosArrayGetSize(ctx->pBlockList); ++i) {
|
||||||
|
SSDataBlock* pb = taosArrayGetP(ctx->pBlockList, i);
|
||||||
|
if (pb->info.blockId == ref->dataBlockId) {
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index == -1) {
|
||||||
sclError("column tupleId is too big, tupleId:%d, dataBlockNum:%d", ref->dataBlockId, (int32_t)taosArrayGetSize(ctx->pBlockList));
|
sclError("column tupleId is too big, tupleId:%d, dataBlockNum:%d", ref->dataBlockId, (int32_t)taosArrayGetSize(ctx->pBlockList));
|
||||||
SCL_ERR_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
SCL_ERR_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
SSDataBlock *block = *(SSDataBlock **)taosArrayGet(ctx->pBlockList, ref->dataBlockId);
|
SSDataBlock *block = *(SSDataBlock **)taosArrayGet(ctx->pBlockList, index);
|
||||||
if (NULL == block || ref->slotId >= taosArrayGetSize(block->pDataBlock)) {
|
if (NULL == block || ref->slotId >= block->info.numOfCols) {
|
||||||
sclError("column slotId is too big, slodId:%d, dataBlockSize:%d", ref->slotId, (int32_t)taosArrayGetSize(block->pDataBlock));
|
sclError("column slotId is too big, slodId:%d, dataBlockSize:%d", ref->slotId, (int32_t)taosArrayGetSize(block->pDataBlock));
|
||||||
SCL_ERR_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
SCL_ERR_RET(TSDB_CODE_QRY_INVALID_INPUT);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue