more work
This commit is contained in:
parent
e29651f032
commit
50e615915a
|
@ -55,6 +55,10 @@ typedef struct SReadH SReadH;
|
||||||
|
|
||||||
#define TSDB_MAX_SUBBLOCKS 8
|
#define TSDB_MAX_SUBBLOCKS 8
|
||||||
|
|
||||||
|
#define HAS_NONE ((int8_t)0x1)
|
||||||
|
#define HAS_NULL ((int8_t)0x2)
|
||||||
|
#define HAS_VALUE ((int8_t)0x4)
|
||||||
|
|
||||||
// tsdbMemTable ==============================================================================================
|
// tsdbMemTable ==============================================================================================
|
||||||
|
|
||||||
// SMemTable
|
// SMemTable
|
||||||
|
@ -185,6 +189,10 @@ int32_t tPutBlock(uint8_t *p, void *ph);
|
||||||
int32_t tGetBlock(uint8_t *p, void *ph);
|
int32_t tGetBlock(uint8_t *p, void *ph);
|
||||||
int32_t tBlockCmprFn(const void *p1, const void *p2);
|
int32_t tBlockCmprFn(const void *p1, const void *p2);
|
||||||
|
|
||||||
|
// SBlockCol
|
||||||
|
int32_t tPutBlockCol(uint8_t *p, void *ph);
|
||||||
|
int32_t tGetBlockCol(uint8_t *p, void *ph);
|
||||||
|
|
||||||
// SBlockData
|
// SBlockData
|
||||||
#define tsdbBlockDataCreate() ((SBlockData){0})
|
#define tsdbBlockDataCreate() ((SBlockData){0})
|
||||||
void tsdbBlockDataClear(SBlockData *pBlockData);
|
void tsdbBlockDataClear(SBlockData *pBlockData);
|
||||||
|
@ -306,9 +314,28 @@ struct SBlockIdx {
|
||||||
int64_t size;
|
int64_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SMapData {
|
||||||
|
int32_t nItem;
|
||||||
|
uint8_t flag;
|
||||||
|
uint8_t *pOfst;
|
||||||
|
uint32_t nData;
|
||||||
|
uint8_t *pData;
|
||||||
|
uint8_t *pBuf;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
int16_t cid;
|
||||||
|
int8_t type;
|
||||||
|
int8_t flag;
|
||||||
int64_t offset;
|
int64_t offset;
|
||||||
int64_t size;
|
int64_t size;
|
||||||
|
} SBlockCol;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t offset;
|
||||||
|
int64_t ksize;
|
||||||
|
int64_t bsize;
|
||||||
|
SMapData mBlockCol; // SMapData<SBlockCol>
|
||||||
} SSubBlock;
|
} SSubBlock;
|
||||||
|
|
||||||
struct SBlock {
|
struct SBlock {
|
||||||
|
@ -317,9 +344,11 @@ struct SBlock {
|
||||||
int8_t last;
|
int8_t last;
|
||||||
int8_t hasDup;
|
int8_t hasDup;
|
||||||
int8_t nSubBlock;
|
int8_t nSubBlock;
|
||||||
SSubBlock sBlocks[TSDB_MAX_SUBBLOCKS];
|
SSubBlock aSubBlock[TSDB_MAX_SUBBLOCKS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int a = sizeof(SBlock);
|
||||||
|
|
||||||
struct SAggrBlkCol {
|
struct SAggrBlkCol {
|
||||||
int16_t colId;
|
int16_t colId;
|
||||||
int16_t maxIndex;
|
int16_t maxIndex;
|
||||||
|
@ -393,15 +422,6 @@ struct SDelFile {
|
||||||
int64_t offset;
|
int64_t offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SMapData {
|
|
||||||
int32_t nItem;
|
|
||||||
uint8_t flag;
|
|
||||||
uint8_t *pOfst;
|
|
||||||
uint32_t nData;
|
|
||||||
uint8_t *pData;
|
|
||||||
uint8_t *pBuf;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int16_t colId;
|
int16_t colId;
|
||||||
int16_t maxIndex;
|
int16_t maxIndex;
|
||||||
|
|
|
@ -723,8 +723,48 @@ _err:
|
||||||
|
|
||||||
int32_t tsdbWriteBlockData(SDataFWriter *pWriter, SBlockData *pBlockData, uint8_t **ppBuf, SBlockIdx *pBlockIdx,
|
int32_t tsdbWriteBlockData(SDataFWriter *pWriter, SBlockData *pBlockData, uint8_t **ppBuf, SBlockIdx *pBlockIdx,
|
||||||
SBlock *pBlock) {
|
SBlock *pBlock) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
// TODO
|
SSubBlock *pSubBlock = &pBlock->aSubBlock[pBlock->nSubBlock++];
|
||||||
|
SBlockCol bCol;
|
||||||
|
|
||||||
|
pSubBlock->offset = 0;
|
||||||
|
pSubBlock->ksize = 0;
|
||||||
|
pSubBlock->bsize = 0;
|
||||||
|
tMapDataClear(&pSubBlock->mBlockCol);
|
||||||
|
|
||||||
|
// TSDBKEY
|
||||||
|
|
||||||
|
// other columns
|
||||||
|
for (int32_t iCol = 0; iCol < pBlockData->nCol; iCol++) {
|
||||||
|
SColData *pColData = &pBlockData->aColData[iCol];
|
||||||
|
|
||||||
|
ASSERT(pColData->flags);
|
||||||
|
|
||||||
|
if (pColData->flags == HAS_NONE) continue;
|
||||||
|
|
||||||
|
bCol.cid = pColData->cid;
|
||||||
|
bCol.type = pColData->type;
|
||||||
|
bCol.flag = pColData->flags;
|
||||||
|
|
||||||
|
if (pColData->flags != HAS_NULL) {
|
||||||
|
if (pColData->flags != HAS_VALUE) {
|
||||||
|
// handle bitmap
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle real data
|
||||||
|
|
||||||
|
// bCol.offset = ;
|
||||||
|
// bCol.size = ;
|
||||||
|
}
|
||||||
|
|
||||||
|
code = tMapDataPutItem(&pSubBlock->mBlockCol, &bCol, tPutBlockCol);
|
||||||
|
if (code) goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
|
|
||||||
|
_err:
|
||||||
|
tsdbError("vgId:%d write block data failed since %s", pWriter->pTsdb, tstrerror(code));
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -277,14 +277,14 @@ int32_t tGetBlockIdx(uint8_t *p, void *ph) {
|
||||||
// SBlock ======================================================
|
// SBlock ======================================================
|
||||||
int32_t tPutBlock(uint8_t *p, void *ph) {
|
int32_t tPutBlock(uint8_t *p, void *ph) {
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
ASSERT(0);
|
SBlock *pBlock = (SBlock *)ph;
|
||||||
// TODO
|
// TODO
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tGetBlock(uint8_t *p, void *ph) {
|
int32_t tGetBlock(uint8_t *p, void *ph) {
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
ASSERT(0);
|
SBlock *pBlock = (SBlock *)ph;
|
||||||
// TODO
|
// TODO
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
@ -303,6 +303,43 @@ int32_t tBlockCmprFn(const void *p1, const void *p2) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SBlockCol ======================================================
|
||||||
|
int32_t tPutBlockCol(uint8_t *p, void *ph) {
|
||||||
|
int32_t n = 0;
|
||||||
|
SBlockCol *pBlockCol = (SBlockCol *)ph;
|
||||||
|
|
||||||
|
ASSERT(pBlockCol->flag && (pBlockCol->flag != HAS_NONE));
|
||||||
|
|
||||||
|
n += tPutI16v(p ? p + n : p, pBlockCol->cid);
|
||||||
|
n += tPutI8(p ? p + n : p, pBlockCol->type);
|
||||||
|
n += tPutI8(p ? p + n : p, pBlockCol->flag);
|
||||||
|
|
||||||
|
if (pBlockCol->flag != HAS_NULL) {
|
||||||
|
n += tPutI64v(p ? p + n : p, pBlockCol->offset);
|
||||||
|
n += tPutI64v(p ? p + n : p, pBlockCol->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t tGetBlockCol(uint8_t *p, void *ph) {
|
||||||
|
int32_t n = 0;
|
||||||
|
SBlockCol *pBlockCol = (SBlockCol *)ph;
|
||||||
|
|
||||||
|
n += tGetI16v(p + n, &pBlockCol->cid);
|
||||||
|
n += tGetI8(p + n, &pBlockCol->type);
|
||||||
|
n += tGetI8(p + n, &pBlockCol->flag);
|
||||||
|
|
||||||
|
ASSERT(pBlockCol->flag && (pBlockCol->flag != HAS_NONE));
|
||||||
|
|
||||||
|
if (pBlockCol->flag != HAS_NULL) {
|
||||||
|
n += tGetI64v(p + n, &pBlockCol->offset);
|
||||||
|
n += tGetI64v(p + n, &pBlockCol->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
// SDelIdx ======================================================
|
// SDelIdx ======================================================
|
||||||
int32_t tPutDelIdx(uint8_t *p, void *ph) {
|
int32_t tPutDelIdx(uint8_t *p, void *ph) {
|
||||||
SDelIdx *pDelIdx = (SDelIdx *)ph;
|
SDelIdx *pDelIdx = (SDelIdx *)ph;
|
||||||
|
|
Loading…
Reference in New Issue