<fix>: fix index map error from table scan to sort output
This commit is contained in:
parent
65a2131493
commit
460d43f22c
|
@ -315,6 +315,7 @@ int32_t blockDataUpdateTsWindow(SSDataBlock* pDataBlock) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if pIndexMap = NULL, merger one column by on column
|
||||||
int32_t blockDataMerge(SSDataBlock* pDest, const SSDataBlock* pSrc, SArray* pIndexMap) {
|
int32_t blockDataMerge(SSDataBlock* pDest, const SSDataBlock* pSrc, SArray* pIndexMap) {
|
||||||
assert(pSrc != NULL && pDest != NULL);
|
assert(pSrc != NULL && pDest != NULL);
|
||||||
|
|
||||||
|
@ -380,17 +381,18 @@ int32_t blockDataSplitRows(SSDataBlock* pBlock, bool hasVarCol, int32_t startInd
|
||||||
size_t payloadSize = pageSize - (headerSize + colHeaderSize);
|
size_t payloadSize = pageSize - (headerSize + colHeaderSize);
|
||||||
|
|
||||||
// TODO speedup by checking if the whole page can fit in firstly.
|
// TODO speedup by checking if the whole page can fit in firstly.
|
||||||
/*if (!hasVarCol) {
|
if (!hasVarCol) {
|
||||||
size_t rowSize = blockDataGetRowSize(pBlock);
|
size_t rowSize = blockDataGetRowSize(pBlock);
|
||||||
int32_t capacity = (payloadSize / (rowSize * 8 + bitmapChar * numOfCols)) * 8; //if pageSize = 128, rowSize = 2, it will core in doAddToBuf:assert(size <= getBufPageSize(pHandle->pBuf));
|
int32_t capacity = payloadSize / (rowSize + numOfCols * bitmapChar / 8.0);
|
||||||
|
ASSERT(capacity > 0);
|
||||||
|
|
||||||
*stopIndex = startIndex + capacity;
|
*stopIndex = startIndex + capacity - 1;
|
||||||
if (*stopIndex >= numOfRows) {
|
if (*stopIndex >= numOfRows) {
|
||||||
*stopIndex = numOfRows - 1;
|
*stopIndex = numOfRows - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}*/
|
}
|
||||||
// iterate the rows that can be fit in this buffer page
|
// iterate the rows that can be fit in this buffer page
|
||||||
int32_t size = (headerSize + colHeaderSize);
|
int32_t size = (headerSize + colHeaderSize);
|
||||||
|
|
||||||
|
@ -532,7 +534,7 @@ int32_t blockDataFromBuf(SSDataBlock* pBlock, const char* buf) {
|
||||||
|
|
||||||
size_t metaSize = pBlock->info.rows * sizeof(int32_t);
|
size_t metaSize = pBlock->info.rows * sizeof(int32_t);
|
||||||
if (IS_VAR_DATA_TYPE(pCol->info.type)) {
|
if (IS_VAR_DATA_TYPE(pCol->info.type)) {
|
||||||
char* tmp = taosMemoryRealloc(pCol->varmeta.offset, metaSize);
|
char* tmp = taosMemoryRealloc(pCol->varmeta.offset, metaSize); // preview calloc is too small
|
||||||
if (tmp == NULL) {
|
if (tmp == NULL) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,11 +52,6 @@ typedef struct SMsortComparParam {
|
||||||
SArray *orderInfo; // SArray<SBlockOrderInfo>
|
SArray *orderInfo; // SArray<SBlockOrderInfo>
|
||||||
} SMsortComparParam;
|
} SMsortComparParam;
|
||||||
|
|
||||||
struct STupleHandle {
|
|
||||||
SSDataBlock* pBlock;
|
|
||||||
int32_t rowIndex;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct SSortHandle SSortHandle;
|
typedef struct SSortHandle SSortHandle;
|
||||||
typedef struct STupleHandle STupleHandle;
|
typedef struct STupleHandle STupleHandle;
|
||||||
|
|
||||||
|
|
|
@ -4734,8 +4734,7 @@ static void appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHan
|
||||||
for (int32_t i = 0; i < pBlock->info.numOfCols; ++i) {
|
for (int32_t i = 0; i < pBlock->info.numOfCols; ++i) {
|
||||||
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, i);
|
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, i);
|
||||||
|
|
||||||
SColumnInfoData* pColInfoSrc = taosArrayGet(pTupleHandle->pBlock->pDataBlock, i);
|
bool isNull = tsortIsNullVal(pTupleHandle, i);
|
||||||
bool isNull = colDataIsNull(pColInfoSrc, 0, pTupleHandle->rowIndex, NULL);
|
|
||||||
if (isNull) {
|
if (isNull) {
|
||||||
colDataAppend(pColInfo, pBlock->info.rows, NULL, true);
|
colDataAppend(pColInfo, pBlock->info.rows, NULL, true);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -24,6 +24,11 @@
|
||||||
#include "tutil.h"
|
#include "tutil.h"
|
||||||
#include "tcompare.h"
|
#include "tcompare.h"
|
||||||
|
|
||||||
|
struct STupleHandle {
|
||||||
|
SSDataBlock* pBlock;
|
||||||
|
int32_t rowIndex;
|
||||||
|
};
|
||||||
|
|
||||||
struct SSortHandle {
|
struct SSortHandle {
|
||||||
int32_t type;
|
int32_t type;
|
||||||
|
|
||||||
|
@ -678,7 +683,8 @@ STupleHandle* tsortNextTuple(SSortHandle* pHandle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tsortIsNullVal(STupleHandle* pVHandle, int32_t colIndex) {
|
bool tsortIsNullVal(STupleHandle* pVHandle, int32_t colIndex) {
|
||||||
return false;
|
SColumnInfoData* pColInfoSrc = taosArrayGet(pVHandle->pBlock->pDataBlock, colIndex);
|
||||||
|
return colDataIsNull(pColInfoSrc, 0, pVHandle->rowIndex, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* tsortGetValue(STupleHandle* pVHandle, int32_t colIndex) {
|
void* tsortGetValue(STupleHandle* pVHandle, int32_t colIndex) {
|
||||||
|
|
Loading…
Reference in New Issue