提交 20a86520 编写于 作者: C Cary Xu

load sblock

上级 181e2b0c
......@@ -122,6 +122,7 @@ typedef struct {
uint8_t offsetH;
char padding[1];
} SBlockColV0;
typedef struct {
int16_t colId;
int32_t len;
......@@ -239,7 +240,7 @@ int tsdbLoadBlockInfo(SReadH *pReadh, void **pTarget, int32_t *extendedLen);
int tsdbLoadBlockData(SReadH *pReadh, SBlock *pBlock, SBlockInfo *pBlockInfo);
int tsdbLoadBlockDataCols(SReadH *pReadh, SBlock *pBlock, SBlockInfo *pBlkInfo, int16_t *colIds, int numOfColsIds);
int tsdbLoadBlockStatis(SReadH *pReadh, SBlock *pBlock);
// int tsdbLoadBlockHead(SReadH *pReadh, SBlock *pBlock);
int tsdbLoadBlockOffset(SReadH *pReadh, SBlock *pBlock);
int tsdbEncodeSBlockIdx(void **buf, SBlockIdx *pIdx);
void *tsdbDecodeSBlockIdx(void *buf, SBlockIdx *pIdx);
void tsdbGetBlockStatis(SReadH *pReadh, SDataStatis *pStatis, int numOfCols, SBlock *pBlock);
......
......@@ -985,7 +985,7 @@ static bool tsdbIsTFileInFS(STsdbFS *pfs, const TFILE *pf) {
SDFileSet *pSet;
while ((pSet = tsdbFSIterNext(&fsiter))) {
for (TSDB_FILE_T ftype = 0; ftype < TSDB_FILE_MAX; ftype++) {
for (TSDB_FILE_T ftype = 0; ftype < pSet->nFiles; ftype++) {
SDFile *pDFile = TSDB_DFILE_IN_SET(pSet, ftype);
if (tfsIsSameFile(pf, TSDB_FILE_F(pDFile))) {
return true;
......
......@@ -25,6 +25,8 @@ static int tsdbCheckAndDecodeColumnData(SDataCol *pDataCol, void *content, int3
static int tsdbLoadBlockDataColsImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *pDataCols, int16_t *colIds,
int numOfColIds);
static int tsdbLoadColData(SReadH *pReadh, SDFile *pDFile, SBlock *pBlock, SBlockCol *pBlockCol, SDataCol *pDataCol);
static int tsdbLoadBlockStatisFromDFile(SReadH *pReadh, SBlock *pBlock);
static int tsdbLoadBlockStatisFromAggr(SReadH *pReadh, SBlock *pBlock);
int tsdbInitReadH(SReadH *pReadh, STsdbRepo *pRepo) {
ASSERT(pReadh != NULL && pRepo != NULL);
......@@ -492,23 +494,22 @@ static int tsdbLoadBlockStatisFromAggr(SReadH *pReadh, SBlock *pBlock) {
int tsdbLoadBlockStatis(SReadH *pReadh, SBlock *pBlock) {
ASSERT(pBlock->numOfSubBlocks <= 1);
if (pBlock->blkVer == TSDB_SBLK_VER_0) {
return tsdbLoadBlockStatisFromDFile(pReadh, pBlock);
}
if (tsdbLoadBlockStatisFromDFile(pReadh, pBlock) < 0) {
return -1;
if (pBlock->blkVer > TSDB_SBLK_VER_0) {
tsdbLoadBlockStatisFromAggr(pReadh, pBlock);
}
return tsdbLoadBlockStatisFromAggr(pReadh, pBlock);
return tsdbLoadBlockStatisFromDFile(pReadh, pBlock);
}
// int tsdbLoadBlockHead(SReadH *pReadh, SBlock *pBlock) {
// ASSERT(pBlock->numOfSubBlocks <= 1);
// if (pBlock->blkVer >= TSDB_SBLK_VER_1) {
// return tsdbLoadBlockStatisFromDFile(pReadh, pBlock);
// }
// return 0;
// }
int tsdbLoadBlockOffset(SReadH *pReadh, SBlock *pBlock) {
ASSERT(pBlock->numOfSubBlocks <= 1);
if (pBlock->blkVer > TSDB_SBLK_VER_0) {
return tsdbLoadBlockStatisFromDFile(pReadh, pBlock);
}
return 0;
}
int tsdbEncodeSBlockIdx(void **buf, SBlockIdx *pIdx) {
int tlen = 0;
......@@ -758,7 +759,7 @@ static int tsdbLoadBlockDataColsImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *
tdResetDataCols(pDataCols);
// If only load timestamp column, no need to load SBlockData part
if (numOfColIds > 1 && tsdbLoadBlockStatis(pReadh, pBlock) < 0) return -1;
if (numOfColIds > 1 && tsdbLoadBlockOffset(pReadh, pBlock) < 0) return -1;
pDataCols->numOfRows = pBlock->numOfRows;
......@@ -800,7 +801,18 @@ static int tsdbLoadBlockDataColsImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *
break;
}
pBlockCol = &(pReadh->pBlkData->cols[ccol]);
if (pBlock->blkVer == SBlockVerLatest) {
pBlockCol = &(pReadh->pBlkData->cols[ccol]);
} else {
SBlockColV0 *pBlkCol = ((SBlockColV0 *)(pReadh->pBlkData->cols)) + ccol;
blockCol.colId = pBlkCol->colId;
blockCol.len = pBlkCol->len;
blockCol.type = pBlkCol->type;
blockCol.offset = pBlkCol->offset;
blockCol.offsetH = pBlkCol->offsetH;
pBlockCol = &blockCol;
}
if (pBlockCol->colId > colId) {
pBlockCol = NULL;
break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册