diff --git a/source/libs/index/src/index_util.c b/source/libs/index/src/index_util.c index ecf5e6d36c02a4e1c287756d0b38c4957d4bc810..fcaab968c24a296431f2a25039050947887e0aac 100644 --- a/source/libs/index/src/index_util.c +++ b/source/libs/index/src/index_util.c @@ -72,6 +72,11 @@ void iUnion(SArray *inters, SArray *final) { if (sz <= 0) { return; } + if (sz == 1) { + taosArrayAddAll(final, taosArrayGetP(inters, 0)); + return; + } + MergeIndex *mi = calloc(sz, sizeof(MergeIndex)); for (int i = 0; i < sz; i++) { SArray *t = taosArrayGetP(inters, i); diff --git a/source/libs/index/test/utilUT.cc b/source/libs/index/test/utilUT.cc index 89549783444fcc4f2b29a494a57eeae683b79268..ffa4ead7749c52f97042179526d57dad99424d50 100644 --- a/source/libs/index/test/utilUT.cc +++ b/source/libs/index/test/utilUT.cc @@ -201,3 +201,27 @@ TEST_F(UtilEnv, 03union) { iUnion(src, rslt); assert(taosArrayGetSize(rslt) == 9); } +TEST_F(UtilEnv, 04union) { + clearSourceArray(src); + clearFinalArray(rslt); + + uint64_t arr1[] = {1, 4, 5, 6}; + SArray * f = (SArray *)taosArrayGetP(src, 0); + for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++) { + taosArrayPush(f, &arr1[i]); + } + + uint64_t arr2[] = {7, 8, 10}; + f = (SArray *)taosArrayGetP(src, 1); + for (int i = 0; i < sizeof(arr2) / sizeof(arr2[0]); i++) { + taosArrayPush(f, &arr2[i]); + } + + uint64_t arr3[] = {20, 21, 30, 100}; + f = (SArray *)taosArrayGetP(src, 2); + for (int i = 0; i < sizeof(arr3) / sizeof(arr3[0]); i++) { + taosArrayPush(f, &arr3[i]); + } + iUnion(src, rslt); + assert(taosArrayGetSize(rslt) == 11); +}