more code

This commit is contained in:
Hongze Cheng 2022-09-20 18:56:36 +08:00
parent e461681040
commit 750a1a8d86
1 changed files with 80 additions and 59 deletions

View File

@ -23,8 +23,7 @@ struct SDiskCol {
int8_t type; int8_t type;
int8_t flag; int8_t flag;
int32_t nVal; int32_t nVal;
uint8_t bit; uint8_t *pBitMap;
SCompressor *pBitC;
int32_t offset; int32_t offset;
SCompressor *pOffC; SCompressor *pOffC;
SCompressor *pValC; SCompressor *pValC;
@ -39,7 +38,6 @@ static int32_t tDiskColReset(SDiskCol *pDiskCol, int16_t cid, int8_t type, uint8
pDiskCol->flag = 0; pDiskCol->flag = 0;
pDiskCol->nVal = 0; pDiskCol->nVal = 0;
tCompressorReset(pDiskCol->pBitC, TSDB_DATA_TYPE_TINYINT, cmprAlg, 1);
tCompressorReset(pDiskCol->pOffC, TSDB_DATA_TYPE_INT, cmprAlg, 1); tCompressorReset(pDiskCol->pOffC, TSDB_DATA_TYPE_INT, cmprAlg, 1);
tCompressorReset(pDiskCol->pValC, type, cmprAlg, 1); tCompressorReset(pDiskCol->pValC, type, cmprAlg, 1);
@ -82,17 +80,13 @@ static int32_t tDiskColAddVal1(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_N
if (!pColVal->isNone) { if (!pColVal->isNone) {
// bit map // bit map
pDiskCol->bit = 0; int32_t nBit = BIT1_SIZE(pDiskCol->nVal + 1);
for (int32_t i = 0; i < (pDiskCol->nVal >> 3); i++) {
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1); code = tRealloc(&pDiskCol->pBitMap, nBit);
if (code) goto _exit; if (code) goto _exit;
}
SET_BIT1(&pDiskCol->bit, (pDiskCol->nVal & 0x3), 1); memset(pDiskCol->pBitMap, 0, nBit);
if ((pDiskCol->nVal & 0x3) == 7) { SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1);
if (code) goto _exit;
pDiskCol->bit = 0;
}
// value // value
if (pColVal->isNull) { if (pColVal->isNull) {
@ -119,34 +113,20 @@ static int32_t tDiskColAddVal2(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_N
int32_t code = 0; int32_t code = 0;
if (!pColVal->isNull) { if (!pColVal->isNull) {
int32_t nBit = BIT1_SIZE(pDiskCol->nVal + 1);
code = tRealloc(&pDiskCol->pBitMap, nBit);
if (code) goto _exit;
if (pColVal->isNone) { if (pColVal->isNone) {
pDiskCol->flag |= HAS_NONE; pDiskCol->flag |= HAS_NONE;
pDiskCol->bit = 1; memset(pDiskCol->pBitMap, 255, nBit);
for (int32_t i = 0; i < (pDiskCol->nVal >> 3); i++) { SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1);
if (code) goto _exit;
}
SET_BIT1(&pDiskCol->bit, (pDiskCol->nVal & 0x3), 0);
if ((pDiskCol->nVal & 0x3) == 7) {
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1);
if (code) goto _exit;
pDiskCol->bit = 0;
}
} else { } else {
pDiskCol->flag |= HAS_VALUE; pDiskCol->flag |= HAS_VALUE;
pDiskCol->bit = 0; memset(pDiskCol->pBitMap, 0, nBit);
for (int32_t i = 0; i < (pDiskCol->nVal >> 3); i++) { SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1);
if (code) goto _exit;
}
SET_BIT1(&pDiskCol->bit, (pDiskCol->nVal & 0x3), 1);
if ((pDiskCol->nVal & 0x3) == 7) {
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1);
if (code) goto _exit;
pDiskCol->bit = 0;
}
SColVal cv = COL_VAL_VALUE(pColVal->cid, pColVal->type, (SValue){0}); SColVal cv = COL_VAL_VALUE(pColVal->cid, pColVal->type, (SValue){0});
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) { for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
@ -166,23 +146,30 @@ _exit:
static int32_t tDiskColAddVal3(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_NULL|HAS_NONE static int32_t tDiskColAddVal3(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_NULL|HAS_NONE
int32_t code = 0; int32_t code = 0;
uint8_t mod8 = (pDiskCol->nVal & 0x3);
if (pColVal->isNone) { if (pColVal->isNone) {
SET_BIT1(&pDiskCol->bit, mod8, 0); code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
if (mod8 == 7) { if (code) goto _exit;
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1);
if (code) goto _exit; SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
}
} else if (pColVal->isNull) { } else if (pColVal->isNull) {
SET_BIT1(&pDiskCol->bit, mod8, 1); code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
if (mod8 == 7) { if (code) goto _exit;
code = tCompress(pDiskCol->pBitC, &pDiskCol->bit, 1);
if (code) goto _exit; SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
}
} else { } else {
pDiskCol->flag |= HAS_VALUE; pDiskCol->flag |= HAS_VALUE;
// convert from bit1 to bit2 and add a 2 (todo) uint8_t *pBitMap = NULL;
code = tRealloc(&pBitMap, BIT2_SIZE(pDiskCol->nVal + 1));
if (code) goto _exit;
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
SET_BIT2(pBitMap, iVal, GET_BIT1(pDiskCol->pBitMap, iVal));
}
SET_BIT2(pBitMap, pDiskCol->nVal, 2);
tFree(pDiskCol->pBitMap);
pDiskCol->pBitMap = pBitMap;
SColVal cv = COL_VAL_VALUE(pColVal->cid, pColVal->type, (SValue){0}); SColVal cv = COL_VAL_VALUE(pColVal->cid, pColVal->type, (SValue){0});
for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) { for (int32_t iVal = 0; iVal < pDiskCol->nVal; iVal++) {
@ -208,7 +195,12 @@ static int32_t tDiskColAddVal4(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_V
pDiskCol->flag |= HAS_NULL; pDiskCol->flag |= HAS_NULL;
} }
// set bitmap (todo) int32_t nBit = BIT1_SIZE(pDiskCol->nVal + 1);
code = tRealloc(&pDiskCol->pBitMap, nBit);
if (code) goto _exit;
memset(pDiskCol->pBitMap, 255, nBit);
SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
code = tDiskColAddValue(pDiskCol, pColVal); code = tDiskColAddValue(pDiskCol, pColVal);
if (code) goto _exit; if (code) goto _exit;
@ -216,7 +208,6 @@ static int32_t tDiskColAddVal4(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_V
code = tDiskColAddValue(pDiskCol, pColVal); code = tDiskColAddValue(pDiskCol, pColVal);
if (code) goto _exit; if (code) goto _exit;
} }
pDiskCol->nVal++; pDiskCol->nVal++;
_exit: _exit:
@ -228,12 +219,25 @@ static int32_t tDiskColAddVal5(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_V
if (pColVal->isNull) { if (pColVal->isNull) {
pDiskCol->flag |= HAS_NULL; pDiskCol->flag |= HAS_NULL;
// convert bit1 to bit2 uint8_t *pBitMap = NULL;
code = tRealloc(&pBitMap, BIT2_SIZE(pDiskCol->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);
}
SET_BIT2(pBitMap, pDiskCol->nVal, 1);
tFree(pDiskCol->pBitMap);
pDiskCol->pBitMap = pBitMap;
} else { } else {
code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
if (code) goto _exit;
if (pColVal->isNone) { if (pColVal->isNone) {
// SET_BIT1(0); SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
} else { } else {
// SET_BIT1(1); SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
} }
} }
code = tDiskColAddValue(pDiskCol, pColVal); code = tDiskColAddValue(pDiskCol, pColVal);
@ -248,12 +252,26 @@ static int32_t tDiskColAddVal6(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_V
if (pColVal->isNone) { if (pColVal->isNone) {
pDiskCol->flag |= HAS_NONE; pDiskCol->flag |= HAS_NONE;
// bit1 to bit2
uint8_t *pBitMap = NULL;
code = tRealloc(&pBitMap, BIT2_SIZE(pDiskCol->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);
}
SET_BIT2(pBitMap, pDiskCol->nVal, 0);
tFree(pDiskCol->pBitMap);
pDiskCol->pBitMap = pBitMap;
} else { } else {
code = tRealloc(&pDiskCol->pBitMap, BIT1_SIZE(pDiskCol->nVal + 1));
if (code) goto _exit;
if (pColVal->isNull) { if (pColVal->isNull) {
// SET_BIT1(0) SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 0);
} else { } else {
// SET_BIT1(1) SET_BIT1(pDiskCol->pBitMap, pDiskCol->nVal, 1);
} }
} }
code = tDiskColAddValue(pDiskCol, pColVal); code = tDiskColAddValue(pDiskCol, pColVal);
@ -266,12 +284,15 @@ _exit:
static int32_t tDiskColAddVal7(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_VALUE|HAS_NULL|HAS_NONE static int32_t tDiskColAddVal7(SDiskCol *pDiskCol, SColVal *pColVal) { // HAS_VALUE|HAS_NULL|HAS_NONE
int32_t code = 0; int32_t code = 0;
code = tRealloc(&pDiskCol->pBitMap, BIT2_SIZE(pDiskCol->nVal + 1));
if (code) goto _exit;
if (pColVal->isNone) { if (pColVal->isNone) {
// set_bit2(0); SET_BIT2(pDiskCol->pBitMap, pDiskCol->nVal, 0);
} else if (pColVal->isNull) { } else if (pColVal->isNull) {
// set_bit2(1); SET_BIT2(pDiskCol->pBitMap, pDiskCol->nVal, 1);
} else { } else {
// set_bit2(2); SET_BIT2(pDiskCol->pBitMap, pDiskCol->nVal, 2);
} }
code = tDiskColAddValue(pDiskCol, pColVal); code = tDiskColAddValue(pDiskCol, pColVal);
if (code) goto _exit; if (code) goto _exit;