more work

This commit is contained in:
Hongze Cheng 2022-06-20 12:17:22 +00:00
parent 5028420791
commit 4cacd72fcb
2 changed files with 114 additions and 44 deletions

View File

@ -52,7 +52,6 @@ typedef struct SAggrBlkCol SAggrBlkCol;
typedef struct SColData SColData; typedef struct SColData SColData;
typedef struct SBlockDataHdr SBlockDataHdr; typedef struct SBlockDataHdr SBlockDataHdr;
typedef struct SBlockData SBlockData; typedef struct SBlockData SBlockData;
typedef struct SReadH SReadH;
typedef struct SDelFile SDelFile; typedef struct SDelFile SDelFile;
typedef struct STsdbCacheFile STsdbCacheFile; typedef struct STsdbCacheFile STsdbCacheFile;
typedef struct SHeadFile SHeadFile; typedef struct SHeadFile SHeadFile;
@ -365,6 +364,7 @@ struct SBlockData {
TSKEY *aTSKEY; TSKEY *aTSKEY;
int32_t maxCol; int32_t maxCol;
int32_t nColData; int32_t nColData;
SColData **apColData;
SColData *aColData; SColData *aColData;
}; };

View File

@ -489,11 +489,11 @@ void tsdbFidKeyRange(int32_t fid, int32_t minutes, int8_t precision, TSKEY *minK
// TSDBROW ====================================================== // TSDBROW ======================================================
TSDBKEY tsdbRowKey(TSDBROW *pRow) { TSDBKEY tsdbRowKey(TSDBROW *pRow) {
// if (pRow->type == 0) { if (pRow->type == 0) {
return (TSDBKEY){.version = pRow->version, .ts = pRow->pTSRow->ts}; return (TSDBKEY){.version = pRow->version, .ts = pRow->pTSRow->ts};
// } else { } else {
// return (TSDBKEY){.version = pRow->pBlockData->aVersion[pRow->iRow], .ts = pRow->pBlockData->aTSKEY[pRow->iRow]}; return (TSDBKEY){.version = pRow->pBlockData->aVersion[pRow->iRow], .ts = pRow->pBlockData->aTSKEY[pRow->iRow]};
// } }
} }
void tsdbRowGetColVal(TSDBROW *pRow, STSchema *pTSchema, int32_t iCol, SColVal *pColVal) { void tsdbRowGetColVal(TSDBROW *pRow, STSchema *pTSchema, int32_t iCol, SColVal *pColVal) {
@ -702,21 +702,97 @@ int32_t tGetKEYINFO(uint8_t *p, KEYINFO *pKeyInfo) {
return n; return n;
} }
// SColData ========================================
void tColDataReset(SColData *pColData) {
// TODO
}
void tColDataClear(SColData *pColData) {
// TODO
}
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal) {
int32_t code = 0;
// TODO
return code;
}
int32_t tColDataCmprFn(const void *p1, const void *p2) {
if (((SColData *)p1)->cid < ((SColData *)p2)->cid) {
return -1;
} else if (((SColData *)p1)->cid > ((SColData *)p2)->cid) {
return 1;
}
return 0;
}
// SBlockData ====================================================== // SBlockData ======================================================
static int32_t tsdbBlockDataAppendRow0(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTSchema) { static int32_t tBlockDataAddColData(SBlockData *pBlockData, int32_t iColData) {
int32_t code = 0;
int32_t nColData = pBlockData->nColData;
pBlockData->nColData++;
if (pBlockData->nColData > pBlockData->maxCol) {
if (pBlockData->maxCol == 0) {
pBlockData->maxCol = 16;
} else {
pBlockData->maxCol *= 2;
}
code = tsdbRealloc((uint8_t **)&pBlockData->apColData, sizeof(SColData *) * pBlockData->maxCol);
if (code) goto _exit;
code = tsdbRealloc((uint8_t **)&pBlockData->aColData, sizeof(SColData) * pBlockData->maxCol);
if (code) goto _exit;
for (int32_t iColData = nColData; iColData < pBlockData->maxCol; iColData++) {
pBlockData->aColData[iColData] = tColDataInit();
}
}
// memmove (todo)
// int32_t size = sizeof(SColData *) * (nColData - iColData);
// if (size) {
// memmove();
// }
pBlockData->apColData[iColData] = &pBlockData->aColData[nColData];
_exit:
return code;
}
static int32_t tBlockDataAppendRow0(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTSchema) {
int32_t code = 0; int32_t code = 0;
int32_t nRow = pBlockData->nRow; int32_t nRow = pBlockData->nRow;
TSDBKEY key = tsdbRowKey(pRow); TSDBKEY key = tsdbRowKey(pRow);
int32_t iColumn; int32_t iColumn;
int32_t nColumn; int32_t nColumn;
int32_t iColData; int32_t iColData;
SColVal cv; SColVal colVal;
SColVal *pColVal = &colVal;
ASSERT(pTSchema); ASSERT(pTSchema);
ASSERT(pTSchema->version == TSDBROW_SVERSION(pRow));
pBlockData->nRow++; pBlockData->nRow++;
// TSDBKEY (todo) // TSDBKEY
if (pBlockData->nRow > pBlockData->maxRow) {
if (pBlockData->maxRow == 0) {
pBlockData->maxRow = 1024;
} else {
pBlockData->maxRow *= 2;
}
ASSERT(pBlockData->maxRow >= pBlockData->nRow);
code = tsdbRealloc((uint8_t **)&pBlockData->aTSKEY, sizeof(TSKEY) * pBlockData->maxRow);
if (code) goto _err;
code = tsdbRealloc((uint8_t **)&pBlockData->aVersion, sizeof(int64_t) * pBlockData->maxRow);
if (code) goto _err;
}
pBlockData->aVersion[nRow] = key.version; pBlockData->aVersion[nRow] = key.version;
pBlockData->aTSKEY[nRow] = key.ts; pBlockData->aTSKEY[nRow] = key.ts;
@ -737,14 +813,14 @@ static int32_t tsdbBlockDataAppendRow0(SBlockData *pBlockData, TSDBROW *pRow, ST
if (pTColumn && pColData) { if (pTColumn && pColData) {
if (pTColumn->colId == pColData->cid) { if (pTColumn->colId == pColData->cid) {
tsdbRowGetColVal(pRow, pTSchema, iColumn, &cv); // tsdbRowGetColVal(pRow, pTSchema, iColumn, &cv);
} else if (pTColumn->colId < pColData->cid) { } else if (pTColumn->colId < pColData->cid) {
// add a new SColData, and append the column value cv to the SColData // add a new SColData, and append the column value cv to the SColData
} else { } else {
// add a None to the column value // add a None to the column value
} }
} else if (pTColumn) { } else if (pTColumn) {
tsdbRowGetColVal(pRow, pTSchema, iColumn, &cv); // tsdbRowGetColVal(pRow, pTSchema, iColumn, &cv);
// add a new SColData, and append the column value cv to the SColData // add a new SColData, and append the column value cv to the SColData
} else { } else {
iColData++; iColData++;
@ -752,15 +828,20 @@ static int32_t tsdbBlockDataAppendRow0(SBlockData *pBlockData, TSDBROW *pRow, ST
} }
return code; return code;
_err:
return code;
} }
static int32_t tsdbBlockDataAppendRow1(SBlockData *pBlockData, TSDBROW *pRow) { static int32_t tBlockDataAppendRow1(SBlockData *pBlockData, TSDBROW *pRow) {
int32_t code = 0; int32_t code = 0;
int32_t nRow = pBlockData->nRow; int32_t nRow = pBlockData->nRow;
TSDBKEY key = tsdbRowKey(pRow); TSDBKEY key = tsdbRowKey(pRow);
int32_t iColData; int32_t iColData;
int32_t iColDataRow; int32_t iColDataRow;
int32_t nColDataRow; int32_t nColDataRow;
SColVal colVal;
SColVal *pColVal = &colVal;
pBlockData->nRow++; pBlockData->nRow++;
@ -806,9 +887,9 @@ int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS
TSDBKEY key = tsdbRowKey(pRow); TSDBKEY key = tsdbRowKey(pRow);
if (pRow->type == 0) { if (pRow->type == 0) {
code = tsdbBlockDataAppendRow0(pBlockData, pRow, pTSchema); code = tBlockDataAppendRow0(pBlockData, pRow, pTSchema);
} else if (pRow->type == 1) { } else if (pRow->type == 1) {
code = tsdbBlockDataAppendRow1(pBlockData, pRow); code = tBlockDataAppendRow1(pBlockData, pRow);
} }
return code; return code;
@ -827,14 +908,3 @@ void tBlockDataClear(SBlockData *pBlockData) {
tsdbFree(pBlockData->aColData[iCol].pData); tsdbFree(pBlockData->aColData[iCol].pData);
} }
} }
// SColData ========================================
int32_t tColDataCmprFn(const void *p1, const void *p2) {
if (((SColData *)p1)->cid < ((SColData *)p2)->cid) {
return -1;
} else if (((SColData *)p1)->cid > ((SColData *)p2)->cid) {
return 1;
}
return 0;
}