more code

This commit is contained in:
Hongze Cheng 2022-09-21 15:00:32 +08:00
parent f51c86430a
commit e12ac1dd6f
1 changed files with 155 additions and 154 deletions

View File

@ -16,10 +16,10 @@
#include "tsdb.h"
typedef struct SDiskDataBuilder SDiskDataBuilder;
typedef struct SDiskCol SDiskCol;
typedef struct SDiskColBuilder SDiskColBuilder;
typedef struct SDiskData SDiskData;
struct SDiskCol {
struct SDiskColBuilder {
int16_t cid;
int8_t type;
int8_t flag;
@ -31,332 +31,332 @@ struct SDiskCol {
SCompressor *pValC;
};
// SDiskCol ================================================
static int32_t tDiskColInit(SDiskCol *pDiskCol, int16_t cid, int8_t type, uint8_t cmprAlg) {
// SDiskColBuilder ================================================
static int32_t tDiskColInit(SDiskColBuilder *pBuilder, int16_t cid, int8_t type, uint8_t cmprAlg) {
int32_t code = 0;
pDiskCol->cid = cid;
pDiskCol->type = type;
pDiskCol->flag = 0;
pDiskCol->cmprAlg = cmprAlg;
pDiskCol->nVal = 0;
pDiskCol->offset = 0;
pBuilder->cid = cid;
pBuilder->type = type;
pBuilder->flag = 0;
pBuilder->cmprAlg = cmprAlg;
pBuilder->nVal = 0;
pBuilder->offset = 0;
if (IS_VAR_DATA_TYPE(type)) {
if (pDiskCol->pOffC == NULL) {
code = tCompressorCreate(&pDiskCol->pOffC);
if (pBuilder->pOffC == NULL) {
code = tCompressorCreate(&pBuilder->pOffC);
if (code) return code;
}
code = tCompressorReset(pDiskCol->pOffC, TSDB_DATA_TYPE_INT, cmprAlg);
code = tCompressorReset(pBuilder->pOffC, TSDB_DATA_TYPE_INT, cmprAlg);
if (code) return code;
}
if (pDiskCol->pValC == NULL) {
code = tCompressorCreate(&pDiskCol->pValC);
if (pBuilder->pValC == NULL) {
code = tCompressorCreate(&pBuilder->pValC);
if (code) return code;
}
code = tCompressorReset(pDiskCol->pValC, type, cmprAlg);
code = tCompressorReset(pBuilder->pValC, type, cmprAlg);
if (code) return code;
return code;
}
static int32_t tDiskColClear(SDiskCol *pDiskCol) {
static int32_t tDiskColClear(SDiskColBuilder *pBuilder) {
int32_t code = 0;
tFree(pDiskCol->pBitMap);
if (pDiskCol->pOffC) tCompressorDestroy(pDiskCol->pOffC);
if (pDiskCol->pValC) tCompressorDestroy(pDiskCol->pValC);
tFree(pBuilder->pBitMap);
if (pBuilder->pOffC) tCompressorDestroy(pBuilder->pOffC);
if (pBuilder->pValC) tCompressorDestroy(pBuilder->pValC);
return code;
}
static int32_t tDiskColToBinary(SDiskCol *pDiskCol, const uint8_t **ppData, int32_t *nData) {
static int32_t tGnrtDiskCol(SDiskColBuilder *pBuilder, SBlockCol *pBlockCol, const uint8_t **ppData) {
int32_t code = 0;
ASSERT(pDiskCol->flag && pDiskCol->flag != HAS_NONE);
ASSERT(pBuilder->flag && pBuilder->flag != HAS_NONE);
if (pDiskCol->flag == HAS_NULL) {
if (pBuilder->flag == HAS_NULL) {
return code;
}
// bitmap (todo)
if (pDiskCol->flag != HAS_VALUE) {
if (pBuilder->flag != HAS_VALUE) {
}
// offset (todo)
if (IS_VAR_DATA_TYPE(pDiskCol->type)) {
code = tCompGen(pDiskCol->pOffC, NULL /* todo */, NULL /* todo */);
if (IS_VAR_DATA_TYPE(pBuilder->type)) {
code = tCompGen(pBuilder->pOffC, NULL /* todo */, NULL /* todo */);
if (code) return code;
}
// value (todo)
if (pDiskCol->flag != (HAS_NULL | HAS_NONE)) {
code = tCompGen(pDiskCol->pValC, NULL /* todo */, NULL /* todo */);
if (pBuilder->flag != (HAS_NULL | HAS_NONE)) {
code = tCompGen(pBuilder->pValC, NULL /* todo */, NULL /* todo */);
if (code) return code;
}
return code;
}
static int32_t tDiskColAddValue(SDiskCol *pDiskCol, SColVal *pColVal) {
static int32_t tDiskColAddValue(SDiskColBuilder *pBuilder, SColVal *pColVal) {
int32_t code = 0;
if (IS_VAR_DATA_TYPE(pColVal->type)) {
code = tCompress(pDiskCol->pOffC, &pDiskCol->offset, sizeof(int32_t));
code = tCompress(pBuilder->pOffC, &pBuilder->offset, sizeof(int32_t));
if (code) goto _exit;
pDiskCol->offset += pColVal->value.nData;
pBuilder->offset += pColVal->value.nData;
}
code = tCompress(pDiskCol->pValC, pColVal->value.pData, pColVal->value.nData /*TODO*/);
code = tCompress(pBuilder->pValC, pColVal->value.pData, pColVal->value.nData /*TODO*/);
if (code) goto _exit;
_exit:
return code;
}
static int32_t tDiskColAddVal0(SDiskCol *pDiskCol, SColVal *pColVal) { // 0
static int32_t tDiskColAddVal0(SDiskColBuilder *pBuilder, SColVal *pColVal) { // 0
int32_t code = 0;
if (pColVal->isNone) {
pDiskCol->flag = HAS_NONE;
pBuilder->flag = HAS_NONE;
} else if (pColVal->isNull) {
pDiskCol->flag = HAS_NULL;
pBuilder->flag = HAS_NULL;
} else {
pDiskCol->flag = HAS_VALUE;
code = tDiskColAddValue(pDiskCol, pColVal);
pBuilder->flag = HAS_VALUE;
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
}
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t tDiskColAddVal1(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_NONE
static int32_t tDiskColAddVal1(SDiskColBuilder *pBuilder, SColVal *pColVal) { // HAS_NONE
int32_t code = 0;
if (!pColVal->isNone) {
// bit map
int32_t nBit = BIT1_SIZE(pDiskCol->nVal + 1);
int32_t nBit = BIT1_SIZE(pBuilder->nVal + 1);
code = tRealloc(&pDiskCol->pBitMap, nBit);
code = tRealloc(&pBuilder->pBitMap, nBit);
if (code) goto _exit;
memset(pDiskCol->pBitMap, 0, nBit);
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
memset(pBuilder->pBitMap, 0, nBit);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 1);
// value
if (pColVal->isNull) {
pDiskCol->flag |= HAS_NULL;
pBuilder->flag |= HAS_NULL;
} else {
pDiskCol->flag |= HAS_VALUE;
pBuilder->flag |= HAS_VALUE;
SColVal cv = COL_VAL_VALUE(pColVal->cid, pColVal->type, (SValue){0});
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
code = tDiskColAddValue(pDiskCol, &cv);
for (int32_t iVal = 0; iVal < pBuilder->nVal; iVal++) {
code = tDiskColAddValue(pBuilder, &cv);
if (code) goto _exit;
}
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
}
}
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t tDiskColAddVal2(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_NULL
static int32_t tDiskColAddVal2(SDiskColBuilder *pBuilder, SColVal *pColVal) { // HAS_NULL
int32_t code = 0;
if (!pColVal->isNull) {
int32_t nBit = BIT1_SIZE(pDiskCol->nVal + 1);
code = tRealloc(&pDiskCol->pBitMap, nBit);
int32_t nBit = BIT1_SIZE(pBuilder->nVal + 1);
code = tRealloc(&pBuilder->pBitMap, nBit);
if (code) goto _exit;
if (pColVal->isNone) {
pDiskCol->flag |= HAS_NONE;
pBuilder->flag |= HAS_NONE;
memset(pDiskCol->pBitMap, 255, nBit);
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
memset(pBuilder->pBitMap, 255, nBit);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 0);
} else {
pDiskCol->flag |= HAS_VALUE;
pBuilder->flag |= HAS_VALUE;
memset(pDiskCol->pBitMap, 0, nBit);
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
memset(pBuilder->pBitMap, 0, nBit);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 1);
SColVal cv = COL_VAL_VALUE(pColVal->cid, pColVal->type, (SValue){0});
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
code = tDiskColAddValue(pDiskCol, &cv);
for (int32_t iVal = 0; iVal < pBuilder->nVal; iVal++) {
code = tDiskColAddValue(pBuilder, &cv);
if (code) goto _exit;
}
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
}
}
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t tDiskColAddVal3(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_NULL|HAS_NONE
static int32_t tDiskColAddVal3(SDiskColBuilder *pBuilder, SColVal *pColVal) { // HAS_NULL|HAS_NONE
int32_t code = 0;
if (pColVal->isNone) {
code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBuilder->pBitMap, BIT1_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 0);
} else if (pColVal->isNull) {
code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBuilder->pBitMap, BIT1_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 1);
} else {
pDiskCol->flag |= HAS_VALUE;
pBuilder->flag |= HAS_VALUE;
uint8_t *pBitMap = NULL;
code = tRealloc(&pBitMap, BIT2_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBitMap, BIT2_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
SET_BIT2(pBitMap, iVal, GET_BIT1(pDiskCol->pBitMap, iVal));
for (int32_t iVal = 0; iVal < pBuilder->nVal; iVal++) {
SET_BIT2(pBitMap, iVal, GET_BIT1(pBuilder->pBitMap, iVal));
}
SET_BIT2(pBitMap, pDiskCol->nVal, 2);
SET_BIT2(pBitMap, pBuilder->nVal, 2);
tFree(pDiskCol->pBitMap);
pDiskCol->pBitMap = pBitMap;
tFree(pBuilder->pBitMap);
pBuilder->pBitMap = pBitMap;
SColVal cv = COL_VAL_VALUE(pColVal->cid, pColVal->type, (SValue){0});
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
code = tDiskColAddValue(pDiskCol, &cv);
for (int32_t iVal = 0; iVal < pBuilder->nVal; iVal++) {
code = tDiskColAddValue(pBuilder, &cv);
if (code) goto _exit;
}
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
}
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t tDiskColAddVal4(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_VALUE
static int32_t tDiskColAddVal4(SDiskColBuilder *pBuilder, SColVal *pColVal) { // HAS_VALUE
int32_t code = 0;
if (pColVal->isNone || pColVal->isNull) {
if (pColVal->isNone) {
pDiskCol->flag |= HAS_NONE;
pBuilder->flag |= HAS_NONE;
} else {
pDiskCol->flag |= HAS_NULL;
pBuilder->flag |= HAS_NULL;
}
int32_t nBit = BIT1_SIZE(pDiskCol->nVal + 1);
code = tRealloc(&pDiskCol->pBitMap, nBit);
int32_t nBit = BIT1_SIZE(pBuilder->nVal + 1);
code = tRealloc(&pBuilder->pBitMap, nBit);
if (code) goto _exit;
memset(pDiskCol->pBitMap, 255, nBit);
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
memset(pBuilder->pBitMap, 255, nBit);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 0);
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
} else {
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
}
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t tDiskColAddVal5(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_VALUE|HAS_NONE
static int32_t tDiskColAddVal5(SDiskColBuilder *pBuilder, SColVal *pColVal) { // HAS_VALUE|HAS_NONE
int32_t code = 0;
if (pColVal->isNull) {
pDiskCol->flag |= HAS_NULL;
pBuilder->flag |= HAS_NULL;
uint8_t *pBitMap = NULL;
code = tRealloc(&pBitMap, BIT2_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBitMap, BIT2_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
SET_BIT2(pBitMap, iVal, GET_BIT1(pDiskCol->pBitMap, iVal) ? 2 : 0);
for (int32_t iVal = 0; iVal < pBuilder->nVal; iVal++) {
SET_BIT2(pBitMap, iVal, GET_BIT1(pBuilder->pBitMap, iVal) ? 2 : 0);
}
SET_BIT2(pBitMap, pDiskCol->nVal, 1);
SET_BIT2(pBitMap, pBuilder->nVal, 1);
tFree(pDiskCol->pBitMap);
pDiskCol->pBitMap = pBitMap;
tFree(pBuilder->pBitMap);
pBuilder->pBitMap = pBitMap;
} else {
code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBuilder->pBitMap, BIT1_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
if (pColVal->isNone) {
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 0);
} else {
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 1);
}
}
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t tDiskColAddVal6(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_VALUE|HAS_NULL
static int32_t tDiskColAddVal6(SDiskColBuilder *pBuilder, SColVal *pColVal) { // HAS_VALUE|HAS_NULL
int32_t code = 0;
if (pColVal->isNone) {
pDiskCol->flag |= HAS_NONE;
pBuilder->flag |= HAS_NONE;
uint8_t *pBitMap = NULL;
code = tRealloc(&pBitMap, BIT2_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBitMap, BIT2_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
SET_BIT2(pBitMap, iVal, GET_BIT1(pDiskCol->pBitMap, iVal) ? 2 : 1);
for (int32_t iVal = 0; iVal < pBuilder->nVal; iVal++) {
SET_BIT2(pBitMap, iVal, GET_BIT1(pBuilder->pBitMap, iVal) ? 2 : 1);
}
SET_BIT2(pBitMap, pDiskCol->nVal, 0);
SET_BIT2(pBitMap, pBuilder->nVal, 0);
tFree(pDiskCol->pBitMap);
pDiskCol->pBitMap = pBitMap;
tFree(pBuilder->pBitMap);
pBuilder->pBitMap = pBitMap;
} else {
code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBuilder->pBitMap, BIT1_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
if (pColVal->isNull) {
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 0);
} else {
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
SET_BIT1(pBuilder->pBitMap, pBuilder->nVal, 1);
}
}
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t tDiskColAddVal7(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_VALUE|HAS_NULL|HAS_NONE
static int32_t tDiskColAddVal7(SDiskColBuilder *pBuilder, SColVal *pColVal) { // HAS_VALUE|HAS_NULL|HAS_NONE
int32_t code = 0;
code = tRealloc(&pDiskCol->pBitMap, BIT2_SIZE(pDiskCol->nVal + 1));
code = tRealloc(&pBuilder->pBitMap, BIT2_SIZE(pBuilder->nVal + 1));
if (code) goto _exit;
if (pColVal->isNone) {
SET_BIT2(pDiskCol->pBitMap, pDiskCol->nVal, 0);
SET_BIT2(pBuilder->pBitMap, pBuilder->nVal, 0);
} else if (pColVal->isNull) {
SET_BIT2(pDiskCol->pBitMap, pDiskCol->nVal, 1);
SET_BIT2(pBuilder->pBitMap, pBuilder->nVal, 1);
} else {
SET_BIT2(pDiskCol->pBitMap, pDiskCol->nVal, 2);
SET_BIT2(pBuilder->pBitMap, pBuilder->nVal, 2);
}
code = tDiskColAddValue(pDiskCol, pColVal);
code = tDiskColAddValue(pBuilder, pColVal);
if (code) goto _exit;
pDiskCol->nVal++;
pBuilder->nVal++;
_exit:
return code;
}
static int32_t (*tDiskColAddValImpl[])(SDiskCol *pDiskCol, SColVal *pColVal) = {
static int32_t (*tDiskColAddValImpl[])(SDiskColBuilder *pBuilder, SColVal *pColVal) = {
tDiskColAddVal0, // 0
tDiskColAddVal1, // HAS_NONE
tDiskColAddVal2, // HAS_NULL
@ -377,7 +377,7 @@ struct SDiskDataBuilder {
SCompressor *pVerC;
SCompressor *pKeyC;
int32_t nDiskCol;
SArray *aDiskCol;
SArray *aDiskColBuilder;
uint8_t *aBuf[2];
};
@ -410,9 +410,9 @@ int32_t tDiskDataBuilderInit(SDiskDataBuilder *pBuilder, STSchema *pTSchema, TAB
code = tCompressorReset(pBuilder->pKeyC, TSDB_DATA_TYPE_TIMESTAMP, cmprAlg);
if (code) return code;
if (pBuilder->aDiskCol == NULL) {
pBuilder->aDiskCol = taosArrayInit(pTSchema->numOfCols - 1, sizeof(SDiskCol));
if (pBuilder->aDiskCol == NULL) {
if (pBuilder->aDiskColBuilder == NULL) {
pBuilder->aDiskColBuilder = taosArrayInit(pTSchema->numOfCols - 1, sizeof(SDiskColBuilder));
if (pBuilder->aDiskColBuilder == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
return code;
}
@ -422,17 +422,17 @@ int32_t tDiskDataBuilderInit(SDiskDataBuilder *pBuilder, STSchema *pTSchema, TAB
for (int32_t iCol = 1; iCol < pTSchema->numOfCols; iCol++) {
STColumn *pTColumn = &pTSchema->columns[iCol];
if (pBuilder->nDiskCol >= taosArrayGetSize(pBuilder->aDiskCol)) {
SDiskCol dc = (SDiskCol){0};
if (taosArrayPush(pBuilder->aDiskCol, &dc) == NULL) {
if (pBuilder->nDiskCol >= taosArrayGetSize(pBuilder->aDiskColBuilder)) {
SDiskColBuilder dc = (SDiskColBuilder){0};
if (taosArrayPush(pBuilder->aDiskColBuilder, &dc) == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
return code;
}
}
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol, pBuilder->nDiskCol);
SDiskColBuilder *pDiskColBuilder = (SDiskColBuilder *)taosArrayGet(pBuilder->aDiskColBuilder, pBuilder->nDiskCol);
code = tDiskColInit(pDiskCol, pTColumn->colId, pTColumn->type, cmprAlg);
code = tDiskColInit(pDiskColBuilder, pTColumn->colId, pTColumn->type, cmprAlg);
if (code) return code;
pBuilder->nDiskCol++;
@ -448,12 +448,13 @@ int32_t tDiskDataBuilderDestroy(SDiskDataBuilder *pBuilder) {
if (pBuilder->pVerC) tCompressorDestroy(pBuilder->pVerC);
if (pBuilder->pKeyC) tCompressorDestroy(pBuilder->pKeyC);
if (pBuilder->aDiskCol) {
for (int32_t iDiskCol = 0; iDiskCol < taosArrayGetSize(pBuilder->aDiskCol); iDiskCol++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol, iDiskCol);
tDiskColClear(pDiskCol);
if (pBuilder->aDiskColBuilder) {
for (int32_t iDiskColBuilder = 0; iDiskColBuilder < taosArrayGetSize(pBuilder->aDiskColBuilder);
iDiskColBuilder++) {
SDiskColBuilder *pDiskColBuilder = (SDiskColBuilder *)taosArrayGet(pBuilder->aDiskColBuilder, iDiskColBuilder);
tDiskColClear(pDiskColBuilder);
}
taosArrayDestroy(pBuilder->aDiskCol);
taosArrayDestroy(pBuilder->aDiskColBuilder);
}
for (int32_t iBuf = 0; iBuf < sizeof(pBuilder->aBuf) / sizeof(pBuilder->aBuf[0]); iBuf++) {
tFree(pBuilder->aBuf[iBuf]);
@ -494,19 +495,19 @@ int32_t tDiskDataBuilderAddRow(SDiskDataBuilder *pBuilder, TSDBROW *pRow, STSche
tRowIterInit(&iter, pRow, pTSchema);
SColVal *pColVal = tRowIterNext(&iter);
for (int32_t iDiskCol = 0; iDiskCol < pBuilder->nDiskCol; iDiskCol++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol, iDiskCol);
for (int32_t iDiskColBuilder = 0; iDiskColBuilder < pBuilder->nDiskCol; iDiskColBuilder++) {
SDiskColBuilder *pDiskColBuilder = (SDiskColBuilder *)taosArrayGet(pBuilder->aDiskColBuilder, iDiskColBuilder);
while (pColVal && pColVal->cid < pDiskCol->cid) {
while (pColVal && pColVal->cid < pDiskColBuilder->cid) {
pColVal = tRowIterNext(&iter);
}
if (pColVal == NULL || pColVal->cid > pDiskCol->cid) {
SColVal cv = COL_VAL_NONE(pDiskCol->cid, pDiskCol->type);
code = tDiskColAddValImpl[pDiskCol->flag](pDiskCol, &cv);
if (pColVal == NULL || pColVal->cid > pDiskColBuilder->cid) {
SColVal cv = COL_VAL_NONE(pDiskColBuilder->cid, pDiskColBuilder->type);
code = tDiskColAddValImpl[pDiskColBuilder->flag](pDiskColBuilder, &cv);
if (code) goto _exit;
} else {
code = tDiskColAddValImpl[pDiskCol->flag](pDiskCol, pColVal);
code = tDiskColAddValImpl[pDiskColBuilder->flag](pDiskColBuilder, pColVal);
if (code) goto _exit;
pColVal = tRowIterNext(&iter);
}
@ -551,18 +552,18 @@ int32_t tGnrtDiskData(SDiskDataBuilder *pBuilder, SDiskData *pDiskData) {
if (code) return code;
int32_t offset = 0;
for (int32_t iDiskCol = 0; iDiskCol < pBuilder->nDiskCol; iDiskCol++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol, iDiskCol);
for (int32_t iDiskColBuilder = 0; iDiskColBuilder < pBuilder->nDiskCol; iDiskColBuilder++) {
SDiskColBuilder *pDiskColBuilder = (SDiskColBuilder *)taosArrayGet(pBuilder->aDiskColBuilder, iDiskColBuilder);
if (pDiskCol->flag == HAS_NONE) continue;
if (pDiskColBuilder->flag == HAS_NONE) continue;
code = tDiskColToBinary(pDiskCol, NULL, NULL);
code = tGnrtDiskCol(pDiskColBuilder, NULL, NULL);
if (code) return code;
SBlockCol bCol = {.cid = pDiskCol->cid,
.type = pDiskCol->type,
SBlockCol bCol = {.cid = pDiskColBuilder->cid,
.type = pDiskColBuilder->type,
// .smaOn = ,
.flag = pDiskCol->flag,
.flag = pDiskColBuilder->flag,
// .szOrigin =
// .szBitmap =
// .szOffset =
@ -589,12 +590,12 @@ int32_t tGnrtDiskData(SDiskDataBuilder *pBuilder, SDiskData *pDiskData) {
n += hdr.szVer;
memcpy(pBuilder->aBuf[0] + n, pKey, hdr.szKey);
n += hdr.szKey;
for (int32_t iDiskCol = 0; iDiskCol < pBuilder->nDiskCol; iDiskCol++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol, iDiskCol);
for (int32_t iDiskColBuilder = 0; iDiskColBuilder < pBuilder->nDiskCol; iDiskColBuilder++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskColBuilder, iDiskColBuilder);
n += tPutBlockCol(pBuilder->aBuf[0] + n, NULL /*pDiskCol->bCol (todo) */);
}
for (int32_t iDiskCol = 0; iDiskCol < pBuilder->nDiskCol; iDiskCol++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol, iDiskCol);
for (int32_t iDiskColBuilder = 0; iDiskColBuilder < pBuilder->nDiskCol; iDiskColBuilder++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskColBuilder, iDiskColBuilder);
// memcpy(pDiskData->aBuf[0] + n, NULL, );
// n += 0;
}