From 830cc627bd9359a5d0f5b18e8772147575a70426 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 11 Sep 2020 10:57:46 +0200 Subject: [PATCH 10/10] WIP: simplify reduce_combine_ranges --- src/backend/access/brin/brin_minmax_multi.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 7450bffc11..c8f36b0c8a 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -1066,6 +1066,7 @@ reduce_combine_ranges(CombineRange *cranges, int ncranges, { int i; int ndistances = (ncranges - 1); + int count = count_values(cranges, ncranges); /* * We have one fewer 'gaps' than the ranges. We'll be decrementing @@ -1077,7 +1078,7 @@ reduce_combine_ranges(CombineRange *cranges, int ncranges, int j; int shortest; - if (count_values(cranges, ncranges) <= max_values * 0.75) + if (count <= max_values * 0.75) break; shortest = distances[i].index; @@ -1089,6 +1090,11 @@ reduce_combine_ranges(CombineRange *cranges, int ncranges, */ Assert(shortest < (ncranges - 1)); + if (!cranges[shortest].collapsed && !cranges[shortest+1].collapsed) + count -= 2; + else if (!cranges[shortest].collapsed || !cranges[shortest+1].collapsed) + count -= 1; + /* * Move the values to join the two selected ranges. The new range is * definiely not collapsed but a regular range. -- 2.25.4