diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index c87dab14d556f4f5af2024cea6de3da605bf04d9..d916204a1534e0d578cabc96f91fff3689aa5b36 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -81,7 +81,7 @@ void tsdbRowGetColVal(TSDBROW *pRow, STSchema *pTSchema, int32_t iCol, SColVa int32_t tPutTSDBRow(uint8_t *p, TSDBROW *pRow); int32_t tGetTSDBRow(uint8_t *p, TSDBROW *pRow); // SRowIter -#define tRowIterInit(ROW, SCHEMA) ((SRowIter){.pRow = (ROW), .pSchema = (SCHEMA)}) +void tRowIterInit(SRowIter *pIter, TSDBROW *pRow, STSchema *pTSchema); SColVal *tRowIterNext(SRowIter *pIter); // TABLEID int32_t tTABLEIDCmprFn(const void *p1, const void *p2); @@ -114,6 +114,7 @@ int32_t tGetBlockIdx(uint8_t *p, void *ph); void tColDataReset(SColData *pColData); void tColDataClear(void *ph); int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal); +void tColDataGetValue(SColData *pColData, int32_t iRow, SColVal *pColVal); int32_t tColDataCmprFn(const void *p1, const void *p2); // SBlockData int32_t tBlockDataInit(SBlockData *pBlockData); @@ -449,22 +450,26 @@ struct SBlockDataHdr { }; struct SHeadFile { + int64_t commitID; int64_t size; int64_t offset; int32_t nRef; }; struct SDataFile { + int64_t commitID; int64_t size; int32_t nRef; }; struct SLastFile { + int64_t commitID; int64_t size; int32_t nRef; }; struct SSmaFile { + int64_t commitID; int64_t size; int32_t nRef; }; @@ -481,7 +486,7 @@ struct SDFileSet { struct SRowIter { TSDBROW *pRow; - STSchema *pSchema; + STSchema *pTSchema; SColVal colVal; int32_t i; }; diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index cbc8c9424545e232c8fbc4b37859b30e558ce1e4..b9c7ec7ab8793a3a1e3a08099f86166277d202ba 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -583,6 +583,43 @@ int32_t tGetTSDBRow(uint8_t *p, TSDBROW *pRow) { return n; } +// SRowIter ====================================================== +void tRowIterInit(SRowIter *pIter, TSDBROW *pRow, STSchema *pTSchema) { + pIter->pRow = pRow; + if (pRow->type == 0) { + ASSERT(pTSchema); + pIter->pTSchema = pTSchema; + pIter->i = 1; + } else if (pRow->type == 1) { + pIter->pTSchema = NULL; + pIter->i = 0; + } else { + ASSERT(0); + } +} + +SColVal *tRowIterNext(SRowIter *pIter) { + if (pIter->pRow->type == 0) { + if (pIter->i < pIter->pTSchema->numOfCols) { + tsdbRowGetColVal(pIter->pRow, pIter->pTSchema, pIter->i, &pIter->colVal); + pIter->i++; + + return &pIter->colVal; + } + } else { + if (pIter->i < taosArrayGetSize(pIter->pRow->pBlockData->apColData)) { + SColData *pColData = (SColData *)taosArrayGetP(pIter->pRow->pBlockData->apColData, pIter->i); + + tColDataGetValue(pColData, pIter->pRow->iRow, &pIter->colVal); + pIter->i++; + + return &pIter->colVal; + } + } + + return NULL; +} + // delete skyline ====================================================== static int32_t tsdbMergeSkyline(SArray *aSkyline1, SArray *aSkyline2, SArray *aSkyline) { int32_t code = 0; @@ -731,6 +768,10 @@ int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal) { return code; } +void tColDataGetValue(SColData *pColData, int32_t iRow, SColVal *pColVal) { + // TODO +} + int32_t tColDataCmprFn(const void *p1, const void *p2) { if (((SColData *)p1)->cid < ((SColData *)p2)->cid) { return -1; @@ -834,14 +875,16 @@ int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS pBlockData->aVersion[nRow] = key.version; pBlockData->aTSKEY[nRow] = key.ts; -// OTHER -#if 0 - int32_t iColData = 0; - int32_t nColData = taosArrayGetSize(pBlockData->apColData); - SRowIter ri = tRowIterInit(pRow, pTSchema); + // OTHER + int32_t iColData = 0; + int32_t nColData = taosArrayGetSize(pBlockData->apColData); + SRowIter ri; + SColData *pColData; + SColVal *pColVal; - SColData *pColData = iColData < nColData ? (SColData *)taosArrayGetP(pBlockData->apColData, iColData) : NULL; - SColVal *pColVal = tRowIterNext(&ri); + tRowIterInit(&ri, pRow, pTSchema); + pColData = iColData < nColData ? (SColData *)taosArrayGetP(pBlockData->apColData, iColData) : NULL; + pColVal = tRowIterNext(&ri); while (true) { if (pColData && pColVal) { if (pColData->cid == pColVal->cid) { @@ -861,7 +904,6 @@ int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS // add a new SColData and append value } } -#endif return code;