more code

This commit is contained in:
Hongze Cheng 2022-11-21 17:41:17 +08:00
parent 895b48f834
commit de07035015
2 changed files with 53 additions and 25 deletions

View File

@ -68,12 +68,11 @@ struct SBuffer {
void tBufferDestroy(SBuffer *pBuffer); void tBufferDestroy(SBuffer *pBuffer);
int32_t tBufferInit(SBuffer *pBuffer, int64_t size); int32_t tBufferInit(SBuffer *pBuffer, int64_t size);
int32_t tBufferPut(SBuffer *pBuffer, const void *pData, int64_t nData); int32_t tBufferPut(SBuffer *pBuffer, const void *pData, int64_t nData);
int32_t tBufferReserve(SBuffer *pBuffer, int64_t nData, void **ppData);
// STSchema ================================ // STSchema ================================
void tTSchemaDestroy(STSchema *pTSchema); void tTSchemaDestroy(STSchema *pTSchema);
// SValue ================================
// SColVal ================================ // SColVal ================================
#define CV_FLAG_VALUE ((int8_t)0x0) #define CV_FLAG_VALUE ((int8_t)0x0)
#define CV_FLAG_NONE ((int8_t)0x1) #define CV_FLAG_NONE ((int8_t)0x1)

View File

@ -43,6 +43,16 @@ int32_t tBufferPut(SBuffer *pBuffer, const void *pData, int64_t nData) {
return code; return code;
} }
int32_t tBufferReserve(SBuffer *pBuffer, int64_t nData, void **ppData) {
int32_t code = tRealloc(&pBuffer->pBuf, pBuffer->nBuf + nData);
if (code) return code;
*ppData = pBuffer->pBuf + pBuffer->nBuf;
pBuffer->nBuf += nData;
return code;
}
// ================================ // ================================
static int32_t tGetTagVal(uint8_t *p, STagVal *pTagVal, int8_t isJson); static int32_t tGetTagVal(uint8_t *p, STagVal *pTagVal, int8_t isJson);
@ -66,16 +76,16 @@ int32_t tRowBuild(SArray *aColVal, STSchema *pTSchema, SBuffer *pBuffer) {
ASSERT(((SColVal *)aColVal->pData)[0].type == TSDB_DATA_TYPE_TIMESTAMP); ASSERT(((SColVal *)aColVal->pData)[0].type == TSDB_DATA_TYPE_TIMESTAMP);
// scan --------------- // scan ---------------
uint8_t flag = 0; uint8_t flag = 0;
int32_t iColVal = 1; int32_t iColVal = 1;
int32_t nColVal = taosArrayGetSize(aColVal); const int32_t nColVal = taosArrayGetSize(aColVal);
SColVal *pColVal = (iColVal < nColVal) ? (SColVal *)taosArrayGet(aColVal, iColVal) : NULL; SColVal *pColVal = (iColVal < nColVal) ? (SColVal *)taosArrayGet(aColVal, iColVal) : NULL;
int32_t iTColumn = 1; int32_t iTColumn = 1;
STColumn *pTColumn = pTSchema->columns + iTColumn; STColumn *pTColumn = pTSchema->columns + iTColumn;
int32_t ntp = 0; int32_t ntp = 0;
int32_t nkv = 0; int32_t nkv = 0;
int32_t maxIdx = 0; int32_t maxIdx = 0;
int32_t nidx = 0; int32_t nIdx = 0;
while (pTColumn) { while (pTColumn) {
if (pColVal) { if (pColVal) {
if (pColVal->cid == pTColumn->colId) { if (pColVal->cid == pTColumn->colId) {
@ -89,14 +99,14 @@ int32_t tRowBuild(SArray *aColVal, STSchema *pTSchema, SBuffer *pBuffer) {
} else { } else {
nkv = nkv + tPutI16v(NULL, pTColumn->colId) + TYPE_BYTES[pTColumn->type]; nkv = nkv + tPutI16v(NULL, pTColumn->colId) + TYPE_BYTES[pTColumn->type];
} }
nidx++; nIdx++;
} else if (COL_VAL_IS_NONE(pColVal)) { // NONE } else if (COL_VAL_IS_NONE(pColVal)) { // NONE
flag |= HAS_NONE; flag |= HAS_NONE;
} else if (COL_VAL_IS_NULL(pColVal)) { // NULL } else if (COL_VAL_IS_NULL(pColVal)) { // NULL
flag |= HAS_NULL; flag |= HAS_NULL;
maxIdx = nkv; maxIdx = nkv;
nkv += tPutI16v(NULL, -pTColumn->colId); nkv += tPutI16v(NULL, -pTColumn->colId);
nidx++; nIdx++;
} else { } else {
ASSERT(0); ASSERT(0);
} }
@ -141,13 +151,13 @@ int32_t tRowBuild(SArray *aColVal, STSchema *pTSchema, SBuffer *pBuffer) {
break; break;
} }
if (maxIdx <= UINT8_MAX) { if (maxIdx <= UINT8_MAX) {
nkv = sizeof(SRow) + sizeof(SKVIdx) + sizeof(uint8_t) * nidx + nkv; nkv = sizeof(SRow) + sizeof(SKVIdx) + nIdx + nkv;
flag |= KV_FLG_LIT; flag |= KV_FLG_LIT;
} else if (maxIdx <= UINT16_MAX) { } else if (maxIdx <= UINT16_MAX) {
nkv = sizeof(SRow) + sizeof(SKVIdx) + sizeof(uint16_t) * nidx + nkv; nkv = sizeof(SRow) + sizeof(SKVIdx) + (nIdx << 1) + nkv;
flag |= KV_FLG_MID; flag |= KV_FLG_MID;
} else { } else {
nkv = sizeof(SRow) + sizeof(SKVIdx) + sizeof(uint32_t) * nidx + nkv; nkv = sizeof(SRow) + sizeof(SKVIdx) + (nIdx << 2) + nkv;
flag |= KV_FLG_BIG; flag |= KV_FLG_BIG;
} }
int32_t nRow; int32_t nRow;
@ -159,7 +169,9 @@ int32_t tRowBuild(SArray *aColVal, STSchema *pTSchema, SBuffer *pBuffer) {
} }
// alloc -------------- // alloc --------------
SRow *pRow = NULL; // todo SRow *pRow = NULL;
code = tBufferReserve(pBuffer, nRow, (void **)&pRow);
if (code) return code;
// build -------------- // build --------------
pColVal = (SColVal *)taosArrayGet(aColVal, 0); pColVal = (SColVal *)taosArrayGet(aColVal, 0);
@ -180,17 +192,35 @@ int32_t tRowBuild(SArray *aColVal, STSchema *pTSchema, SBuffer *pBuffer) {
pTColumn = pTSchema->columns + iTColumn; pTColumn = pTSchema->columns + iTColumn;
if (flag & 0xf0) { // KV if (flag & 0xf0) { // KV
SKVIdx *pIdx = (SKVIdx *)pRow->data; SKVIdx *pIdx = (SKVIdx *)pRow->data;
uint8_t *pv = NULL; // todo int32_t iIdx = 0;
int32_t nv = 0;
uint8_t *pv = NULL;
if (flag & KV_FLG_LIT) {
pv = pIdx->idx + nIdx;
} else if (flag & KV_FLG_MID) {
pv = pIdx->idx + (nIdx << 1);
} else {
pv = pIdx->idx + (nIdx << 2);
}
pIdx->nCol = nIdx;
while (pTColumn) { while (pTColumn) {
if (pColVal) { if (pColVal) {
if (pColVal->cid == pTColumn->colId) { if (pColVal->cid == pTColumn->colId) {
if (COL_VAL_IS_VALUE(pColVal)) { if (COL_VAL_IS_VALUE(pColVal)) {
// todo // offset = nv; todo
} else if (COL_VAL_IS_NONE(pColVal)) { nv += tPutI16v(pv + nv, pTColumn->colId);
// todo if (IS_VAR_DATA_TYPE(pTColumn->type)) {
} else { nv += tPutU32v(pv + nv, pColVal->value.nData);
// todo memcpy(pv + nv, pColVal->value.pData, pColVal->value.nData);
nv += pColVal->value.nData;
} else {
memcpy(pv + nv, &pColVal->value.val, pTColumn->bytes);
nv += pTColumn->bytes;
}
} else if (COL_VAL_IS_NULL(pColVal)) {
// offset = nv; todo
nv += tPutI16v(pv + nv, -pTColumn->colId);
} }
pTColumn = (++iTColumn < pTSchema->numOfCols) ? pTSchema->columns + iTColumn : NULL; pTColumn = (++iTColumn < pTSchema->numOfCols) ? pTSchema->columns + iTColumn : NULL;
@ -200,7 +230,6 @@ int32_t tRowBuild(SArray *aColVal, STSchema *pTSchema, SBuffer *pBuffer) {
} else { } else {
pColVal = (++iColVal < nColVal) ? (SColVal *)taosArrayGet(aColVal, iColVal) : NULL; pColVal = (++iColVal < nColVal) ? (SColVal *)taosArrayGet(aColVal, iColVal) : NULL;
} }
} else { // NONE } else { // NONE
pTColumn = (++iTColumn < pTSchema->numOfCols) ? pTSchema->columns + iTColumn : NULL; pTColumn = (++iTColumn < pTSchema->numOfCols) ? pTSchema->columns + iTColumn : NULL;
} }