From 48dc7638395512168c6beeeb38fa15037769540c Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas.vondra@postgresql.org>
Date: Tue, 17 Oct 2023 18:31:29 +0200
Subject: [PATCH 3/8] Fix calculation in brin_minmax_multi_distance_date

When calculating the distance between dates, make sure to subtract the
values in the right order. This can't overflow, because the min/max
values are not sufficiently far away.
---
 src/backend/access/brin/brin_minmax_multi.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c
index 8c72a0a0366..cadfb4481ef 100644
--- a/src/backend/access/brin/brin_minmax_multi.c
+++ b/src/backend/access/brin/brin_minmax_multi.c
@@ -2081,13 +2081,18 @@ brin_minmax_multi_distance_uuid(PG_FUNCTION_ARGS)
 Datum
 brin_minmax_multi_distance_date(PG_FUNCTION_ARGS)
 {
+	float8		delta = 0;
 	DateADT		dateVal1 = PG_GETARG_DATEADT(0);
 	DateADT		dateVal2 = PG_GETARG_DATEADT(1);
 
 	if (DATE_NOT_FINITE(dateVal1) || DATE_NOT_FINITE(dateVal2))
 		PG_RETURN_FLOAT8(0);
 
-	PG_RETURN_FLOAT8(dateVal1 - dateVal2);
+	delta = (dateVal2 - dateVal1);
+
+	Assert(delta >= 0);
+
+	PG_RETURN_FLOAT8(delta);
 }
 
 /*
-- 
2.41.0

