From 51d77d74dfcfdecf0e234177e98aec88b959cb0c Mon Sep 17 00:00:00 2001 From: Roman Nozdrin Date: Mon, 18 May 2020 13:00:20 +0000 Subject: [PATCH] MCOL-641 Fix for GROUP BY on wide-DECIMALs. --- tests/rowgroup-tests.cpp | 30 +++++++++++++++++++----------- utils/rowgroup/rowgroup.h | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/tests/rowgroup-tests.cpp b/tests/rowgroup-tests.cpp index be68a79cd..8beec7ace 100644 --- a/tests/rowgroup-tests.cpp +++ b/tests/rowgroup-tests.cpp @@ -70,13 +70,6 @@ protected: cscale.push_back(0); } - /*offsets.push_back(INITIAL_ROW_OFFSET); - offsets.push_back(16+INITIAL_ROW_OFFSET); - offsets.push_back(16*2+INITIAL_ROW_OFFSET); - roids.push_back(oid); roids.push_back(oid+1); - tkeys.push_back(1); tkeys.push_back(1); - cscale.push_back(0); cscale.push_back(0);*/ - rowgroup::RowGroup inRG(roids.size(), // column count offsets, // oldOffset roids, // column oids @@ -159,7 +152,7 @@ protected: // void TearDown() override {} - rowgroup::Row r, rOut; + rowgroup::Row r, rOut, sameRow, nonequiRow; rowgroup::Row rOutMappingCheck; rowgroup::RowGroup rg, rgOut; rowgroup::RGData rgD, rgDOut; @@ -208,8 +201,6 @@ TEST_F(RowDecimalTest, GetBinaryFieldCheck) rg.getRow(0, &r); uint128_t* u128Value; int128_t* s128Value; -// std::remove_reference::type uType; -// std::remove_reference::type sType; for (size_t i = 0; i < sValueVector.size(); i++) { @@ -302,7 +293,24 @@ TEST_F(RowDecimalTest, CopyBinaryFieldCheck) } } -// WIP TEST_F(RowDecimalTest, RowEqualsCheck) { + rg.getRow(0, &r); + rg.getRow(0, &sameRow); + rg.getRow(1, &nonequiRow); + + for (size_t i = 0; i < sValueVector.size(); i++) + { + EXPECT_TRUE(r.equals(sameRow)); + if (i < sValueVector.size()-1) + { + EXPECT_FALSE(r.equals(nonequiRow)); + } + r.nextRow(rowSize); + sameRow.nextRow(rowSize); + if (i < sValueVector.size()-1) + { + nonequiRow.nextRow(rowSize); + } + } } diff --git a/utils/rowgroup/rowgroup.h b/utils/rowgroup/rowgroup.h index cb6c20718..da01d0941 100644 --- a/utils/rowgroup/rowgroup.h +++ b/utils/rowgroup/rowgroup.h @@ -1359,7 +1359,7 @@ inline bool Row::equals(const Row& r2, uint32_t lastCol) const } else if (UNLIKELY(execplan::isDecimal(columnType))) { - if (getBinaryField(i) != r2.getBinaryField(i)) + if (*getBinaryField(i) != *r2.getBinaryField(i)) return false; }