more work
This commit is contained in:
parent
b20d7d56b5
commit
5d2491de52
|
@ -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;
|
||||
|
|
|
@ -341,7 +341,7 @@ 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;
|
||||
uint8_t *qBitmap = (uint8_t *)pBitmap;
|
||||
for (int i = 0; i < nBytes; ++i) {
|
||||
if (*qBitmap != vTypeByte) {
|
||||
return false;
|
||||
|
@ -1856,3 +1856,36 @@ 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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
goto _return_none;
|
||||
}
|
||||
} else {
|
||||
ASSERT(0);
|
||||
}
|
||||
ASSERT(pColData->type == pTColumn->type);
|
||||
|
||||
_return_none:
|
||||
tColDataGetValue(pColData, pRow->iRow, pColVal);
|
||||
} else {
|
||||
*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;
|
||||
}
|
||||
} else {
|
||||
ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue