fix: (last cache) compare pk when merging ctb data
This commit is contained in:
parent
5328c6dbea
commit
44fa1636f2
|
@ -294,6 +294,14 @@ void* tsdbCacherowsReaderClose(void* pReader) {
|
|||
|
||||
taosMemoryFree(p->pCurrSchema);
|
||||
|
||||
if (p->rowKey.numOfPKs > 0) {
|
||||
for (int32_t i = 0; i < p->rowKey.numOfPKs; i++) {
|
||||
if (IS_VAR_DATA_TYPE(p->rowKey.pks[i].type)) {
|
||||
taosMemoryFree(p->rowKey.pks[i].pData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (p->pLDataIterArray) {
|
||||
destroySttBlockReader(p->pLDataIterArray, NULL);
|
||||
}
|
||||
|
@ -327,6 +335,12 @@ void* tsdbCacherowsReaderClose(void* pReader) {
|
|||
|
||||
static void freeItem(void* pItem) {
|
||||
SLastCol* pCol = (SLastCol*)pItem;
|
||||
for (int i = 0; i < pCol->rowKey.numOfPKs; i++) {
|
||||
if (IS_VAR_DATA_TYPE(pCol->rowKey.pks[i].type)) {
|
||||
taosMemoryFree(pCol->rowKey.pks[i].pData);
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_VAR_DATA_TYPE(pCol->colVal.value.type) && pCol->colVal.value.pData) {
|
||||
taosMemoryFree(pCol->colVal.value.pData);
|
||||
}
|
||||
|
@ -407,6 +421,16 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
|||
struct STColumn* pCol = &pr->pSchema->columns[slotId];
|
||||
SLastCol p = {.rowKey.ts = INT64_MIN, .colVal.value.type = pCol->type, .colVal.flag = CV_FLAG_NULL};
|
||||
|
||||
if (pr->rowKey.numOfPKs > 0) {
|
||||
p.rowKey.numOfPKs = pr->rowKey.numOfPKs;
|
||||
for (int32_t j = 0; j < pr->rowKey.numOfPKs; j++) {
|
||||
p.rowKey.pks[j].type = pr->pkColumn.type;
|
||||
if (IS_VAR_DATA_TYPE(pr->pkColumn.type)) {
|
||||
p.rowKey.pks[j].pData = taosMemoryCalloc(1, pr->pkColumn.bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_VAR_DATA_TYPE(pCol->type)) {
|
||||
p.colVal.value.pData = taosMemoryCalloc(pCol->bytes, sizeof(char));
|
||||
}
|
||||
|
@ -432,7 +456,7 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
|||
SLastCol* p = taosArrayGet(pLastCols, k);
|
||||
SLastCol* pColVal = (SLastCol*)taosArrayGet(pRow, k);
|
||||
|
||||
if (pColVal->rowKey.ts > p->rowKey.ts) {
|
||||
if (tRowKeyCompare(&pColVal->rowKey, &p->rowKey) > 0) {
|
||||
if (!COL_VAL_IS_VALUE(&pColVal->colVal) && HASTYPE(pr->type, CACHESCAN_RETRIEVE_LAST)) {
|
||||
if (!COL_VAL_IS_VALUE(&p->colVal)) {
|
||||
hasNotNullRow = false;
|
||||
|
@ -445,6 +469,15 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
|||
|
||||
hasRes = true;
|
||||
p->rowKey.ts = pColVal->rowKey.ts;
|
||||
for (int32_t j = 0; j < p->rowKey.numOfPKs; j++) {
|
||||
if (IS_VAR_DATA_TYPE(p->rowKey.pks[j].type)) {
|
||||
memcpy(p->rowKey.pks[j].pData, pColVal->rowKey.pks[j].pData, pColVal->rowKey.pks[j].nData);
|
||||
p->rowKey.pks[j].nData = pColVal->rowKey.pks[j].nData;
|
||||
} else {
|
||||
p->rowKey.pks[j].val = pColVal->rowKey.pks[j].val;
|
||||
}
|
||||
}
|
||||
|
||||
if (k == 0) {
|
||||
if (TARRAY_SIZE(pTableUidList) == 0) {
|
||||
taosArrayPush(pTableUidList, &uid);
|
||||
|
|
Loading…
Reference in New Issue