From 551a65e16108deef13dd5149459bfbb080f0f5d9 Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Thu, 29 Feb 2024 10:44:25 +0800 Subject: [PATCH] fix: varmeta length reset --- source/common/src/tdatablock.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 6b6c3642de..a20ecd344d 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1688,17 +1688,19 @@ int32_t blockDataTrimFirstRows(SSDataBlock* pBlock, size_t n) { } static void colDataKeepFirstNRows(SColumnInfoData* pColInfoData, size_t n, size_t total) { + if (n >= total || n == 0) return; if (IS_VAR_DATA_TYPE(pColInfoData->info.type)) { - int32_t newLen = pColInfoData->varmeta.offset[n - 1]; - if (newLen != -1) { - if (pColInfoData->info.type == TSDB_DATA_TYPE_JSON) { - newLen += getJsonValueLen(pColInfoData->pData + newLen); - } else { - newLen += varDataTLen(pColInfoData->pData + newLen); + int32_t newLen = -1; + for (int i = n; i >= 0; --i) { + if (pColInfoData->varmeta.offset[i] != -1) { + newLen = pColInfoData->varmeta.offset[i]; + break; } - } else { - newLen = pColInfoData->varmeta.length; } + if(-1 == newLen) { + return; + } + pColInfoData->varmeta.length = newLen; // pColInfoData->varmeta.length = colDataMoveVarData(pColInfoData, 0, n); memset(&pColInfoData->varmeta.offset[n], 0, total - n);