From 1c6bf2d1d36fb912a6604e732246bdc6644edfaf Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Fri, 7 Apr 2023 18:08:49 +0800 Subject: [PATCH 1/3] fix: fix nullbitmap shift error when trimming data blocks. --- source/common/src/tdatablock.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index a65f30f023..af42ca6040 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1590,12 +1590,13 @@ static void doShiftBitmap(char* nullBitmap, size_t n, size_t total) { i += 1; } } else if (n > 8) { - int32_t gap = len - newLen; + int32_t remain = (total % 8 <= tail) ? 1 : 0; + int32_t gap = len - newLen - remain; while (i < newLen) { uint8_t v = p[i + gap]; p[i] = (v << tail); - if (i < newLen - 1) { + if (i < newLen - 1 + remain) { uint8_t next = p[i + gap + 1]; p[i] |= (next >> (8 - tail)); } From 8b063357e1b39ab44d137d94fda78ff2412219ec Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Fri, 7 Apr 2023 18:08:49 +0800 Subject: [PATCH 2/3] fix: fix nullbitmap shift error when trimming data blocks. --- tests/system-test/2-query/limit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/2-query/limit.py b/tests/system-test/2-query/limit.py index c00e3b7d56..f51ed06008 100644 --- a/tests/system-test/2-query/limit.py +++ b/tests/system-test/2-query/limit.py @@ -288,7 +288,7 @@ class TDTestCase: tdSql.checkData(0, 3, 5.000000000) tdSql.checkData(0, 4, 5.000000000) tdSql.checkData(0, 5, 0.000000000) - tdSql.checkData(0, 7, 1) + tdSql.checkData(0, 7, None) tdSql.checkData(0, 8, "binary5") tdSql.checkData(0, 9, "nchar5") tdSql.checkData(1, 8, None) From 2d0dad7a37d32278fa21883fc1daa32880bb5b1d Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Fri, 7 Apr 2023 18:08:49 +0800 Subject: [PATCH 3/3] fix: fix nullbitmap shift error when trimming data blocks. --- source/common/src/tdatablock.c | 2 +- tests/system-test/2-query/limit.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index af42ca6040..0dd8cb9b0c 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1590,7 +1590,7 @@ static void doShiftBitmap(char* nullBitmap, size_t n, size_t total) { i += 1; } } else if (n > 8) { - int32_t remain = (total % 8 <= tail) ? 1 : 0; + int32_t remain = (total % 8 != 0 && total % 8 <= tail) ? 1 : 0; int32_t gap = len - newLen - remain; while (i < newLen) { uint8_t v = p[i + gap]; diff --git a/tests/system-test/2-query/limit.py b/tests/system-test/2-query/limit.py index f51ed06008..c00e3b7d56 100644 --- a/tests/system-test/2-query/limit.py +++ b/tests/system-test/2-query/limit.py @@ -288,7 +288,7 @@ class TDTestCase: tdSql.checkData(0, 3, 5.000000000) tdSql.checkData(0, 4, 5.000000000) tdSql.checkData(0, 5, 0.000000000) - tdSql.checkData(0, 7, None) + tdSql.checkData(0, 7, 1) tdSql.checkData(0, 8, "binary5") tdSql.checkData(0, 9, "nchar5") tdSql.checkData(1, 8, None)