fix(query): set correct output buffer.
This commit is contained in:
parent
85ddb63e53
commit
e99231c1c8
|
@ -22,7 +22,6 @@ typedef struct SLastrowReader {
|
||||||
SVnode* pVnode;
|
SVnode* pVnode;
|
||||||
STSchema* pSchema;
|
STSchema* pSchema;
|
||||||
uint64_t uid;
|
uint64_t uid;
|
||||||
// int32_t* pSlotIds;
|
|
||||||
char** transferBuf; // todo remove it soon
|
char** transferBuf; // todo remove it soon
|
||||||
int32_t numOfCols;
|
int32_t numOfCols;
|
||||||
int32_t type;
|
int32_t type;
|
||||||
|
@ -40,15 +39,17 @@ static void saveOneRow(STSRow* pRow, SSDataBlock* pBlock, SLastrowReader* pReade
|
||||||
if (slotIds[i] == -1) {
|
if (slotIds[i] == -1) {
|
||||||
colDataAppend(pColInfoData, numOfRows, (const char*)&pRow->ts, false);
|
colDataAppend(pColInfoData, numOfRows, (const char*)&pRow->ts, false);
|
||||||
} else {
|
} else {
|
||||||
tTSRowGetVal(pRow, pReader->pSchema, slotIds[i], &colVal);
|
int32_t slotId = slotIds[i];
|
||||||
|
|
||||||
|
tTSRowGetVal(pRow, pReader->pSchema, slotId, &colVal);
|
||||||
|
|
||||||
if (IS_VAR_DATA_TYPE(colVal.type)) {
|
if (IS_VAR_DATA_TYPE(colVal.type)) {
|
||||||
if (colVal.isNull || colVal.isNone) {
|
if (colVal.isNull || colVal.isNone) {
|
||||||
colDataAppendNULL(pColInfoData, numOfRows);
|
colDataAppendNULL(pColInfoData, numOfRows);
|
||||||
} else {
|
} else {
|
||||||
varDataSetLen(pReader->transferBuf[i], colVal.value.nData);
|
varDataSetLen(pReader->transferBuf[slotId], colVal.value.nData);
|
||||||
memcpy(varDataVal(pReader->transferBuf[i]), colVal.value.pData, colVal.value.nData);
|
memcpy(varDataVal(pReader->transferBuf[slotId]), colVal.value.pData, colVal.value.nData);
|
||||||
colDataAppend(pColInfoData, numOfRows, pReader->transferBuf[i], false);
|
colDataAppend(pColInfoData, numOfRows, pReader->transferBuf[slotId], false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
colDataAppend(pColInfoData, numOfRows, (const char*)&colVal.value, colVal.isNull || colVal.isNone);
|
colDataAppend(pColInfoData, numOfRows, (const char*)&colVal.value, colVal.isNull || colVal.isNone);
|
||||||
|
@ -79,7 +80,7 @@ int32_t tsdbLastRowReaderOpen(void* pVnode, int32_t type, SArray* pTableIdList,
|
||||||
p->pSchema = metaGetTbTSchema(p->pVnode->pMeta, pKeyInfo->uid, -1);
|
p->pSchema = metaGetTbTSchema(p->pVnode->pMeta, pKeyInfo->uid, -1);
|
||||||
p->pTableList = pTableIdList;
|
p->pTableList = pTableIdList;
|
||||||
|
|
||||||
for (int32_t i = 0; i < p->numOfCols; ++i) {
|
for (int32_t i = 0; i < p->pSchema->numOfCols; ++i) {
|
||||||
if (IS_VAR_DATA_TYPE(p->pSchema->columns[i].type)) {
|
if (IS_VAR_DATA_TYPE(p->pSchema->columns[i].type)) {
|
||||||
p->transferBuf[i] = taosMemoryMalloc(p->pSchema->columns[i].bytes);
|
p->transferBuf[i] = taosMemoryMalloc(p->pSchema->columns[i].bytes);
|
||||||
}
|
}
|
||||||
|
@ -92,10 +93,11 @@ int32_t tsdbLastRowReaderOpen(void* pVnode, int32_t type, SArray* pTableIdList,
|
||||||
int32_t tsdbLastrowReaderClose(void* pReader) {
|
int32_t tsdbLastrowReaderClose(void* pReader) {
|
||||||
SLastrowReader* p = pReader;
|
SLastrowReader* p = pReader;
|
||||||
|
|
||||||
for (int32_t i = 0; i < p->numOfCols; ++i) {
|
for (int32_t i = 0; i < p->pSchema->numOfCols; ++i) {
|
||||||
taosMemoryFreeClear(p->transferBuf[i]);
|
taosMemoryFreeClear(p->transferBuf[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
taosMemoryFree(p->pSchema);
|
||||||
taosMemoryFree(p->transferBuf);
|
taosMemoryFree(p->transferBuf);
|
||||||
taosMemoryFree(pReader);
|
taosMemoryFree(pReader);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
Loading…
Reference in New Issue