more work
This commit is contained in:
parent
7b353b5709
commit
23c838c9ef
|
@ -147,6 +147,7 @@ struct SValue {
|
||||||
|
|
||||||
struct SColVal {
|
struct SColVal {
|
||||||
int16_t cid;
|
int16_t cid;
|
||||||
|
int8_t type;
|
||||||
int8_t isNone;
|
int8_t isNone;
|
||||||
int8_t isNull;
|
int8_t isNull;
|
||||||
SValue value;
|
SValue value;
|
||||||
|
|
|
@ -41,7 +41,6 @@ typedef struct SDelIdx SDelIdx;
|
||||||
typedef struct STbData STbData;
|
typedef struct STbData STbData;
|
||||||
typedef struct SMemTable SMemTable;
|
typedef struct SMemTable SMemTable;
|
||||||
typedef struct STbDataIter STbDataIter;
|
typedef struct STbDataIter STbDataIter;
|
||||||
typedef struct SMergeInfo SMergeInfo;
|
|
||||||
typedef struct STable STable;
|
typedef struct STable STable;
|
||||||
typedef struct SMapData SMapData;
|
typedef struct SMapData SMapData;
|
||||||
typedef struct SBlockSMA SBlockSMA;
|
typedef struct SBlockSMA SBlockSMA;
|
||||||
|
@ -71,6 +70,7 @@ typedef struct STsdbFS STsdbFS;
|
||||||
#define HAS_NONE ((int8_t)0x1)
|
#define HAS_NONE ((int8_t)0x1)
|
||||||
#define HAS_NULL ((int8_t)0x2)
|
#define HAS_NULL ((int8_t)0x2)
|
||||||
#define HAS_VALUE ((int8_t)0x4)
|
#define HAS_VALUE ((int8_t)0x4)
|
||||||
|
|
||||||
// tsdbUtil.c ==============================================================================================
|
// tsdbUtil.c ==============================================================================================
|
||||||
// TSDBROW
|
// TSDBROW
|
||||||
#define TSDBROW_SVERSION(ROW) TD_ROW_SVER((ROW)->pTSRow)
|
#define TSDBROW_SVERSION(ROW) TD_ROW_SVER((ROW)->pTSRow)
|
||||||
|
@ -111,7 +111,7 @@ int32_t tPutBlockIdx(uint8_t *p, void *ph);
|
||||||
int32_t tGetBlockIdx(uint8_t *p, void *ph);
|
int32_t tGetBlockIdx(uint8_t *p, void *ph);
|
||||||
// SColdata
|
// SColdata
|
||||||
#define tColDataInit() ((SColData){0})
|
#define tColDataInit() ((SColData){0})
|
||||||
void tColDataReset(SColData *pColData);
|
void tColDataReset(SColData *pColData, int16_t cid, int8_t type);
|
||||||
void tColDataClear(void *ph);
|
void tColDataClear(void *ph);
|
||||||
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal);
|
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal);
|
||||||
void tColDataGetValue(SColData *pColData, int32_t iRow, SColVal *pColVal);
|
void tColDataGetValue(SColData *pColData, int32_t iRow, SColVal *pColVal);
|
||||||
|
@ -365,7 +365,6 @@ struct SAggrBlkCol {
|
||||||
struct SColData {
|
struct SColData {
|
||||||
int16_t cid;
|
int16_t cid;
|
||||||
int8_t type;
|
int8_t type;
|
||||||
int32_t bytes;
|
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
uint8_t *pBitMap;
|
uint8_t *pBitMap;
|
||||||
int32_t *pOfst;
|
int32_t *pOfst;
|
||||||
|
@ -374,12 +373,11 @@ struct SColData {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SBlockData {
|
struct SBlockData {
|
||||||
int32_t maxRow;
|
|
||||||
int32_t nRow;
|
int32_t nRow;
|
||||||
int64_t *aVersion;
|
int64_t *aVersion;
|
||||||
TSKEY *aTSKEY;
|
TSKEY *aTSKEY;
|
||||||
SArray *apColData;
|
SArray *aColDataP; // SArray<SColData *>
|
||||||
SArray *aColData;
|
SArray *aColData; // SArray<SColData>
|
||||||
};
|
};
|
||||||
|
|
||||||
// ================== TSDB global config
|
// ================== TSDB global config
|
||||||
|
|
|
@ -922,8 +922,8 @@ int32_t tsdbWriteBlockData(SDataFWriter *pWriter, SBlockData *pBlockData, uint8_
|
||||||
// other columns
|
// other columns
|
||||||
offset = 0;
|
offset = 0;
|
||||||
tMapDataClear(&pSubBlock->mBlockCol);
|
tMapDataClear(&pSubBlock->mBlockCol);
|
||||||
for (int32_t iCol = 0; iCol < taosArrayGetSize(pBlockData->apColData); iCol++) {
|
for (int32_t iCol = 0; iCol < taosArrayGetSize(pBlockData->aColDataP); iCol++) {
|
||||||
SColData *pColData = (SColData *)taosArrayGetP(pBlockData->apColData, iCol);
|
SColData *pColData = (SColData *)taosArrayGetP(pBlockData->aColDataP, iCol);
|
||||||
|
|
||||||
ASSERT(pColData->flags);
|
ASSERT(pColData->flags);
|
||||||
|
|
||||||
|
|
|
@ -164,7 +164,7 @@ int32_t tsdbRealloc(uint8_t **ppBuf, int64_t size) {
|
||||||
|
|
||||||
if (bsize >= size) goto _exit;
|
if (bsize >= size) goto _exit;
|
||||||
|
|
||||||
if (bsize == 0) bsize = 16;
|
if (bsize == 0) bsize = 64;
|
||||||
while (bsize < size) {
|
while (bsize < size) {
|
||||||
bsize *= 2;
|
bsize *= 2;
|
||||||
}
|
}
|
||||||
|
@ -516,7 +516,7 @@ void tsdbRowGetColVal(TSDBROW *pRow, STSchema *pTSchema, int32_t iCol, SColVal *
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
// p = taosbsearch(&(SColData){.cid = pTColumn->colId}, pRow->pBlockData->apColData, pRow->pBlockData->nColData,
|
// p = taosbsearch(&(SColData){.cid = pTColumn->colId}, pRow->pBlockData->aColDataP, pRow->pBlockData->nColData,
|
||||||
// sizeof(SBlockCol), tColDataCmprFn, TD_EQ);
|
// sizeof(SBlockCol), tColDataCmprFn, TD_EQ);
|
||||||
if (p) {
|
if (p) {
|
||||||
pColData = (SColData *)p;
|
pColData = (SColData *)p;
|
||||||
|
@ -607,8 +607,8 @@ SColVal *tRowIterNext(SRowIter *pIter) {
|
||||||
return &pIter->colVal;
|
return &pIter->colVal;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (pIter->i < taosArrayGetSize(pIter->pRow->pBlockData->apColData)) {
|
if (pIter->i < taosArrayGetSize(pIter->pRow->pBlockData->aColDataP)) {
|
||||||
SColData *pColData = (SColData *)taosArrayGetP(pIter->pRow->pBlockData->apColData, pIter->i);
|
SColData *pColData = (SColData *)taosArrayGetP(pIter->pRow->pBlockData->aColDataP, pIter->i);
|
||||||
|
|
||||||
tColDataGetValue(pColData, pIter->pRow->iRow, &pIter->colVal);
|
tColDataGetValue(pColData, pIter->pRow->iRow, &pIter->colVal);
|
||||||
pIter->i++;
|
pIter->i++;
|
||||||
|
@ -750,8 +750,11 @@ int32_t tGetKEYINFO(uint8_t *p, KEYINFO *pKeyInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SColData ========================================
|
// SColData ========================================
|
||||||
void tColDataReset(SColData *pColData) {
|
void tColDataReset(SColData *pColData, int16_t cid, int8_t type) {
|
||||||
// TODO
|
pColData->cid = cid;
|
||||||
|
pColData->type = type;
|
||||||
|
pColData->flags = 0;
|
||||||
|
pColData->nData = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tColDataClear(void *ph) {
|
void tColDataClear(void *ph) {
|
||||||
|
@ -764,7 +767,12 @@ void tColDataClear(void *ph) {
|
||||||
|
|
||||||
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal) {
|
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
// TODO
|
|
||||||
|
if (pColVal->isNone) {
|
||||||
|
} else if (pColVal->isNull) {
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,52 +791,20 @@ int32_t tColDataCmprFn(const void *p1, const void *p2) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SBlockData ======================================================
|
// SBlockData ======================================================
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t tBlockDataInit(SBlockData *pBlockData) {
|
int32_t tBlockDataInit(SBlockData *pBlockData) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
*pBlockData = (SBlockData){0};
|
pBlockData->nRow = 0;
|
||||||
pBlockData->apColData = taosArrayInit(0, sizeof(SColData *));
|
pBlockData->aVersion = NULL;
|
||||||
if (pBlockData->apColData == NULL) {
|
pBlockData->aTSKEY = NULL;
|
||||||
|
pBlockData->aColDataP = taosArrayInit(0, sizeof(SColData *));
|
||||||
|
if (pBlockData->aColDataP == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
pBlockData->aColData = taosArrayInit(0, sizeof(SColData));
|
pBlockData->aColData = taosArrayInit(0, sizeof(SColData));
|
||||||
if (pBlockData->aColData == NULL) {
|
if (pBlockData->aColData == NULL) {
|
||||||
taosArrayDestroy(pBlockData->apColData);
|
taosArrayDestroy(pBlockData->aColDataP);
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
@ -839,72 +815,111 @@ _exit:
|
||||||
|
|
||||||
void tBlockDataReset(SBlockData *pBlockData) {
|
void tBlockDataReset(SBlockData *pBlockData) {
|
||||||
pBlockData->nRow = 0;
|
pBlockData->nRow = 0;
|
||||||
taosArrayClear(pBlockData->apColData);
|
taosArrayClear(pBlockData->aColDataP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tBlockDataClear(SBlockData *pBlockData) {
|
void tBlockDataClear(SBlockData *pBlockData) {
|
||||||
tsdbFree((uint8_t *)pBlockData->aVersion);
|
tsdbFree((uint8_t *)pBlockData->aVersion);
|
||||||
tsdbFree((uint8_t *)pBlockData->aTSKEY);
|
tsdbFree((uint8_t *)pBlockData->aTSKEY);
|
||||||
taosArrayDestroy(pBlockData->apColData);
|
taosArrayDestroy(pBlockData->aColDataP);
|
||||||
taosArrayDestroyEx(pBlockData->aColData, tColDataClear);
|
taosArrayDestroyEx(pBlockData->aColData, tColDataClear);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t tBlockDataAppendRow0(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTSchema);
|
static SColData *tBlockDataAddBlockCol(SBlockData *pBlockData, int32_t iColData, int16_t cid, int8_t type) {
|
||||||
static int32_t tBlockDataAppendRow1(SBlockData *pBlockData, TSDBROW *pRow);
|
SColData *pColData = NULL;
|
||||||
|
int32_t idx = taosArrayGetSize(pBlockData->aColDataP);
|
||||||
|
|
||||||
|
if (idx >= taosArrayGetSize(pBlockData->aColData)) {
|
||||||
|
if (taosArrayPush(pBlockData->aColData, &((SColData){0})) == NULL) return NULL;
|
||||||
|
}
|
||||||
|
pColData = (SColData *)taosArrayGet(pBlockData->aColData, idx);
|
||||||
|
tColDataReset(pColData, cid, type);
|
||||||
|
|
||||||
|
if (taosArrayInsert(pBlockData->aColDataP, iColData, &pColData) == NULL) return NULL;
|
||||||
|
|
||||||
|
// append NONE
|
||||||
|
for (int32_t i = 0; i < pBlockData->nRow; i++) {
|
||||||
|
if (tColDataAppendValue(pColData, &COL_VAL_NONE(cid)) != 0) return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pColData;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTSchema) {
|
int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTSchema) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t nRow = pBlockData->nRow;
|
|
||||||
TSDBKEY key = tsdbRowKey(pRow);
|
TSDBKEY key = tsdbRowKey(pRow);
|
||||||
|
|
||||||
pBlockData->nRow++;
|
|
||||||
|
|
||||||
// TSDBKEY
|
// TSDBKEY
|
||||||
if (pBlockData->nRow > pBlockData->maxRow) {
|
code = tsdbRealloc((uint8_t **)&pBlockData->aVersion, sizeof(int64_t) * (pBlockData->nRow + 1));
|
||||||
if (pBlockData->maxRow == 0) {
|
if (code) goto _err;
|
||||||
pBlockData->maxRow = 1024;
|
code = tsdbRealloc((uint8_t **)&pBlockData->aTSKEY, sizeof(TSKEY) * (pBlockData->nRow + 1));
|
||||||
} else {
|
if (code) goto _err;
|
||||||
pBlockData->maxRow *= 2;
|
pBlockData->aVersion[pBlockData->nRow] = key.version;
|
||||||
}
|
pBlockData->aTSKEY[pBlockData->nRow] = key.ts;
|
||||||
|
|
||||||
code = tsdbRealloc((uint8_t **)&pBlockData->aVersion, sizeof(int64_t) * pBlockData->maxRow);
|
|
||||||
if (code) goto _err;
|
|
||||||
code = tsdbRealloc((uint8_t **)&pBlockData->aTSKEY, sizeof(TSKEY) * pBlockData->maxRow);
|
|
||||||
if (code) goto _err;
|
|
||||||
}
|
|
||||||
pBlockData->aVersion[nRow] = key.version;
|
|
||||||
pBlockData->aTSKEY[nRow] = key.ts;
|
|
||||||
|
|
||||||
// OTHER
|
// OTHER
|
||||||
int32_t iColData = 0;
|
int32_t iColData = 0;
|
||||||
int32_t nColData = taosArrayGetSize(pBlockData->apColData);
|
SRowIter *pIter = &((SRowIter){0});
|
||||||
SRowIter ri;
|
|
||||||
SColData *pColData;
|
SColData *pColData;
|
||||||
SColVal *pColVal;
|
SColVal *pColVal;
|
||||||
|
|
||||||
tRowIterInit(&ri, pRow, pTSchema);
|
tRowIterInit(pIter, pRow, pTSchema);
|
||||||
pColData = iColData < nColData ? (SColData *)taosArrayGetP(pBlockData->apColData, iColData) : NULL;
|
pColVal = tRowIterNext(pIter);
|
||||||
pColVal = tRowIterNext(&ri);
|
pColData = (iColData < taosArrayGetSize(pBlockData->aColDataP))
|
||||||
while (true) {
|
? (SColData *)taosArrayGetP(pBlockData->aColDataP, iColData)
|
||||||
if (pColData && pColVal) {
|
: NULL;
|
||||||
if (pColData->cid == pColVal->cid) {
|
|
||||||
// append SColVal to SColData
|
while (pColVal && pColData) {
|
||||||
pColVal = tRowIterNext(&ri);
|
if (pColVal->cid == pColData->cid) {
|
||||||
iColData++;
|
code = tColDataAppendValue(pColData, pColVal);
|
||||||
pColData = iColData < nColData ? (SColData *)taosArrayGetP(pBlockData->apColData, iColData) : NULL;
|
if (code) goto _err;
|
||||||
} else if (pColData->cid < pColVal->cid) {
|
|
||||||
// append a NONE
|
pColVal = tRowIterNext(pIter);
|
||||||
iColData++;
|
} else if (pColVal->cid > pColData->cid) {
|
||||||
} else {
|
code = tColDataAppendValue(pColData, &(COL_VAL_NONE(pColData->cid)));
|
||||||
// add a new SColData
|
if (code) goto _err;
|
||||||
}
|
|
||||||
} else if (pColData) {
|
|
||||||
// add a NONE
|
|
||||||
} else {
|
} else {
|
||||||
// add a new SColData and append value
|
pColData = tBlockDataAddBlockCol(pBlockData, iColData, pColVal->cid, pColVal->type);
|
||||||
|
if (pColData == NULL) {
|
||||||
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
code = tColDataAppendValue(pColData, pColVal);
|
||||||
|
if (code) goto _err;
|
||||||
|
|
||||||
|
pColVal = tRowIterNext(pIter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pColData = ((++iColData) < taosArrayGetSize(pBlockData->aColDataP))
|
||||||
|
? (SColData *)taosArrayGetP(pBlockData->aColDataP, iColData)
|
||||||
|
: NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (pColData) {
|
||||||
|
code = tColDataAppendValue(pColData, &COL_VAL_NONE(pColData->cid));
|
||||||
|
if (code) goto _err;
|
||||||
|
|
||||||
|
pColData = ((++iColData) < taosArrayGetSize(pBlockData->aColDataP))
|
||||||
|
? (SColData *)taosArrayGetP(pBlockData->aColDataP, iColData)
|
||||||
|
: NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (pColVal) {
|
||||||
|
pColData = tBlockDataAddBlockCol(pBlockData, iColData, pColVal->cid, pColVal->type);
|
||||||
|
if (pColData == NULL) {
|
||||||
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
code = tColDataAppendValue(pColData, pColVal);
|
||||||
|
if (code) goto _err;
|
||||||
|
|
||||||
|
iColData++;
|
||||||
|
pColVal = tRowIterNext(pIter);
|
||||||
|
}
|
||||||
|
|
||||||
|
pBlockData->nRow++;
|
||||||
return code;
|
return code;
|
||||||
|
|
||||||
_err:
|
_err:
|
||||||
|
|
Loading…
Reference in New Issue