提交 5d2491de 编写于 作者: H Hongze Cheng

more work

上级 b20d7d56
......@@ -299,6 +299,7 @@ int32_t tdAppendColValToRow(SRowBuilder *pBuilder, col_id_t colId, int8_t colTyp
int32_t tdGetTpRowValOfCol(SCellVal *output, STSRow *pRow, void *pBitmap, int8_t colType, int32_t offset,
int16_t colIdx);
int32_t tdGetKvRowValOfCol(SCellVal *output, STSRow *pRow, void *pBitmap, int32_t offset, int16_t colIdx);
void tTSRowGetVal(STSRow *pRow, STSchema *pTSchema, int16_t iCol, SColVal *pColVal);
typedef struct {
STSchema *pSchema;
......
......@@ -339,9 +339,9 @@ int32_t tdSetBitmapValTypeN(void *pBitmap, int16_t nEle, TDRowValT valType, int8
}
bool tdIsBitmapBlkNorm(const void *pBitmap, int32_t numOfBits, int8_t bitmapMode) {
int32_t nBytes = (bitmapMode == 0 ? numOfBits / TD_VTYPE_PARTS : numOfBits / TD_VTYPE_PARTS_I);
uint8_t vTypeByte = tdVTypeByte[bitmapMode][TD_VTYPE_NORM];
uint8_t *qBitmap = (uint8_t*)pBitmap;
int32_t nBytes = (bitmapMode == 0 ? numOfBits / TD_VTYPE_PARTS : numOfBits / TD_VTYPE_PARTS_I);
uint8_t vTypeByte = tdVTypeByte[bitmapMode][TD_VTYPE_NORM];
uint8_t *qBitmap = (uint8_t *)pBitmap;
for (int i = 0; i < nBytes; ++i) {
if (*qBitmap != vTypeByte) {
return false;
......@@ -1855,4 +1855,37 @@ void tdSTSRowIterReset(STSRowIter *pIter, STSRow *pRow) {
void tdSTSRowIterInit(STSRowIter *pIter, STSchema *pSchema) {
pIter->pSchema = pSchema;
pIter->maxColId = pSchema->columns[pSchema->numOfCols - 1].colId;
}
void tTSRowGetVal(STSRow *pRow, STSchema *pTSchema, int16_t iCol, SColVal *pColVal) {
STColumn *pTColumn = &pTSchema->columns[iCol];
SCellVal cv;
SValue value;
ASSERT(iCol > 0);
if (TD_IS_TP_ROW(pRow)) {
tdSTpRowGetVal(pRow, pTColumn->colId, pTColumn->type, pTSchema->flen, pTColumn->offset, iCol - 1, &cv);
} else if (TD_IS_KV_ROW(pRow)) {
ASSERT(iCol > 0);
SKvRowIdx *pColIdx = tdKvRowColIdxAt(pRow, iCol - 1);
tdSKvRowGetVal(pRow, pTColumn->colId, pColIdx->offset, iCol - 1, &cv);
} else {
ASSERT(0);
}
if (tdValTypeIsNone(cv.valType)) {
*pColVal = COL_VAL_NONE(pTColumn->colId, pTColumn->type);
} else if (tdValTypeIsNull(cv.valType)) {
*pColVal = COL_VAL_NULL(pTColumn->colId, pTColumn->type);
} else {
if (IS_VAR_DATA_TYPE(pTColumn->type)) {
value.nData = varDataLen(cv.val);
value.pData = varDataVal(cv.val);
} else {
tGetValue(cv.val, &value, pTColumn->type);
}
*pColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, value);
}
}
\ No newline at end of file
......@@ -115,7 +115,7 @@ void tColDataReset(SColData *pColData, int16_t cid, int8_t type);
void tColDataClear(void *ph);
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal);
int32_t tColDataGetValue(SColData *pColData, int32_t iRow, SColVal *pColVal);
int32_t tColDataCmprFn(const void *p1, const void *p2);
int32_t tColDataPCmprFn(const void *p1, const void *p2);
// SBlockData
int32_t tBlockDataInit(SBlockData *pBlockData);
void tBlockDataReset(SBlockData *pBlockData);
......
......@@ -509,58 +509,24 @@ void tsdbRowGetColVal(TSDBROW *pRow, STSchema *pTSchema, int32_t iCol, SColVal *
ASSERT(iCol > 0);
if (pRow->type == 0) {
// get from row (todo);
tTSRowGetVal(pRow->pTSRow, pTSchema, iCol, pColVal);
} else if (pRow->type == 1) {
SColData *pColData;
SColData *pColData = &(SColData){.cid = pTColumn->colId};
void *p = NULL;
// TODO
ASSERT(0);
// p = taosbsearch(&(SColData){.cid = pTColumn->colId}, pRow->pBlockData->aColDataP, pRow->pBlockData->nColData,
// sizeof(SBlockCol), tColDataCmprFn, TD_EQ);
p = taosArraySearch(pRow->pBlockData->aColDataP, &pColData, tColDataPCmprFn, TD_EQ);
if (p) {
pColData = (SColData *)p;
ASSERT(pColData->flag);
pColData = *(SColData **)p;
if (pColData->flag == HAS_NONE) {
goto _return_none;
} else if (pColData->flag == HAS_NULL) {
goto _return_null;
} else {
uint8_t v = GET_BIT2(pColData->pBitMap, pRow->iRow);
if (v == 0) {
goto _return_none;
} else if (v == 1) {
goto _return_null;
} else {
int32_t offset;
if (IS_VAR_DATA_TYPE(pTColumn->type)) {
// offset = ; (todo)
ASSERT(0);
} else {
offset = tDataTypes[pTColumn->type].bytes * pRow->iRow;
}
tGetValue(pColData->pData + offset, &value, pTColumn->type);
}
}
ASSERT(pColData->type == pTColumn->type);
tColDataGetValue(pColData, pRow->iRow, pColVal);
} else {
goto _return_none;
*pColVal = COL_VAL_NONE(pTColumn->colId, pTColumn->type);
}
} else {
ASSERT(0);
}
_return_none:
*pColVal = COL_VAL_NONE(pTColumn->colId, pTColumn->type);
return;
_return_null:
*pColVal = COL_VAL_NULL(pTColumn->colId, pTColumn->type);
return;
_return_value:
*pColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, value);
return;
}
int32_t tPutTSDBRow(uint8_t *p, TSDBROW *pRow) {
......@@ -880,10 +846,13 @@ _exit:
return code;
}
int32_t tColDataCmprFn(const void *p1, const void *p2) {
if (((SColData *)p1)->cid < ((SColData *)p2)->cid) {
int32_t tColDataPCmprFn(const void *p1, const void *p2) {
SColData *pColData1 = *(SColData **)p1;
SColData *pColData2 = *(SColData **)p2;
if (pColData1->cid < pColData2->cid) {
return -1;
} else if (((SColData *)p1)->cid > ((SColData *)p2)->cid) {
} else if (pColData1->cid > pColData2->cid) {
return 1;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册